1e41f4b71Sopenharmony_ci# Starting a UIAbility from the FA Model
2e41f4b71Sopenharmony_ci
3e41f4b71Sopenharmony_ci
4e41f4b71Sopenharmony_ciThis topic describes how the three application components of the FA model start the UIAbility component of the stage model.
5e41f4b71Sopenharmony_ci
6e41f4b71Sopenharmony_ci
7e41f4b71Sopenharmony_ci## PageAbility Starting a UIAbility
8e41f4b71Sopenharmony_ci
9e41f4b71Sopenharmony_ciA PageAbility starts a UIAbility in the same way as it starts another PageAbility.
10e41f4b71Sopenharmony_ci
11e41f4b71Sopenharmony_ci```ts
12e41f4b71Sopenharmony_ciimport featureAbility from '@ohos.ability.featureAbility';
13e41f4b71Sopenharmony_ciimport Want from '@ohos.app.ability.Want';
14e41f4b71Sopenharmony_ciimport { BusinessError } from '@ohos.base';
15e41f4b71Sopenharmony_ciimport hilog from '@ohos.hilog';
16e41f4b71Sopenharmony_ci
17e41f4b71Sopenharmony_ciconst TAG: string = 'PageInterflowFaAndStage';
18e41f4b71Sopenharmony_ci
19e41f4b71Sopenharmony_ciconst domain: number = 0xFF00;
20e41f4b71Sopenharmony_ci
21e41f4b71Sopenharmony_ci@Entry
22e41f4b71Sopenharmony_ci@Component
23e41f4b71Sopenharmony_cistruct PageInterflowFaAndStage {
24e41f4b71Sopenharmony_ci  build() {
25e41f4b71Sopenharmony_ci    Column() {
26e41f4b71Sopenharmony_ci      //...
27e41f4b71Sopenharmony_ci      List({ initialIndex: 0 }) {
28e41f4b71Sopenharmony_ci        ListItem() {
29e41f4b71Sopenharmony_ci          Row() {
30e41f4b71Sopenharmony_ci            //...
31e41f4b71Sopenharmony_ci          }
32e41f4b71Sopenharmony_ci          .onClick(() => {
33e41f4b71Sopenharmony_ci            let want: Want = {
34e41f4b71Sopenharmony_ci              bundleName: 'ohos.samples.etsclock',
35e41f4b71Sopenharmony_ci              abilityName: 'MainAbility'
36e41f4b71Sopenharmony_ci            };
37e41f4b71Sopenharmony_ci            featureAbility.startAbility({ want }).then((code) => {
38e41f4b71Sopenharmony_ci              hilog.info(domain, TAG, 'Ability verify code: ' + JSON.stringify(code));
39e41f4b71Sopenharmony_ci            }).catch((error: BusinessError) => {
40e41f4b71Sopenharmony_ci              hilog.error(domain, TAG, 'Ability failed: ' + JSON.stringify(error));
41e41f4b71Sopenharmony_ci            });
42e41f4b71Sopenharmony_ci            //...
43e41f4b71Sopenharmony_ci          })
44e41f4b71Sopenharmony_ci        }
45e41f4b71Sopenharmony_ci        //...
46e41f4b71Sopenharmony_ci      }
47e41f4b71Sopenharmony_ci      //...
48e41f4b71Sopenharmony_ci    }
49e41f4b71Sopenharmony_ci    //...
50e41f4b71Sopenharmony_ci  }
51e41f4b71Sopenharmony_ci}
52e41f4b71Sopenharmony_ci```
53e41f4b71Sopenharmony_ci
54e41f4b71Sopenharmony_ci
55e41f4b71Sopenharmony_ci## PageAbility Accessing a UIAbility (startAbilityForResult)
56e41f4b71Sopenharmony_ci
57e41f4b71Sopenharmony_ciDifferent from **startAbility()**, **startAbilityForResult()** obtains the execution result when the UIAbility is destroyed.
58e41f4b71Sopenharmony_ci
59e41f4b71Sopenharmony_ciA PageAbility starts a UIAbility through **startAbilityForResult()** in the same way as it starts another PageAbility through **startAbilityForResult()**.
60e41f4b71Sopenharmony_ci
61e41f4b71Sopenharmony_ci
62e41f4b71Sopenharmony_ci```ts
63e41f4b71Sopenharmony_ciimport featureAbility from '@ohos.ability.featureAbility';
64e41f4b71Sopenharmony_ciimport Want from '@ohos.app.ability.Want';
65e41f4b71Sopenharmony_ciimport { BusinessError } from '@ohos.base';
66e41f4b71Sopenharmony_ciimport hilog from '@ohos.hilog';
67e41f4b71Sopenharmony_ci
68e41f4b71Sopenharmony_ciconst TAG: string = 'PageInterflowFaAndStage';
69e41f4b71Sopenharmony_ci
70e41f4b71Sopenharmony_ciconst domain: number = 0xFF00;
71e41f4b71Sopenharmony_ci
72e41f4b71Sopenharmony_ci@Entry
73e41f4b71Sopenharmony_ci@Component
74e41f4b71Sopenharmony_cistruct PageInterflowFaAndStage {
75e41f4b71Sopenharmony_ci  build() {
76e41f4b71Sopenharmony_ci    Column() {
77e41f4b71Sopenharmony_ci      //...
78e41f4b71Sopenharmony_ci      List({ initialIndex: 0 }) {
79e41f4b71Sopenharmony_ci        ListItem() {
80e41f4b71Sopenharmony_ci          Row() {
81e41f4b71Sopenharmony_ci            //...
82e41f4b71Sopenharmony_ci          }
83e41f4b71Sopenharmony_ci          .onClick(() => {
84e41f4b71Sopenharmony_ci            let want: Want = {
85e41f4b71Sopenharmony_ci              bundleName: 'ohos.samples.etsclock',
86e41f4b71Sopenharmony_ci              abilityName: 'MainAbility'
87e41f4b71Sopenharmony_ci            };
88e41f4b71Sopenharmony_ci            featureAbility.startAbilityForResult({ want }).then((result) => {
89e41f4b71Sopenharmony_ci              hilog.info(domain, TAG, 'Ability verify result: ' + JSON.stringify(result));
90e41f4b71Sopenharmony_ci            }).catch((error: BusinessError) => {
91e41f4b71Sopenharmony_ci              hilog.error(domain, TAG, 'Ability failed: ' + JSON.stringify(error));
92e41f4b71Sopenharmony_ci            });
93e41f4b71Sopenharmony_ci          })
94e41f4b71Sopenharmony_ci        }
95e41f4b71Sopenharmony_ci        //...
96e41f4b71Sopenharmony_ci      }
97e41f4b71Sopenharmony_ci      //...
98e41f4b71Sopenharmony_ci    }
99e41f4b71Sopenharmony_ci    //...
100e41f4b71Sopenharmony_ci  }
101e41f4b71Sopenharmony_ci}
102e41f4b71Sopenharmony_ci```
103e41f4b71Sopenharmony_ci
104e41f4b71Sopenharmony_ci
105e41f4b71Sopenharmony_ci## ServiceAbility or DataAbility Starting a UIAbility
106e41f4b71Sopenharmony_ci
107e41f4b71Sopenharmony_ciA ServiceAbility or DataAbility starts a UIAbility in the same way as it starts a PageAbility.
108e41f4b71Sopenharmony_ci
109e41f4b71Sopenharmony_ci
110e41f4b71Sopenharmony_ci```ts
111e41f4b71Sopenharmony_ciimport type common from '@ohos.app.ability.common';
112e41f4b71Sopenharmony_ciimport particleAbility from '@ohos.ability.particleAbility';
113e41f4b71Sopenharmony_ciimport type Want from '@ohos.app.ability.Want';
114e41f4b71Sopenharmony_ciimport type { BusinessError } from '@ohos.base';
115e41f4b71Sopenharmony_ciimport hilog from '@ohos.hilog';
116e41f4b71Sopenharmony_ci
117e41f4b71Sopenharmony_ciconst TAG: string = '[Sample_FAModelAbilityDevelop]';
118e41f4b71Sopenharmony_ci
119e41f4b71Sopenharmony_ciconst domain: number = 0xFF00;
120e41f4b71Sopenharmony_ci
121e41f4b71Sopenharmony_ciclass ServiceAbilityStartUiAbility {
122e41f4b71Sopenharmony_ci  onStart(): void {
123e41f4b71Sopenharmony_ci    // Start the UIAbility.
124e41f4b71Sopenharmony_ci    let want: Want = {
125e41f4b71Sopenharmony_ci      bundleName: 'ohos.samples.etsclock',
126e41f4b71Sopenharmony_ci      abilityName: 'MainAbility'
127e41f4b71Sopenharmony_ci    };
128e41f4b71Sopenharmony_ci    particleAbility.startAbility({ want }).then(() => {
129e41f4b71Sopenharmony_ci      hilog.info(domain, TAG, 'ServiceAbilityStartUIAbility Start Ability successfully.');
130e41f4b71Sopenharmony_ci    }).catch((error: BusinessError) => {
131e41f4b71Sopenharmony_ci      hilog.info(domain, TAG, 'ServiceAbilityStartUIAbility Ability failed: ' + JSON.stringify(error));
132e41f4b71Sopenharmony_ci    });
133e41f4b71Sopenharmony_ci  }
134e41f4b71Sopenharmony_ci};
135e41f4b71Sopenharmony_ci
136e41f4b71Sopenharmony_ciexport default new ServiceAbilityStartUiAbility();
137e41f4b71Sopenharmony_ci```
138