1e41f4b71Sopenharmony_ci# formfwk Subsystem Changelog
2e41f4b71Sopenharmony_ci
3e41f4b71Sopenharmony_ci## cl.formfwk.1 Some APIs Moved from @ohos.app.form.formHost.d.ts and Their Permission Changed
4e41f4b71Sopenharmony_ci
5e41f4b71Sopenharmony_ci1. APIs used for listening for and obtaining dynamic widget information are moved from **@ohos.app.form.formHost.d.ts** to **@ohos.app.form.formObserver.d.ts**.
6e41f4b71Sopenharmony_ci2. The permission for these APIs is changed from **ohos.permission.REQUIRE_FORM** to **ohos.permission.OBSERVE_FORM_RUNNING**.
7e41f4b71Sopenharmony_ci
8e41f4b71Sopenharmony_ci**Change Impact**
9e41f4b71Sopenharmony_ci
10e41f4b71Sopenharmony_ciApplications that use the involved ArkTS APIs may have compatibility issues.
11e41f4b71Sopenharmony_ci
12e41f4b71Sopenharmony_ci**Key API/Component Changes**
13e41f4b71Sopenharmony_ci
14e41f4b71Sopenharmony_ci|     API     | Home .d.ts File Before Modification| Home .d.ts File After Modification| Permission Required Before Modification| Permission Required After Modification|
15e41f4b71Sopenharmony_ci|   --------    |   --------    |   --------    | --------      | --------  |
16e41f4b71Sopenharmony_ci| on('formAdd') | @ohos.app.form.formHost.d.ts | @ohos.app.form.formObserver.d.ts | ohos.permission.REQUIRE_FORM | ohos.permission.OBSERVE_FORM_RUNNING | @ohos.app.form.formHost.d.ts | @ohos.app.form.formObserver.d.ts | ohos.permission.REQUIRE_FORM|ohos.permission.OBSERVE_FORM_RUNNING|
17e41f4b71Sopenharmony_ci| off('formAdd')| @ohos.app.form.formHost.d.ts | @ohos.app.form.formObserver.d.ts | ohos.permission.REQUIRE_FORM|ohos.permission.OBSERVE_FORM_RUNNING | @ohos.app.form.formHost.d.ts | @ohos.app.form.formObserver.d.ts | ohos.permission.REQUIRE_FORM | ohos.permission.OBSERVE_FORM_RUNNING |
18e41f4b71Sopenharmony_ci| on('formRemove') | @ohos.app.form.formHost.d.ts | @ohos.app.form.formObserver.d.ts | ohos.permission.REQUIRE_FORM | ohos.permission.OBSERVE_FORM_RUNNING | @ohos.app.form.formHost.d.ts | @ohos.app.form.formObserver.d.ts | ohos.permission.REQUIRE_FORM | ohos.permission.OBSERVE_FORM_RUNNING |
19e41f4b71Sopenharmony_ci| off('formRemove') | @ohos.app.form.formHost.d.ts | @ohos.app.form.formObserver.d.ts | ohos.permission.REQUIRE_FORM | ohos.permission.OBSERVE_FORM_RUNNING | @ohos.app.form.formHost.d.ts | @ohos.app.form.formObserver.d.ts | ohos.permission.REQUIRE_FORM | ohos.permission.OBSERVE_FORM_RUNNING |
20e41f4b71Sopenharmony_ci| on('notifyVisible') | @ohos.app.form.formHost.d.ts | @ohos.app.form.formObserver.d.ts | ohos.permission.REQUIRE_FORM | ohos.permission.OBSERVE_FORM_RUNNING | @ohos.app.form.formHost.d.ts | @ohos.app.form.formObserver.d.ts | ohos.permission.REQUIRE_FORM | ohos.permission.OBSERVE_FORM_RUNNING |
21e41f4b71Sopenharmony_ci| off('notifyVisible') | @ohos.app.form.formHost.d.ts | @ohos.app.form.formObserver.d.ts | ohos.permission.REQUIRE_FORM | ohos.permission.OBSERVE_FORM_RUNNING | @ohos.app.form.formHost.d.ts | @ohos.app.form.formObserver.d.ts | ohos.permission.REQUIRE_FORM | ohos.permission.OBSERVE_FORM_RUNNING |
22e41f4b71Sopenharmony_ci| on('notifyInvisible') | @ohos.app.form.formHost.d.ts | @ohos.app.form.formObserver.d.ts | ohos.permission.REQUIRE_FORM | ohos.permission.OBSERVE_FORM_RUNNING | @ohos.app.form.formHost.d.ts | @ohos.app.form.formObserver.d.ts | ohos.permission.REQUIRE_FORM | ohos.permission.OBSERVE_FORM_RUNNING |
23e41f4b71Sopenharmony_ci| off('notifyInvisible') | @ohos.app.form.formHost.d.ts | @ohos.app.form.formObserver.d.ts | ohos.permission.REQUIRE_FORM | ohos.permission.OBSERVE_FORM_RUNNING | @ohos.app.form.formHost.d.ts | @ohos.app.form.formObserver.d.ts | ohos.permission.REQUIRE_FORM | ohos.permission.OBSERVE_FORM_RUNNING |
24e41f4b71Sopenharmony_ci| getRunningFormInfos | @ohos.app.form.formHost.d.ts | @ohos.app.form.formObserver.d.ts | ohos.permission.REQUIRE_FORM | ohos.permission.OBSERVE_FORM_RUNNING | @ohos.app.form.formHost.d.ts | @ohos.app.form.formObserver.d.ts | ohos.permission.REQUIRE_FORM | ohos.permission.OBSERVE_FORM_RUNNING |
25e41f4b71Sopenharmony_ci| getRunningFormInfosByFilter | @ohos.app.form.formHost.d.ts | @ohos.app.form.formObserver.d.ts | ohos.permission.REQUIRE_FORM | ohos.permission.OBSERVE_FORM_RUNNING | @ohos.app.form.formHost.d.ts | @ohos.app.form.formObserver.d.ts | ohos.permission.REQUIRE_FORM | ohos.permission.OBSERVE_FORM_RUNNING |
26e41f4b71Sopenharmony_ci| getRunningFormInfoById | @ohos.app.form.formHost.d.ts | @ohos.app.form.formObserver.d.ts | ohos.permission.REQUIRE_FORM | ohos.permission.OBSERVE_FORM_RUNNING | @ohos.app.form.formHost.d.ts | @ohos.app.form.formObserver.d.ts | ohos.permission.REQUIRE_FORM | ohos.permission.OBSERVE_FORM_RUNNING |
27e41f4b71Sopenharmony_ci
28e41f4b71Sopenharmony_ci
29e41f4b71Sopenharmony_ci**Adaptation Guide**
30e41f4b71Sopenharmony_ci
31e41f4b71Sopenharmony_ciAdapt your application code accordingly. To use these APIs in OpenHarmony 4.0.9.5 and later versions, import **@ohos.app.form.formObserver.d.ts** and request the **ohos.permission.OBSERVE_FORM_RUNNING** permission.
32e41f4b71Sopenharmony_ci
33e41f4b71Sopenharmony_ci**Example**
34e41f4b71Sopenharmony_ci```ts
35e41f4b71Sopenharmony_ciimport formObserver from '@ohos.app.form.formObserver';
36e41f4b71Sopenharmony_ciimport formInfo from '@ohos.app.form.formInfo';
37e41f4b71Sopenharmony_ciimport Base from '@ohos.base';
38e41f4b71Sopenharmony_ci
39e41f4b71Sopenharmony_citry {
40e41f4b71Sopenharmony_ci  formObserver.getRunningFormInfos((error: Base.BusinessError, data: formInfo.RunningFormInfo[]) => {
41e41f4b71Sopenharmony_ci    if (error) {
42e41f4b71Sopenharmony_ci      console.error(`error, code: ${error.code}, message: ${error.message}`);
43e41f4b71Sopenharmony_ci    } else {
44e41f4b71Sopenharmony_ci      console.log('formHost getRunningFormInfos, data: ${JSON.stringify(data)}');
45e41f4b71Sopenharmony_ci    }
46e41f4b71Sopenharmony_ci  }, 'com.example.ohos.formjsdemo');
47e41f4b71Sopenharmony_ci} catch(error) {
48e41f4b71Sopenharmony_ci  console.error(`catch error, code: ${error.code}, message: ${error.message}`);
49e41f4b71Sopenharmony_ci}
50e41f4b71Sopenharmony_ci```
51e41f4b71Sopenharmony_ci
52e41f4b71Sopenharmony_ci## cl.formfwk.2 Adjusted the Parameter Sequence of Event Subscription and Unsubscription APIs (on/off)
53e41f4b71Sopenharmony_ci
54e41f4b71Sopenharmony_ciThe **callback** parameter is moved as the last parameter in the event subscription and unsubscription APIs (**on**/**off**).
55e41f4b71Sopenharmony_ci
56e41f4b71Sopenharmony_ci**Change Impact**
57e41f4b71Sopenharmony_ci
58e41f4b71Sopenharmony_ciApplications that use the involved ArkTS APIs may have compatibility issues.
59e41f4b71Sopenharmony_ci
60e41f4b71Sopenharmony_ci**Key API/Component Changes**
61e41f4b71Sopenharmony_ci
62e41f4b71Sopenharmony_ciBefore change:
63e41f4b71Sopenharmony_ci
64e41f4b71Sopenharmony_ci```ts
65e41f4b71Sopenharmony_cifunction on(type: 'formAdd', observerCallback: Callback<formInfo.RunningFormInfo>, bundleName?: string): void;
66e41f4b71Sopenharmony_cifunction off(type: 'formAdd', observerCallback?: Callback<formInfo.RunningFormInfo>, bundleName?: string): void;
67e41f4b71Sopenharmony_ci
68e41f4b71Sopenharmony_cifunction on(type: 'formRemove', observerCallback: Callback<formInfo.RunningFormInfo>, bundleName?: string): void;
69e41f4b71Sopenharmony_cifunction off(type: 'formRemove', observerCallback?: Callback<formInfo.RunningFormInfo>, bundleName?: string): void;
70e41f4b71Sopenharmony_ci
71e41f4b71Sopenharmony_cifunction on(
72e41f4b71Sopenharmony_ci    type: 'notifyVisible',
73e41f4b71Sopenharmony_ci    observerCallback: Callback<Array<formInfo.RunningFormInfo>>,
74e41f4b71Sopenharmony_ci    hostBundleName?: string
75e41f4b71Sopenharmony_ci  ): void;
76e41f4b71Sopenharmony_cifunction off(
77e41f4b71Sopenharmony_ci    type: 'notifyVisible',
78e41f4b71Sopenharmony_ci    observerCallback?: Callback<Array<formInfo.RunningFormInfo>>,
79e41f4b71Sopenharmony_ci    hostBundleName?: string
80e41f4b71Sopenharmony_ci  ): void;
81e41f4b71Sopenharmony_ci
82e41f4b71Sopenharmony_cifunction on(
83e41f4b71Sopenharmony_ci    type: 'notifyInvisible',
84e41f4b71Sopenharmony_ci    observerCallback: Callback<Array<formInfo.RunningFormInfo>>,
85e41f4b71Sopenharmony_ci    hostBundleName?: string
86e41f4b71Sopenharmony_ci  ): void;
87e41f4b71Sopenharmony_cifunction off(
88e41f4b71Sopenharmony_ci    type: 'notifyInvisible',
89e41f4b71Sopenharmony_ci    observerCallback?: Callback<Array<formInfo.RunningFormInfo>>,
90e41f4b71Sopenharmony_ci    hostBundleName?: string
91e41f4b71Sopenharmony_ci  ): void;
92e41f4b71Sopenharmony_ci```
93e41f4b71Sopenharmony_ci
94e41f4b71Sopenharmony_ciAfter change:
95e41f4b71Sopenharmony_ci
96e41f4b71Sopenharmony_ci```ts
97e41f4b71Sopenharmony_cifunction on(type: 'formAdd', observerCallback: Callback<formInfo.RunningFormInfo>): void;
98e41f4b71Sopenharmony_cifunction on(type: 'formAdd', hostBundleName: string, observerCallback: Callback<formInfo.RunningFormInfo>): void;
99e41f4b71Sopenharmony_cifunction off(type: 'formAdd', hostBundleName?: string, observerCallback?: Callback<formInfo.RunningFormInfo>): void;
100e41f4b71Sopenharmony_ci
101e41f4b71Sopenharmony_cifunction on(type: 'formRemove', observerCallback: Callback<formInfo.RunningFormInfo>): void;
102e41f4b71Sopenharmony_cifunction on(type: 'formRemove', hostBundleName: string, observerCallback: Callback<formInfo.RunningFormInfo>): void;
103e41f4b71Sopenharmony_cifunction off(type: 'formRemove', hostBundleName?: string, observerCallback?: Callback<formInfo.RunningFormInfo>): void;
104e41f4b71Sopenharmony_ci
105e41f4b71Sopenharmony_cifunction on(type: 'notifyVisible', observerCallback: Callback<Array<formInfo.RunningFormInfo>>): void;
106e41f4b71Sopenharmony_cifunction on(
107e41f4b71Sopenharmony_ci    type: 'notifyVisible',
108e41f4b71Sopenharmony_ci    hostBundleName: string,
109e41f4b71Sopenharmony_ci    observerCallback: Callback<Array<formInfo.RunningFormInfo>>
110e41f4b71Sopenharmony_ci  ): void;
111e41f4b71Sopenharmony_cifunction off(
112e41f4b71Sopenharmony_ci    type: 'notifyVisible',
113e41f4b71Sopenharmony_ci    hostBundleName?: string,
114e41f4b71Sopenharmony_ci    observerCallback?: Callback<Array<formInfo.RunningFormInfo>>
115e41f4b71Sopenharmony_ci  ): void;
116e41f4b71Sopenharmony_ci
117e41f4b71Sopenharmony_cifunction on(type: 'notifyInvisible', observerCallback: Callback<Array<formInfo.RunningFormInfo>>): void;
118e41f4b71Sopenharmony_cifunction on(
119e41f4b71Sopenharmony_ci    type: 'notifyInvisible',
120e41f4b71Sopenharmony_ci    hostBundleName: string,
121e41f4b71Sopenharmony_ci    observerCallback: Callback<Array<formInfo.RunningFormInfo>>,
122e41f4b71Sopenharmony_ci  ): void;
123e41f4b71Sopenharmony_cifunction off(
124e41f4b71Sopenharmony_ci    type: 'notifyInvisible',
125e41f4b71Sopenharmony_ci    hostBundleName?: string,
126e41f4b71Sopenharmony_ci    observerCallback?: Callback<Array<formInfo.RunningFormInfo>>
127e41f4b71Sopenharmony_ci  ): void;
128e41f4b71Sopenharmony_ci```
129e41f4b71Sopenharmony_ci
130e41f4b71Sopenharmony_ci
131e41f4b71Sopenharmony_ci**Adaptation Guide**
132e41f4b71Sopenharmony_ci
133e41f4b71Sopenharmony_ciAdapt your application code accordingly. In OpenHarmony 4.0.9.5 and later versions, pass in **callback** as the last parameter when calling these APIs.
134e41f4b71Sopenharmony_ci
135e41f4b71Sopenharmony_ci**Example**
136e41f4b71Sopenharmony_ci```ts
137e41f4b71Sopenharmony_ciimport formObserver from '@ohos.app.form.formObserver';
138e41f4b71Sopenharmony_ci
139e41f4b71Sopenharmony_cilet bundleName = 'ohos.samples.FormApplication';
140e41f4b71Sopenharmony_cilet callback = function(data) {
141e41f4b71Sopenharmony_ci  console.log('a new form added, data: ${JSON.stringify(data)');
142e41f4b71Sopenharmony_ci}
143e41f4b71Sopenharmony_ci
144e41f4b71Sopenharmony_ciformHost.on('formAdd', callback);
145e41f4b71Sopenharmony_ciformHost.on('formAdd', bundleName, callback);
146e41f4b71Sopenharmony_ci```
147