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