diff --git a/en/application-dev/database/database-datashare-guidelines.md b/en/application-dev/database/database-datashare-guidelines.md index a43407aa5643f6a7d0265ca88c6234120e904d72..6758bd2183263ad3318cc0c093380cd5d0ceceaf 100644 --- a/en/application-dev/database/database-datashare-guidelines.md +++ b/en/application-dev/database/database-datashare-guidelines.md @@ -40,7 +40,7 @@ There are two roles in **DataShare**: - **onCreate** - Called by the server to initialize service logic when the **DataShare** client connects to the **DataShareExtensionAbility** server. + Called by the server to initialize service logic when the **DataShare** client connects to the **DataShareExtensionAbility** server. - **insert** @@ -64,11 +64,11 @@ There are two roles in **DataShare**: - **normalizeUri** - Converts the URI provided by the client to the URI used by the server. This API can be overridden as required. + Converts the URI provided by the client to the URI used by the server. - **denormalizeUri** - Converts the URI used by the server to the initial URI passed by the client. This API can be overridden as required. + Converts the URI used by the server to the initial URI passed by the client. Before implementing a **DataShare** service, create a **DataShareExtensionAbility** object in the DevEco Studio project as follows: @@ -76,7 +76,7 @@ Before implementing a **DataShare** service, create a **DataShareExtensionAbilit 2. Right-click the **DataShareAbility** directory, and choose **New > TypeScript File** to create a file named **DataShareAbility.ts**. -3. In the **DataShareAbility.ts** file, import the **DataShareExtensionAbility** and other dependencies. +3. In the **DataShareAbility.ts** file, import **DataShareExtensionAbility** and other dependencies. ```ts import Extension from '@ohos.application.DataShareExtensionAbility'; @@ -85,9 +85,9 @@ Before implementing a **DataShare** service, create a **DataShareExtensionAbilit import dataSharePredicates from '@ohos.data.dataSharePredicates'; ``` -5. Override **DataShareExtensionAbility** APIs based on actual requirements. For example, if the data provider provides only data query, override only **query()**. +4. Override **DataShareExtensionAbility** APIs based on actual requirements. For example, if the data provider provides only data query, override only **query()**. -6. Implement the data provider services. For example, implement data storage of the data provider by using a database, reading and writing files, or accessing the network. +5. Implement the data provider services. For example, implement data storage of the data provider by using a database, reading and writing files, or accessing the network. ```ts const DB_NAME = "DB00.db"; @@ -95,13 +95,13 @@ Before implementing a **DataShare** service, create a **DataShareExtensionAbilit const DDL_TBL_CREATE = "CREATE TABLE IF NOT EXISTS " + TBL_NAME + " (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER, isStudent BOOLEAN, Binary BINARY)"; - + let rdbStore; let result; - + export default class DataShareExtAbility extends Extension { private rdbStore_; - + // Override onCreate(). onCreate(want, callback) { result = this.context.cacheDir + '/datashare.txt'; @@ -114,12 +114,12 @@ Before implementing a **DataShare** service, create a **DataShareExtensionAbilit rdbStore.executeSql(DDL_TBL_CREATE, [], function (err) { console.log('DataShareExtAbility onCreate, executeSql done err:' + JSON.stringify(err)); }); - if (callbakc) { + if (callback) { callback(); } }); } - + // Override query(). query(uri, predicates, columns, callback) { if (predicates == null || predicates == undefined) { @@ -143,17 +143,18 @@ Before implementing a **DataShare** service, create a **DataShareExtensionAbilit }; ``` -7. Define **DataShareExtensionAbility** in **module.json5**. +6. Define **DataShareExtensionAbility** in **module.json5**. - | Field| Description | - | ------------ | ------------------------------------------------------------ | - | "name" | Ability name, corresponding to the **ExtensionAbility** class name derived from **Ability**. | - | "type" | Ability type. The value is **dataShare**, indicating the development is based on the **datashare** template.| - | "uri" | URI used for communication. It is the unique identifier for the data consumer to connect to the provider. | - | "visible" | Whether it is visible to other applications. Data sharing is allowed only when the value is **true**.| + | Field | Description | Mandatory | + | ---------- | ------------------------------------------------------------ | ------------------------------------------------------------ | + | "name" | Ability name, corresponding to the **ExtensionAbility** class name derived from **Ability**. | Yes | + | "type" | Ability type. The value is **dataShare**, indicating the development is based on the **datashare** template. | Yes | + | "uri" | URI used for communication. It is the unique identifier for the data consumer to connect to the provider. | Yes | + | "visible" | Whether it is visible to other applications. Data sharing is allowed only when the value is **true**. | Yes | + | "metadata" | Configuration for silent access, including the **name** and **resource** fields.
The **name** field identifies the configuration, which has a fixed value of **ohos.extension.dataShare**.
The **resource** field has a fixed value of **$profile:data_share_config**, which indicates that the profile name is **data_share_config.json**. | **metadata** is mandatory when the ability launch type is **singleton**. For details about the ability launch type, see **launchType** in the [Internal Structure of the abilities Attribute](../quick-start/module-structure.md#internal-structure-of-the-abilities-attribute). | **module.json5 example** - + ```json "extensionAbilities": [ { @@ -163,10 +164,44 @@ Before implementing a **DataShare** service, create a **DataShareExtensionAbilit "description": "$string:description_datashareextability", "type": "dataShare", "uri": "datashare://com.samples.datasharetest.DataShare", - "visible": true + "visible": true, + "metadata": [{"name": "ohos.extension.dataShare", "resource": "$profile:data_share_config"}] } ] ``` + + **data_share_config.json Description** + + | Field | Description | Mandatory | + | ----------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | + | "tableConfig" | Label configuration. | Yes | + | "uri" | Range for which the configuration takes effect. The URI supports the following formats in descending order by priority: - *****: indicates all databases and tables. - **datashare:///{\*bundleName\*}/{\*moduleName\*}/{\*storeName\*}**: specifies a database. - **datashare:///{\*bundleName\*}/{\*moduleName\*}/{\*storeName\*}/{\*tableName\*}** : specifies a table. If URIs of different formats are configured, only the URI with higher priority takes effect. | Yes | + | "crossUserMode" | Whether data is shared by multiple users. The value **1** means to share data between multiple users, and the value **2** means the opposite. | **crossUserMode** is mandatory when the ability launch type is **singleton**. For details about the ability launch type, see **launchType** in the [Internal Structure of the abilities Attribute](../quick-start/module-structure.md#internal-structure-of-the-abilities-attribute). | + | "writePermission" | Write permission required for silent access. | No | + | "readPermission" | Read permission required for silent access. | No | + + **data_share_config.json Example** + + ```json + "tableConfig": [ + { + "uri": "*", + "writePermission": "ohos.permission.xxx" + }, + { + "uri": "datashare:///com.acts.datasharetest/entry/DB00", + "crossUserMode": 1, + "writePermission": "ohos.permission.xxx", + "readPermission": "ohos.permission.xxx" + }, + { + "uri": "datashare:///com.acts.datasharetest/entry/DB00/TBL00", + "crossUserMode": 2 + } + ] + ``` + + ### Data Consumer Application Development @@ -182,7 +217,7 @@ Before implementing a **DataShare** service, create a **DataShareExtensionAbilit ```ts // Different from the URI defined in the module.json5 file, the URI passed in the parameter has an extra slash (/), because there is a DeviceID parameter between the second and the third slash (/). - let dseUri = ("datashare:///com.samples.datasharetest.DataShare"); + let dseUri = ('datashare:///com.samples.datasharetest.DataShare'); ``` 3. Create a **DataShareHelper** instance. @@ -211,18 +246,18 @@ Before implementing a **DataShare** service, create a **DataShareExtensionAbilit let valArray = ['*']; // Insert a piece of data. dsHelper.insert(dseUri, valuesBucket, (err, data) => { - console.log("dsHelper insert result: " + data); + console.log('dsHelper insert result: ' + data); }); // Update data. dsHelper.update(dseUri, predicates, updateBucket, (err, data) => { - console.log("dsHelper update result: " + data); + console.log('dsHelper update result: ' + data); }); // Query data. dsHelper.query(dseUri, predicates, valArray, (err, data) => { - console.log("dsHelper query result: " + data); + console.log('dsHelper query result: ' + data); }); // Delete data. dsHelper.delete(dseUri, predicates, (err, data) => { - console.log("dsHelper delete result: " + data); + console.log('dsHelper delete result: ' + data); }); ```