From 93c68b63f6fbe2e89a65e0a93fe0b21a472db4da Mon Sep 17 00:00:00 2001 From: zengyawen Date: Sat, 26 Mar 2022 18:34:14 +0800 Subject: [PATCH] update docs Signed-off-by: zengyawen --- .../database/database-mdds-guidelines.md | 20 +- .../database-relational-guidelines.md | 65 +- .../database/database-relational-overview.md | 4 +- .../reference/apis/js-apis-data-rdb.md | 633 +++++++++--------- .../apis/js-apis-distributed-data.md | 26 +- .../reference/apis/js-apis-pasteboard.md | 340 +++++----- .../reference/apis/js-apis-request.md | 167 +---- .../reference/apis/js-apis-window.md | 10 +- .../security/accesstoken-overview.md | 2 +- .../security/figures/figure1.png | Bin 19146 -> 42550 bytes 10 files changed, 579 insertions(+), 688 deletions(-) diff --git a/zh-cn/application-dev/database/database-mdds-guidelines.md b/zh-cn/application-dev/database/database-mdds-guidelines.md index 5c75f819a3..132176bdee 100644 --- a/zh-cn/application-dev/database/database-mdds-guidelines.md +++ b/zh-cn/application-dev/database/database-mdds-guidelines.md @@ -11,15 +11,17 @@ OpenHarmony系统中的分布式数据服务模块为开发者提供下面几种 **表1** 分布式数据服务关键API功能介绍 -| 功能分类 | 接口名称 | 描述 | -| -------- | -------- | -------- | -| 分布式数据库创建。 | createKVManager(config: KVManagerConfig, callback: AsyncCallback<KVManager>): void
createKVManager(config: KVManagerConfig): Promise<KVManager> | 创建一个KVManager对象实例,用于管理数据库对象。 | -| getKVStore<T extends KVStore>(storeId: string, options: Options, callback: AsyncCallback<T>): void
getKVStore<T extends KVStore>(storeId: string, options: Options): Promise<T> | 指定Options和storeId,创建并获取KVStore数据库。 | -| 分布式数据增、删、改、查。 | put(key: string, value: Uint8Array \| string \| number \| boolean, callback: AsyncCallback<void>): void
put(key: string, value: Uint8Array \| string \| number \| boolean): Promise<void> | 插入和更新数据。 | -| delete(key: string, callback: AsyncCallback<void>): void
delete(key: string): Promise<void> | 删除数据。 | -| get(key: string, callback: AsyncCallback<Uint8Array \| string \| boolean \| number>): void
get(key: string): Promise<Uint8Array \| string \| boolean \| number> | 查询数据。 | -| 订阅分布式数据变化。 | on(event: 'dataChange', type: SubscribeType, observer: Callback<ChangeNotification>): void
on(event: 'syncComplete', syncCallback: Callback<Array<[string, number]>>): void | 订阅数据库中数据的变化。 | -| 分布式数据同步。 | sync(deviceIdList: string[], mode: SyncMode, allowedDelayMs?: number): void | 在手动模式下,触发数据库同步。 | +| 功能分类 | 接口名称 | 描述 | +| -------------------------- | ------------------------------------------------------------ | ----------------------------------------------- | +| 分布式数据库创建。 | createKVManager(config: KVManagerConfig, callback: AsyncCallback<KVManager>): void
createKVManager(config: KVManagerConfig): Promise<KVManager> | 创建一个KVManager对象实例,用于管理数据库对象。 | +| 分布式数据库创建。 | getKVStore<T extends KVStore>(storeId: string, options: Options, callback: AsyncCallback<T>): void
getKVStore<T extends KVStore>(storeId: string, options: Options): Promise<T> | 指定Options和storeId,创建并获取KVStore数据库。 | +| 分布式数据增、删、改、查。 | put(key: string, value: Uint8Array \| string \| number \| boolean, callback: AsyncCallback<void>): void
put(key: string, value: Uint8Array \| string \| number \| boolean): Promise<void> | 插入和更新数据。 | +| 分布式数据增、删、改、查。 | delete(key: string, callback: AsyncCallback<void>): void
delete(key: string): Promise<void> | 删除数据。 | +| 分布式数据增、删、改、查。 | get(key: string, callback: AsyncCallback<Uint8Array \| string \| boolean \| number>): void
get(key: string): Promise<Uint8Array \| string \| boolean \| number> | 查询数据。 | +| 订阅分布式数据变化。 | on(event: 'dataChange', type: SubscribeType, observer: Callback<ChangeNotification>): void
on(event: 'syncComplete', syncCallback: Callback<Array<[string, number]>>): void | 订阅数据库中数据的变化。 | +| 分布式数据同步。 | sync(deviceIdList: string[], mode: SyncMode, allowedDelayMs?: number): void | 在手动模式下,触发数据库同步。 | + + ## 开发步骤 diff --git a/zh-cn/application-dev/database/database-relational-guidelines.md b/zh-cn/application-dev/database/database-relational-guidelines.md index 6a9b5a1209..b22dab6fda 100644 --- a/zh-cn/application-dev/database/database-relational-guidelines.md +++ b/zh-cn/application-dev/database/database-relational-guidelines.md @@ -7,7 +7,7 @@ ## 接口说明 -**数据库的创建和删除** +### 数据库的创建和删除 关系型数据库提供了数据库创建方式,以及对应的删除接口,涉及的API如下所示。 @@ -20,46 +20,58 @@ |deleteRdbStore(name: string, callback: AsyncCallback<void>): void | 删除数据库,结果以callback形式返回。
- name:数据库名称。
- callback:指定callback回调函数。如果数据库已删除,则为true;否则返回false。 | | deleteRdbStore(name: string): Promise<void> | 使用指定的数据库文件配置删除数据库,结果以Promise形式返回。
- name:数据库名称。 | -**数据库的增删改查** +### 数据库的增删改查 关系型数据库提供对本地数据增删改查操作的能力,相关API如下所示。 - **新增** - 关系型数据库提供了插入数据的接口,通过ValuesBucket输入要存储的数据,通过返回值判断是否插入成功,插入成功时返回最新插入数据所在的行号,失败时则返回-1。 + + + 关系型数据库提供了插入数据的接口,通过ValuesBucket输入要存储的数据,通过返回值判断是否插入成功,插入成功时返回最新插入数据所在的行号,失败时则返回-1。 + **表2** 数据库插入API | 类名 | 接口名 | 描述 | - | -------- | -------- | -------- | +| -------- | -------- | -------- | | RdbStore | insert(name: string, values: ValuesBucket, callback: AsyncCallback<number>):void | 向目标表中插入一行数据,结果以callback形式返回。
- name:指定的目标表名。
- values:表示要插入到表中的数据行。
- callback:指定callback回调函数。如果操作成功,返回行ID;否则返回-1。 | | RdbStore | insert(name: string, values: ValuesBucket): Promise<number> | 向目标表中插入一行数据,结果以Promise形式返回。
- name:指定的目标表名。
- values:表示要插入到表中的数据行。 | - + - **更新** - 调用更新接口,传入要更新的数据,并通过RdbPredicates指定更新条件。该接口的返回值表示更新操作影响的行数。如果更新失败,则返回0。 + + + 调用更新接口,传入要更新的数据,并通过RdbPredicates指定更新条件。该接口的返回值表示更新操作影响的行数。如果更新失败,则返回0。 + **表3** 数据库更新API | 类名 | 接口名 | 描述 | - | -------- | -------- | -------- | +| -------- | -------- | -------- | | RdbStore | update(values: ValuesBucket, rdbPredicates: RdbPredicates, callback: AsyncCallback<number>):void | 根据RdbPredicates的指定实例对象更新数据库中的数据,结果以callback形式返回。
- values:以ValuesBucket存储的要更新的数据。
- rdbPredicates:表示RdbPredicates的实例对象指定的更新条件。
- callback:指定的callback回调方法。返回受影响的行数。 | | RdbStore | update(values: ValuesBucket, rdbPredicates: RdbPredicates): Promise | 根据RdbPredicates的指定实例对象更新数据库中的数据,结果以Promise形式返回。
- values:以ValuesBucket存储的要更新的数据。
- rdbPredicates:表示RdbPredicates的实例对象指定的更新条件。 | - + - **删除** - 调用删除接口,通过RdbPredicates指定删除条件。该接口的返回值表示删除的数据行数,可根据此值判断是否删除成功。如果删除失败,则返回0。 + + + 调用删除接口,通过RdbPredicates指定删除条件。该接口的返回值表示删除的数据行数,可根据此值判断是否删除成功。如果删除失败,则返回0。 + **表4** 数据库删除API | 类名 | 接口名 | 描述 | - | -------- | -------- | -------- | +| -------- | -------- | -------- | | RdbStore | delete(rdbPredicates: RdbPredicates, callback: AsyncCallback<number>):void | 根据rdbPredicates的指定实例对象从数据库中删除数据,结果以callback形式返回。
- rdbPredicates:RdbPredicates的实例对象指定的删除条件。
- callback:指定callback回调函数。返回受影响的行数。 | | RdbStore | delete(rdbPredicates: RdbPredicates): Promise | 根据rdbPredicates的指定实例对象从数据库中删除数据,结果以Promise形式返回。
- rdbPredicates:RdbPredicates的实例对象指定的删除条件。 | - + - **查询** + + + 关系型数据库提供了两种查询数据的方式: - 直接调用查询接口。使用该接口,会将包含查询条件的谓词自动拼接成完整的SQL语句进行查询操作,无需用户传入原生的SQL语句。 - 执行原生的SQL语句进行查询操作。 - + **表5** 数据库查询API | 类名 | 接口名 | 描述 | @@ -69,7 +81,7 @@ | RdbStore | querySql(sql: string, bindArgs: Array<ValueType>, callback: AsyncCallback<ResultSet>):void | 根据指定SQL语句查询数据库中的数据,结果以callback形式返回。
- sql:指定要查询的SQL语句。
- bindArgs:SQL语句中参数的值。
- callback:指定callback回调函数。如果操作成功,则返回ResultSet对象。 | | RdbStore | querySql(sql: string, bindArgs?: Array<ValueType>):Promise<ResultSet> | 根据指定SQL语句查询数据库中的数据,结果以Promise形式返回。
- sql:指定要查询的SQL语句。
- bindArgs:SQL语句中参数的值。 | -**数据库谓词的使用** +### 数据库谓词的使用 关系型数据库提供了用于设置数据库操作条件的谓词RdbPredicates,该类确定RDB中条件表达式的值是true还是false。 @@ -108,12 +120,12 @@ | RdbPredicates | in(field: string, value: Array<ValueType>): RdbPredicates | 配置RdbPredicates以匹配数据字段为ValueType数组且值在给定范围内的指定字段。
- field:数据库表中的列名。
- value:以ValueType型数组形式指定的要匹配的值。
- RdbPredicates:返回与指定字段匹配的谓词。 | | RdbPredicates | notIn(field: string, value: Array<ValueType>): RdbPredicates | 将RdbPredicates配置为匹配数据字段为ValueType且值超出给定范围的指定字段。
- field:数据库表中的列名。
- value:以ValueType型数组形式指定的要匹配的值。
- RdbPredicates:返回与指定字段匹配的谓词。 | -**查询结果集的使用** +### 查询结果集的使用 关系型数据库提供了查询返回的结果集ResultSet,其指向查询结果中的一行数据,供用户对查询结果进行遍历和访问。ResultSet对外API如下所示。 > ![icon-notice.gif](public_sys-resources/icon-notice.gif) **须知:** -> **注:结果集使用完后,请一定要调用close方法显式关闭。** +> **结果集使用完后,请一定要调用close方法显式关闭。** **表7** 结果集API @@ -135,49 +147,48 @@ -**设置分布式列表。** +### 设置分布式列表 -用户可以对当前数据库中的列表设置为分布式列表。 +**设置分布式列表** -**表9** 设置分布式列表 +**表8** 设置分布式列表 | 类名 | 接口名 | 描述 | | -------- | -------- | -------- | | RdbStore | setDistributedTables(tables: Array, callback: AsyncCallback): void;| 设置分布式列表,结果以callback形式返回。
- tables:要设置的分布式列表表名。
- callback:指定callback回调函数。 | | RdbStore | setDistributedTables(tables: Array): Promise; | 设置分布式列表,结果以Promise形式返回。
- tables:要设置的分布式列表表名。 | -**根据本地表名获取指定远程设备的分布式表名。** +**根据本地表名获取指定远程设备的分布式表名** 用户根据本地表名获取指定远程设备的分布式表名。在查询远程设备数据库时,需要使用分布式表名。 -**表10** 根据本地表名获取指定远程设备的分布式表名 +**表9** 根据本地表名获取指定远程设备的分布式表名 | 类名 | 接口名 | 描述 | | -------- | -------- | -------- | | RdbStore | obtainDistributedTableName(device: string, table: string, callback: AsyncCallback): void; | 根据本地表名获取指定远程设备的分布式表名。在查询远程设备数据库时,需要使用分布式表名, 结果以callbck形式返回。
- device:远程设备。
- table:本地表名。
- callback:指定的callback回调函数,如果操作成功,返回远程设备的分布式表名。 | | RdbStore | obtainDistributedTableName(device: string, table: string): Promise; | 根据本地表名获取指定远程设备的分布式表名。在查询远程设备数据库时,需要使用分布式表名,结果以Promise形式返回。
- device:远程设备。
- table:本地表名。 | -**在设备之间同步数据。** +**在设备之间同步数据** -**表11** 在设备之间同步数据 +**表10** 在设备之间同步数据 | 类名 | 接口名 | 描述 | | -------- | -------- | -------- | | RdbStore | sync(mode: SyncMode, predicates: RdbPredicates, callback: AsyncCallback>): void;| 在设备之间同步数据,结果以callback形式返回。
- mode:指同步模式。SYNC_MODE_PUSH 表示数据从本地设备推送到远程设备;SYNC_MODE_PULL 表示数据从远程设备拉至本地设备。
- predicates:约束同步数据和设备。
- callback:指定的callback回调函数,string:设备ID;number:每个设备同步状态,0表示成功,其他值表示失败。 | | RdbStore | sync(mode: SyncMode, predicates: RdbPredicates): Promise>;| 在设备之间同步数据,结果以Promise形式返回。
- mode:指同步模式。SYNC_MODE_PUSH 表示数据从本地设备推送到远程设备;SYNC_MODE_PULL 表示数据从远程设备拉至本地设备。
- predicates:约束同步数据和设备。 | +**注册数据库的观察者** -**注册数据库的观察者。** - -**表12** 注册数据库的观察者 +**表11** 注册数据库的观察者 | 类名 | 接口名 | 描述 | | -------- | -------- | -------- | | RdbStore |on(event: 'dataChange', type: SubscribeType, observer: Callback>): void;| 注册数据库的观察者。当分布式数据库中的数据发生更改时,将调用回调。
- type:指在{@code SubscribeType}中定义的订阅类型;SUBSCRIBE_TYPE_REMOTE 订阅远程数据更改。
- observer:指分布式数据库中数据更改事件的观察者。 | -**从数据库中删除指定类型的指定观察者。** +**从数据库中删除指定类型的指定观察者** -**表13** 从数据库中删除指定类型的指定观察者 +**表12** 从数据库中删除指定类型的指定观察者 | 类名 | 接口名 | 描述 | | -------- | -------- | -------- | diff --git a/zh-cn/application-dev/database/database-relational-overview.md b/zh-cn/application-dev/database/database-relational-overview.md index f9a84f85a0..fab1d7256a 100644 --- a/zh-cn/application-dev/database/database-relational-overview.md +++ b/zh-cn/application-dev/database/database-relational-overview.md @@ -30,8 +30,8 @@ ## 默认配置 -- 如果不指定数据库的日志模式,那么系统默认日志方式是WAL(Write Ahead Log)模式。 -- 如果不指定数据库的落盘模式,那么系统默认落盘方式是FULL模式。 +- 系统默认日志方式是WAL(Write Ahead Log)模式。 +- 系统默认落盘方式是FULL模式。 - OpenHarmony数据库使用的共享内存默认大小是2MB。 ## 约束与限制 diff --git a/zh-cn/application-dev/reference/apis/js-apis-data-rdb.md b/zh-cn/application-dev/reference/apis/js-apis-data-rdb.md index 111b564daa..df3026dea8 100644 --- a/zh-cn/application-dev/reference/apis/js-apis-data-rdb.md +++ b/zh-cn/application-dev/reference/apis/js-apis-data-rdb.md @@ -127,11 +127,11 @@ deleteRdbStore(context?: Context, name: string, callback: AsyncCallback<void& **系统能力**:SystemCapability.DistributedDataManager.RelationalStore.Core。 **参数**: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | context8+ | Context | 否 | 应用程序或功能的上下文 | - | name | string | 是 | 数据库名称。 | - | callback | AsyncCallback<void> | 是 | 指定callback回调函数。如果数据库已删除,则为true;否则返回false。 | +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| context8+ | Context | 否 | 应用程序或功能的上下文 | +| name | string | 是 | 数据库名称。 | +| callback | AsyncCallback<void> | 是 | 指定callback回调函数。如果数据库已删除,则为true;否则返回false。 | **示例**: ``` @@ -162,15 +162,15 @@ deleteRdbStore(context?: Context, name: string): Promise<void> **系统能力**:SystemCapability.DistributedDataManager.RelationalStore.Core。 **参数** - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | context8+ | Context | 否 | 应用程序或功能的上下文 | - | name | string | 是 | 数据库名称。 | +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| context8+ | Context | 否 | 应用程序或功能的上下文 | +| name | string | 是 | 数据库名称。 | **返回值**: - | 类型 | 说明 | - | -------- | -------- | - | Promise<void> | 指定Promise回调函数。如果数据库已删除,则为true;否则返回false。 | +| 类型 | 说明 | +| -------- | -------- | +| Promise<void> | 指定Promise回调函数。如果数据库已删除,则为true;否则返回false。 | **示例**: ``` @@ -213,16 +213,16 @@ constructor(name: string) **系统能力**:SystemCapability.DistributedDataManager.RelationalStore.Core。 **参数**: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | name | string | 是 | 数据库表名。 | +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| name | string | 是 | 数据库表名。 | **示例**: ``` let predicates = new data_rdb.RdbPredicates("EMPLOYEE") ``` -### inDevices +### inDevices8+ inDevices(devices: Array<string>): RdbPredicates @@ -232,14 +232,14 @@ inDevices(devices: Array<string>): RdbPredicates **系统能力**:SystemCapability.DistributedDataManager.RelationalStore.Core。 **参数**: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | devices | Array<string> | 是 | 指定的组网内的远程设备ID。 | +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| devices | Array<string> | 是 | 指定的组网内的远程设备ID。 | **返回值**: - | 类型 | 说明 | - | -------- | -------- | - | [RdbPredicates](#rdbpredicates) | 返回与指定字段匹配的谓词。 | +| 类型 | 说明 | +| -------- | -------- | +| [RdbPredicates](#rdbpredicates) | 返回与指定字段匹配的谓词。 | **示例**: ``` @@ -257,9 +257,9 @@ inAllDevices(): RdbPredicates **系统能力**:SystemCapability.DistributedDataManager.RelationalStore.Core。 **返回值**: - | 类型 | 说明 | - | -------- | -------- | - | [RdbPredicates](#rdbpredicates) | 返回与指定字段匹配的谓词。 | +| 类型 | 说明 | +| -------- | -------- | +| [RdbPredicates](#rdbpredicates) | 返回与指定字段匹配的谓词。 | **示例**: ``` @@ -277,15 +277,15 @@ equalTo(field: string, value: ValueType): RdbPredicates **系统能力**:SystemCapability.DistributedDataManager.RelationalStore.Core。 **参数**: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | field | string | 是 | 数据库表中的列名。 | - | value | [ValueType](#valuetype) | 是 | 指示要与谓词匹配的值。 | +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| field | string | 是 | 数据库表中的列名。 | +| value | [ValueType](#valuetype) | 是 | 指示要与谓词匹配的值。 | **返回值**: - | 类型 | 说明 | - | -------- | -------- | - | [RdbPredicates](#rdbpredicates) | 返回与指定字段匹配的谓词。 | +| 类型 | 说明 | +| -------- | -------- | +| [RdbPredicates](#rdbpredicates) | 返回与指定字段匹配的谓词。 | **示例**: ``` @@ -304,15 +304,15 @@ notEqualTo(field: string, value: ValueType): RdbPredicates **系统能力**:SystemCapability.DistributedDataManager.RelationalStore.Core。 **参数**: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | field | string | 是 | 数据库表中的列名。 | - | value | [ValueType](#valuetype) | 是 | 指示要与谓词匹配的值。 | +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| field | string | 是 | 数据库表中的列名。 | +| value | [ValueType](#valuetype) | 是 | 指示要与谓词匹配的值。 | **返回值**: - | 类型 | 说明 | - | -------- | -------- | - | [RdbPredicates](#rdbpredicates) | 返回与指定字段匹配的谓词。 | +| 类型 | 说明 | +| -------- | -------- | +| [RdbPredicates](#rdbpredicates) | 返回与指定字段匹配的谓词。 | **示例**: ``` @@ -331,9 +331,9 @@ beginWrap(): RdbPredicates **系统能力**:SystemCapability.DistributedDataManager.RelationalStore.Core。 **返回值**: - | 类型 | 说明 | - | -------- | -------- | - | [RdbPredicates](#rdbpredicates) | 返回带有左括号的Rdb谓词。 | +| 类型 | 说明 | +| -------- | -------- | +| [RdbPredicates](#rdbpredicates) | 返回带有左括号的Rdb谓词。 | **示例**: ``` @@ -357,9 +357,9 @@ endWrap(): RdbPredicates **系统能力**:SystemCapability.DistributedDataManager.RelationalStore.Core。 **返回值**: - | 类型 | 说明 | - | -------- | -------- | - | [RdbPredicates](#rdbpredicates) | 返回带有右括号的Rdb谓词。 | +| 类型 | 说明 | +| -------- | -------- | +| [RdbPredicates](#rdbpredicates) | 返回带有右括号的Rdb谓词。 | **示例**: ``` @@ -383,9 +383,9 @@ or(): RdbPredicates **系统能力**:SystemCapability.DistributedDataManager.RelationalStore.Core。 **返回值**: - | 类型 | 说明 | - | -------- | -------- | - | [RdbPredicates](#rdbpredicates) | 返回带有或条件的Rdb谓词。 | +| 类型 | 说明 | +| -------- | -------- | +| [RdbPredicates](#rdbpredicates) | 返回带有或条件的Rdb谓词。 | **示例**: ``` @@ -406,9 +406,9 @@ and(): RdbPredicates **系统能力**:SystemCapability.DistributedDataManager.RelationalStore.Core。 **返回值**: - | 类型 | 说明 | - | -------- | -------- | - | [RdbPredicates](#rdbpredicates) | 返回带有和条件的Rdb谓词。 | +| 类型 | 说明 | +| -------- | -------- | +| [RdbPredicates](#rdbpredicates) | 返回带有和条件的Rdb谓词。 | **示例**: ``` @@ -428,15 +428,15 @@ contains(field: string, value: string): RdbPredicates **系统能力**:SystemCapability.DistributedDataManager.RelationalStore.Core。 **参数**: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | field | string | 是 | 数据库表中的列名。 | - | value | string | 是 | 指示要与谓词匹配的值。 | +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| field | string | 是 | 数据库表中的列名。 | +| value | string | 是 | 指示要与谓词匹配的值。 | **返回值**: - | 类型 | 说明 | - | -------- | -------- | - | [RdbPredicates](#rdbpredicates) | 返回与指定字段匹配的谓词。 | +| 类型 | 说明 | +| -------- | -------- | +| [RdbPredicates](#rdbpredicates) | 返回与指定字段匹配的谓词。 | **示例**: ``` @@ -455,15 +455,15 @@ beginsWith(field: string, value: string): RdbPredicates **系统能力**:SystemCapability.DistributedDataManager.RelationalStore.Core。 **参数**: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | field | string | 是 | 数据库表中的列名。 | - | value | string | 是 | 指示要与谓词匹配的值。 | +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| field | string | 是 | 数据库表中的列名。 | +| value | string | 是 | 指示要与谓词匹配的值。 | **返回值**: - | 类型 | 说明 | - | -------- | -------- | - | [RdbPredicates](#rdbpredicates) | 返回与指定字段匹配的谓词。 | +| 类型 | 说明 | +| -------- | -------- | +| [RdbPredicates](#rdbpredicates) | 返回与指定字段匹配的谓词。 | **示例**: ``` @@ -482,15 +482,15 @@ endsWith(field: string, value: string): RdbPredicates **系统能力**:SystemCapability.DistributedDataManager.RelationalStore.Core。 **参数**: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | field | string | 是 | 数据库表中的列名。 | - | value | string | 是 | 指示要与谓词匹配的值。 | +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| field | string | 是 | 数据库表中的列名。 | +| value | string | 是 | 指示要与谓词匹配的值。 | **返回值**: - | 类型 | 说明 | - | -------- | -------- | - | [RdbPredicates](#rdbpredicates) | 返回与指定字段匹配的谓词。 | +| 类型 | 说明 | +| -------- | -------- | +| [RdbPredicates](#rdbpredicates) | 返回与指定字段匹配的谓词。 | **示例**: ``` @@ -509,14 +509,14 @@ isNull(field: string): RdbPredicates **系统能力**:SystemCapability.DistributedDataManager.RelationalStore.Core。 **参数**: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | field | string | 是 | 数据库表中的列名。 | +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| field | string | 是 | 数据库表中的列名。 | **返回值**: - | 类型 | 说明 | - | -------- | -------- | - | [RdbPredicates](#rdbpredicates) | 返回与指定字段匹配的谓词。 | +| 类型 | 说明 | +| -------- | -------- | +| [RdbPredicates](#rdbpredicates) | 返回与指定字段匹配的谓词。 | - 示例 ``` @@ -535,14 +535,14 @@ isNotNull(field: string): RdbPredicates **系统能力**:SystemCapability.DistributedDataManager.RelationalStore.Core。 **参数**: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | field | string | 是 | 数据库表中的列名。 | +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| field | string | 是 | 数据库表中的列名。 | **返回值**: - | 类型 | 说明 | - | -------- | -------- | - | [RdbPredicates](#rdbpredicates) | 返回与指定字段匹配的谓词。 | +| 类型 | 说明 | +| -------- | -------- | +| [RdbPredicates](#rdbpredicates) | 返回与指定字段匹配的谓词。 | **示例**: ``` @@ -561,15 +561,15 @@ like(field: string, value: string): RdbPredicates **系统能力**:SystemCapability.DistributedDataManager.RelationalStore.Core。 **参数**: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | field | string | 是 | 数据库表中的列名。 | - | value | string | 是 | 指示要与谓词匹配的值。 | +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| field | string | 是 | 数据库表中的列名。 | +| value | string | 是 | 指示要与谓词匹配的值。 | **返回值**: - | 类型 | 说明 | - | -------- | -------- | - | [RdbPredicates](#rdbpredicates) | 返回与指定字段匹配的谓词。 | +| 类型 | 说明 | +| -------- | -------- | +| [RdbPredicates](#rdbpredicates) | 返回与指定字段匹配的谓词。 | **示例**: ``` @@ -588,15 +588,15 @@ glob(field: string, value: string): RdbPredicates **系统能力**:SystemCapability.DistributedDataManager.RelationalStore.Core。 **参数**: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | field | string | 是 | 数据库表中的列名。 | - | value | string | 是 | 指示要与谓词匹配的值。
支持通配符,*表示0个、1个或多个数字或字符,?表示1个数字或字符。 | +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| field | string | 是 | 数据库表中的列名。 | +| value | string | 是 | 指示要与谓词匹配的值。
支持通配符,*表示0个、1个或多个数字或字符,?表示1个数字或字符。 | **返回值**: - | 类型 | 说明 | - | -------- | -------- | - | [RdbPredicates](#rdbpredicates) | 返回与指定字段匹配的谓词。 | +| 类型 | 说明 | +| -------- | -------- | +| [RdbPredicates](#rdbpredicates) | 返回与指定字段匹配的谓词。 | **示例**: ``` @@ -615,16 +615,16 @@ between(field: string, low: ValueType, high: ValueType): RdbPredicates **系统能力**:SystemCapability.DistributedDataManager.RelationalStore.Core。 **参数**: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | field | string | 是 | 数据库表中的列名。 | - | low | [ValueType](#valuetype) | 是 | 指示与谓词匹配的最小值。 | - | high | [ValueType](#valuetype) | 是 | 指示要与谓词匹配的最大值。 | +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| field | string | 是 | 数据库表中的列名。 | +| low | [ValueType](#valuetype) | 是 | 指示与谓词匹配的最小值。 | +| high | [ValueType](#valuetype) | 是 | 指示要与谓词匹配的最大值。 | **返回值**: - | 类型 | 说明 | - | -------- | -------- | - | [RdbPredicates](#rdbpredicates) | 返回与指定字段匹配的谓词。 | +| 类型 | 说明 | +| -------- | -------- | +| [RdbPredicates](#rdbpredicates) | 返回与指定字段匹配的谓词。 | **示例**: ``` @@ -643,16 +643,16 @@ notBetween(field: string, low: ValueType, high: ValueType): RdbPredicates **系统能力**:SystemCapability.DistributedDataManager.RelationalStore.Core。 **参数**: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | field | string | 是 | 数据库表中的列名。 | - | low | [ValueType](#valuetype) | 是 | 指示与谓词匹配的最小值。 | - | high | [ValueType](#valuetype) | 是 | 指示要与谓词匹配的最大值。 | +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| field | string | 是 | 数据库表中的列名。 | +| low | [ValueType](#valuetype) | 是 | 指示与谓词匹配的最小值。 | +| high | [ValueType](#valuetype) | 是 | 指示要与谓词匹配的最大值。 | **返回值**: - | 类型 | 说明 | - | -------- | -------- | - | [RdbPredicates](#rdbpredicates) | 返回与指定字段匹配的谓词。 | +| 类型 | 说明 | +| -------- | -------- | +| [RdbPredicates](#rdbpredicates) | 返回与指定字段匹配的谓词。 | **示例**: ``` @@ -670,15 +670,15 @@ greaterThan(field: string, value: ValueType): RdbPredicates **系统能力**:SystemCapability.DistributedDataManager.RelationalStore.Core。 **参数**: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | field | string | 是 | 数据库表中的列名。 | - | value | [ValueType](#valuetype) | 是 | 指示要与谓词匹配的值。 | +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| field | string | 是 | 数据库表中的列名。 | +| value | [ValueType](#valuetype) | 是 | 指示要与谓词匹配的值。 | **返回值**: - | 类型 | 说明 | - | -------- | -------- | - | [RdbPredicates](#rdbpredicates) | 返回与指定字段匹配的谓词。 | +| 类型 | 说明 | +| -------- | -------- | +| [RdbPredicates](#rdbpredicates) | 返回与指定字段匹配的谓词。 | **示例**: ``` @@ -697,15 +697,15 @@ lessThan(field: string, value: ValueType): RdbPredicates **系统能力**:SystemCapability.DistributedDataManager.RelationalStore.Core。 **参数**: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | field | string | 是 | 数据库表中的列名。 | - | value | [ValueType](#valuetype) | 是 | 指示要与谓词匹配的值。 | +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| field | string | 是 | 数据库表中的列名。 | +| value | [ValueType](#valuetype) | 是 | 指示要与谓词匹配的值。 | **返回值**: - | 类型 | 说明 | - | -------- | -------- | - | [RdbPredicates](#rdbpredicates) | 返回与指定字段匹配的谓词。 | +| 类型 | 说明 | +| -------- | -------- | +| [RdbPredicates](#rdbpredicates) | 返回与指定字段匹配的谓词。 | **示例**: ``` @@ -725,15 +725,15 @@ greaterThanOrEqualTo(field: string, value: ValueType): RdbPredicates **系统能力**:SystemCapability.DistributedDataManager.RelationalStore.Core。 **参数**: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | field | string | 是 | 数据库表中的列名。 | - | value | [ValueType](#valuetype) | 是 | 指示要与谓词匹配的值。 | +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| field | string | 是 | 数据库表中的列名。 | +| value | [ValueType](#valuetype) | 是 | 指示要与谓词匹配的值。 | **返回值**: - | 类型 | 说明 | - | -------- | -------- | - | [RdbPredicates](#rdbpredicates) | 返回与指定字段匹配的谓词。 | +| 类型 | 说明 | +| -------- | -------- | +| [RdbPredicates](#rdbpredicates) | 返回与指定字段匹配的谓词。 | **示例**: ``` @@ -753,15 +753,15 @@ lessThanOrEqualTo(field: string, value: ValueType): RdbPredicates **系统能力**:SystemCapability.DistributedDataManager.RelationalStore.Core。 **参数**: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | field | string | 是 | 数据库表中的列名。 | - | value | [ValueType](#valuetype) | 是 | 指示要与谓词匹配的值。 | +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| field | string | 是 | 数据库表中的列名。 | +| value | [ValueType](#valuetype) | 是 | 指示要与谓词匹配的值。 | **返回值**: - | 类型 | 说明 | - | -------- | -------- | - | [RdbPredicates](#rdbpredicates) | 返回与指定字段匹配的谓词。 | +| 类型 | 说明 | +| -------- | -------- | +| [RdbPredicates](#rdbpredicates) | 返回与指定字段匹配的谓词。 | **示例**: ``` @@ -781,14 +781,14 @@ orderByAsc(field: string): RdbPredicates **系统能力**:SystemCapability.DistributedDataManager.RelationalStore.Core。 **参数**: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | field | string | 是 | 数据库表中的列名。 | +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| field | string | 是 | 数据库表中的列名。 | **返回值**: - | 类型 | 说明 | - | -------- | -------- | - | [RdbPredicates](#rdbpredicates) | 返回与指定字段匹配的谓词。 | +| 类型 | 说明 | +| -------- | -------- | +| [RdbPredicates](#rdbpredicates) | 返回与指定字段匹配的谓词。 | **示例**: ``` @@ -808,14 +808,14 @@ orderByDesc(field: string): RdbPredicates **系统能力**:SystemCapability.DistributedDataManager.RelationalStore.Core。 **参数**: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | field | string | 是 | 数据库表中的列名。 | +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| field | string | 是 | 数据库表中的列名。 | **返回值**: - | 类型 | 说明 | - | -------- | -------- | - | [RdbPredicates](#rdbpredicates) | 返回与指定字段匹配的谓词。 | +| 类型 | 说明 | +| -------- | -------- | +| [RdbPredicates](#rdbpredicates) | 返回与指定字段匹配的谓词。 | **示例**: ``` @@ -834,9 +834,9 @@ distinct(): RdbPredicates **系统能力**:SystemCapability.DistributedDataManager.RelationalStore.Core。 **返回值**: - | 类型 | 说明 | - | -------- | -------- | - | [RdbPredicates](#rdbpredicates) | 返回可用于过滤重复记录的谓词。 | +| 类型 | 说明 | +| -------- | -------- | +| [RdbPredicates](#rdbpredicates) | 返回可用于过滤重复记录的谓词。 | **示例**: ``` @@ -862,14 +862,14 @@ limitAs(value: number): RdbPredicates **系统能力**:SystemCapability.DistributedDataManager.RelationalStore.Core。 **参数**: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | value | number | 是 | 最大数据记录数。 | +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| value | number | 是 | 最大数据记录数。 | **返回值**: - | 类型 | 说明 | - | -------- | -------- | - | [RdbPredicates](#rdbpredicates) | 返回可用于设置最大数据记录数的谓词。 | +| 类型 | 说明 | +| -------- | -------- | +| [RdbPredicates](#rdbpredicates) | 返回可用于设置最大数据记录数的谓词。 | **示例**: ``` @@ -888,14 +888,14 @@ offsetAs(rowOffset: number): RdbPredicates **系统能力**:SystemCapability.DistributedDataManager.RelationalStore.Core。 **参数**: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | rowOffset | number | 是 | 返回结果的起始位置,取值为正整数。 | +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| rowOffset | number | 是 | 返回结果的起始位置,取值为正整数。 | **返回值**: - | 类型 | 说明 | - | -------- | -------- | - | [RdbPredicates](#rdbpredicates) | 返回具有指定返回结果起始位置的谓词。 | +| 类型 | 说明 | +| -------- | -------- | +| [RdbPredicates](#rdbpredicates) | 返回具有指定返回结果起始位置的谓词。 | **示例**: ``` @@ -914,14 +914,14 @@ groupBy(fields: Array<string>): RdbPredicates **系统能力**:SystemCapability.DistributedDataManager.RelationalStore.Core。 **参数**: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | fields | Array<string> | 是 | 指定分组依赖的列名。 | +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| fields | Array<string> | 是 | 指定分组依赖的列名。 | **返回值**: - | 类型 | 说明 | - | -------- | -------- | - | [RdbPredicates](#rdbpredicates) | 返回分组查询列的谓词。 | +| 类型 | 说明 | +| -------- | -------- | +| [RdbPredicates](#rdbpredicates) | 返回分组查询列的谓词。 | **示例**: ``` @@ -932,21 +932,22 @@ groupBy(fields: Array<string>): RdbPredicates ### indexedBy -indexedBy(indexName: string): RdbPredicates +indexedBy(field: string): RdbPredicates 配置RdbPredicates以指定索引列。 **系统能力**:SystemCapability.DistributedDataManager.RelationalStore.Core。 **参数**: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | indexName | string | 是 | 索引列的名称。 | +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| field | string | 是 | 索引列的名称。 | **返回值**: - | 类型 | 说明 | - | -------- | -------- | - | [RdbPredicates](#rdbpredicates) | 返回具有指定索引列的RdbPredicates。 | + +| 类型 | 说明 | +| -------- | -------- | +| [RdbPredicates](#rdbpredicates) | 返回具有指定索引列的RdbPredicates。 | **示例**: ``` @@ -965,16 +966,16 @@ in(field: string, value: Array<ValueType>): RdbPredicates **系统能力**:SystemCapability.DistributedDataManager.RelationalStore.Core。 **参数**: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | field | string | 是 | 数据库表中的列名。 | - | value | Array<[ValueType](#valuetype)> | 是 | 以ValueType型数组形式指定的要匹配的值。 | +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| field | string | 是 | 数据库表中的列名。 | +| value | Array<[ValueType](#valuetype)> | 是 | 以ValueType型数组形式指定的要匹配的值。 | **返回值**: - | 类型 | 说明 | - | -------- | -------- | - | [RdbPredicates](#rdbpredicates) | 返回与指定字段匹配的谓词。 | +| 类型 | 说明 | +| -------- | -------- | +| [RdbPredicates](#rdbpredicates) | 返回与指定字段匹配的谓词。 | **示例**: ``` @@ -993,16 +994,16 @@ notIn(field: string, value: Array<ValueType>): RdbPredicates **系统能力**:SystemCapability.DistributedDataManager.RelationalStore.Core。 **参数**: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | field | string | 是 | 数据库表中的列名。 | - | value | Array<[ValueType](#valuetype)> | 是 | 以ValueType数组形式指定的要匹配的值。 | +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| field | string | 是 | 数据库表中的列名。 | +| value | Array<[ValueType](#valuetype)> | 是 | 以ValueType数组形式指定的要匹配的值。 | **返回值**: - | 类型 | 说明 | - | -------- | -------- | - | [RdbPredicates](#rdbpredicates) | 返回与指定字段匹配的谓词。 | +| 类型 | 说明 | +| -------- | -------- | +| [RdbPredicates](#rdbpredicates) | 返回与指定字段匹配的谓词。 | **示例**: ``` @@ -1025,11 +1026,11 @@ insert(name: string, values: ValuesBucket, callback: AsyncCallback<number> **系统能力**:SystemCapability.DistributedDataManager.RelationalStore.Core。 **参数**: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | name | string | 是 | 指定的目标表名。 | - | values | [ValuesBucket](#valuesbucket) | 是 | 表示要插入到表中的数据行。 | - | callback | AsyncCallback<number> | 是 | 指定callback回调函数。如果操作成功,返回行ID;否则返回-1。 | +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| name | string | 是 | 指定的目标表名。 | +| values | [ValuesBucket](#valuesbucket) | 是 | 表示要插入到表中的数据行。 | +| callback | AsyncCallback<number> | 是 | 指定callback回调函数。如果操作成功,返回行ID;否则返回-1。 | **示例**: ``` @@ -1054,15 +1055,15 @@ insert(name: string, values: ValuesBucket):Promise<number> **系统能力**:SystemCapability.DistributedDataManager.RelationalStore.Core。 **参数**: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | name | string | 是 | 指定的目标表名。 | - | values | [ValuesBucket](#valuesbucket) | 是 | 表示要插入到表中的数据行。 | +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| name | string | 是 | 指定的目标表名。 | +| values | [ValuesBucket](#valuesbucket) | 是 | 表示要插入到表中的数据行。 | **返回值**: - | 类型 | 说明 | - | -------- | -------- | - | Promise<number> | 指定Promise回调函数。如果操作成功,返回行ID;否则返回-1。 | +| 类型 | 说明 | +| -------- | -------- | +| Promise<number> | 指定Promise回调函数。如果操作成功,返回行ID;否则返回-1。 | **示例**: ``` @@ -1090,11 +1091,11 @@ update(values: ValuesBucket, rdbPredicates: RdbPredicates, callback: AsyncCallba **系统能力**:SystemCapability.DistributedDataManager.RelationalStore.Core。 **参数**: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | values | [ValuesBucket](#valuesbucket) | 是 | value指示数据库中要更新的数据行。键值对与数据库表的列名相关联 | - | rdbPredicates | [RdbPredicates](#rdbpredicates) | 是 | 表示要插入到表中的数据行。 | - | callback | AsyncCallback<number> | 是 | 指定的callback回调方法。返回受影响的行数。 | +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| values | [ValuesBucket](#valuesbucket) | 是 | value指示数据库中要更新的数据行。键值对与数据库表的列名相关联 | +| rdbPredicates | [RdbPredicates](#rdbpredicates) | 是 | 表示要插入到表中的数据行。 | +| callback | AsyncCallback<number> | 是 | 指定的callback回调方法。返回受影响的行数。 | **示例**: ``` @@ -1120,15 +1121,15 @@ update(values: ValuesBucket, rdbPredicates: RdbPredicates):Promise<number> **系统能力**:SystemCapability.DistributedDataManager.RelationalStore.Core。 **参数**: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | values | [ValuesBucket](#valuesbucket) | 是 | value指示数据库中要更新的数据行。键值对与数据库表的列名相关联 | - | rdbPredicates | [RdbPredicates](#rdbpredicates) | 是 | 表示要插入到表中的数据行。 | +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| values | [ValuesBucket](#valuesbucket) | 是 | value指示数据库中要更新的数据行。键值对与数据库表的列名相关联 | +| rdbPredicates | [RdbPredicates](#rdbpredicates) | 是 | 表示要插入到表中的数据行。 | **返回值**: - | 类型 | 说明 | - | -------- | -------- | - | Promise<number> | 指定的Promise回调方法。返回受影响的行数。 | +| 类型 | 说明 | +| -------- | -------- | +| Promise<number> | 指定的Promise回调方法。返回受影响的行数。 | **示例**: ``` @@ -1159,10 +1160,10 @@ delete(rdbPredicates: RdbPredicates, callback: AsyncCallback<number>):void **系统能力**:SystemCapability.DistributedDataManager.RelationalStore.Core。 **参数**: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | rdbPredicates | [RdbPredicates](#rdbpredicates) | 是 | RdbPredicates的实例对象指定的删除条件。 | - | callback | AsyncCallback<number> | 是 | 指定callback回调函数。返回受影响的行数。 | +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| rdbPredicates | [RdbPredicates](#rdbpredicates) | 是 | RdbPredicates的实例对象指定的删除条件。 | +| callback | AsyncCallback<number> | 是 | 指定callback回调函数。返回受影响的行数。 | **示例**: ``` @@ -1183,14 +1184,14 @@ delete(rdbPredicates: RdbPredicates):Promise<number> **系统能力**:SystemCapability.DistributedDataManager.RelationalStore.Core。 **参数**: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | rdbPredicates | [RdbPredicates](#rdbpredicates) | 是 | RdbPredicates的实例对象指定的删除条件。 | +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| rdbPredicates | [RdbPredicates](#rdbpredicates) | 是 | RdbPredicates的实例对象指定的删除条件。 | **返回值**: - | 类型 | 说明 | - | -------- | -------- | - | Promise<number> | 指定Promise回调函数。返回受影响的行数。 | +| 类型 | 说明 | +| -------- | -------- | +| Promise<number> | 指定Promise回调函数。返回受影响的行数。 | **示例**: ``` @@ -1214,11 +1215,11 @@ query(rdbPredicates: RdbPredicates, columns: Array<string>, callback: Asyn **系统能力**:SystemCapability.DistributedDataManager.RelationalStore.Core。 **参数**: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | rdbPredicates | [RdbPredicates](#rdbpredicates) | 是 | 表示rdbPredicates的实例对象指定的查询条件。 | - | columns | Array<string> | 是 | 表示要查询的列。如果值为空,则查询应用于所有列。 | - | callback | AsyncCallback<[ResultSet](js-apis-data-resultset.md)> | 是 | 指定callback回调函数。如果操作成功,则返回ResultSet对象。 | +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| rdbPredicates | [RdbPredicates](#rdbpredicates) | 是 | 表示rdbPredicates的实例对象指定的查询条件。 | +| columns | Array<string> | 是 | 表示要查询的列。如果值为空,则查询应用于所有列。 | +| callback | AsyncCallback<[ResultSet](js-apis-data-resultset.md)> | 是 | 指定callback回调函数。如果操作成功,则返回ResultSet对象。 | **示例**: ``` @@ -1240,15 +1241,15 @@ query(rdbPredicates: RdbPredicates, columns?: Array<string>):Promise<Re **系统能力**:SystemCapability.DistributedDataManager.RelationalStore.Core。 **参数**: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | rdbPredicates | [RdbPredicates](#rdbpredicates) | 是 | 表示rdbPredicates的实例对象指定的查询条件。 | - | columns | Array<string> | 否 | 表示要查询的列。如果值为空,则查询应用于所有列。 | +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| rdbPredicates | [RdbPredicates](#rdbpredicates) | 是 | 表示rdbPredicates的实例对象指定的查询条件。 | +| columns | Array<string> | 否 | 表示要查询的列。如果值为空,则查询应用于所有列。 | **返回值**: - | 类型 | 说明 | - | -------- | -------- | - | Promise<[ResultSet](../apis/js-apis-data-resultset.md)> | 指定Promise回调函数。如果操作成功,则返回ResultSet对象。 | +| 类型 | 说明 | +| -------- | -------- | +| Promise<[ResultSet](../apis/js-apis-data-resultset.md)> | 指定Promise回调函数。如果操作成功,则返回ResultSet对象。 | **示例**: ``` @@ -1273,11 +1274,11 @@ querySql(sql: string, bindArgs: Array<ValueType>, callback: AsyncCallback& **系统能力**:SystemCapability.DistributedDataManager.RelationalStore.Core。 **参数**: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | sql | string | 是 | 指定要执行的SQL语句。 | - | bindArgs | Array<[ValueType](#valuetype)> | 是 | SQL语句中参数的值。 | - | callback | AsyncCallback<[ResultSet](js-apis-data-resultset.md)> | 是 | 指定callback回调函数。如果操作成功,则返回ResultSet对象。 | +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| sql | string | 是 | 指定要执行的SQL语句。 | +| bindArgs | Array<[ValueType](#valuetype)> | 是 | SQL语句中参数的值。 | +| callback | AsyncCallback<[ResultSet](js-apis-data-resultset.md)> | 是 | 指定callback回调函数。如果操作成功,则返回ResultSet对象。 | **示例**: ``` @@ -1297,15 +1298,15 @@ querySql(sql: string, bindArgs?: Array<ValueType>):Promise<ResultSet> **系统能力**:SystemCapability.DistributedDataManager.RelationalStore.Core。 **参数**: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | sql | string | 是 | 指定要执行的SQL语句。 | - | bindArgs | Array<[ValueType](#valuetype)> | 否 | SQL语句中参数的值。 | +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| sql | string | 是 | 指定要执行的SQL语句。 | +| bindArgs | Array<[ValueType](#valuetype)> | 否 | SQL语句中参数的值。 | **返回值**: - | 类型 | 说明 | - | -------- | -------- | - | Promise<[ResultSet](../apis/js-apis-data-resultset.md)> | 指定Promise回调函数。如果操作成功,则返回ResultSet对象。 | +| 类型 | 说明 | +| -------- | -------- | +| Promise<[ResultSet](../apis/js-apis-data-resultset.md)> | 指定Promise回调函数。如果操作成功,则返回ResultSet对象。 | **示例**: ``` @@ -1328,11 +1329,11 @@ executeSql(sql: string, bindArgs: Array<ValueType>, callback: AsyncCallbac **系统能力**:SystemCapability.DistributedDataManager.RelationalStore.Core。 **参数**: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | sql | string | 是 | 指定要执行的SQL语句。 | - | bindArgs | Array<[ValueType](#valuetype)> | 是 | SQL语句中参数的值。 | - | callback | AsyncCallback<void> | 是 | 指定callback回调函数。 | +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| sql | string | 是 | 指定要执行的SQL语句。 | +| bindArgs | Array<[ValueType](#valuetype)> | 是 | SQL语句中参数的值。 | +| callback | AsyncCallback<void> | 是 | 指定callback回调函数。 | **示例**: ``` @@ -1351,15 +1352,15 @@ executeSql(sql: string, bindArgs?: Array<ValueType>):Promise<void> **系统能力**:SystemCapability.DistributedDataManager.RelationalStore.Core。 **参数**: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | sql | string | 是 | 指定要执行的SQL语句。 | - | bindArgs | Array<[ValueType](#valuetype)> | 否 | SQL语句中参数的值。 | +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| sql | string | 是 | 指定要执行的SQL语句。 | +| bindArgs | Array<[ValueType](#valuetype)> | 否 | SQL语句中参数的值。 | **返回值**: - | 类型 | 说明 | - | -------- | -------- | - | Promise<void> | 指定Promise回调函数。 | +| 类型 | 说明 | +| -------- | -------- | +| Promise<void> | 指定Promise回调函数。 | **示例**: ``` @@ -1449,7 +1450,7 @@ rollBack():void; ``` -### setDistributedTables +### setDistributedTables8+ setDistributedTables(tables: Array<string>, callback: AsyncCallback<void>): void @@ -1458,10 +1459,10 @@ setDistributedTables(tables: Array<string>, callback: AsyncCallback<voi **系统能力**:SystemCapability.DistributedDataManager.RelationalStore.Core。 **参数**: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | tables | Array<string> | 是 | 要设置的分布式列表表名 | - | callback | AsyncCallback<void> | 是 | 指定callback回调函数。 | +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| tables | Array<string> | 是 | 要设置的分布式列表表名 | +| callback | AsyncCallback<void> | 是 | 指定callback回调函数。 | **示例**: ``` @@ -1475,7 +1476,7 @@ setDistributedTables(tables: Array<string>, callback: AsyncCallback<voi ``` -### setDistributedTables +### setDistributedTables8+ setDistributedTables(tables: Array<string>): Promise<void> @@ -1484,14 +1485,14 @@ setDistributedTables(tables: Array<string>, callback: AsyncCallback<voi **系统能力**:SystemCapability.DistributedDataManager.RelationalStore.Core。 **参数**: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | tables | Array<string> | 是 | 要设置的分布式列表表名。 | +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| tables | Array<string> | 是 | 要设置的分布式列表表名。 | **返回值**: - | 类型 | 说明 | - | -------- | -------- | - | Promise<void> | 指定Promise回调函数。 | +| 类型 | 说明 | +| -------- | -------- | +| Promise<void> | 指定Promise回调函数。 | **示例**: ``` @@ -1503,7 +1504,7 @@ setDistributedTables(tables: Array<string>, callback: AsyncCallback<voi }) ``` -### obtainDistributedTableName +### obtainDistributedTableName8+ obtainDistributedTableName(device: string, table: string, callback: AsyncCallback<string>): void @@ -1512,11 +1513,11 @@ obtainDistributedTableName(device: string, table: string, callback: AsyncCallbac **系统能力**:SystemCapability.DistributedDataManager.RelationalStore.Core。 **参数**: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | device | string | 是 | 远程设备 。| - | table | string | 是 | 本地表名。 | - | callback | AsyncCallback<string> | 是 | 指定的callback回调函数。如果操作成功,返回远程设备的分布式表名。 | +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| device | string | 是 | 远程设备 。| +| table | string | 是 | 本地表名。 | +| callback | AsyncCallback<string> | 是 | 指定的callback回调函数。如果操作成功,返回远程设备的分布式表名。 | **示例**: ``` @@ -1530,7 +1531,7 @@ obtainDistributedTableName(device: string, table: string, callback: AsyncCallbac ``` -### obtainDistributedTableName +### obtainDistributedTableName8+ obtainDistributedTableName(device: string, table: string): Promise<string> @@ -1539,15 +1540,15 @@ obtainDistributedTableName(device: string, table: string, callback: AsyncCallbac **系统能力**:SystemCapability.DistributedDataManager.RelationalStore.Core。 **参数**: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | device | string | 是 | 远程设备。 | - | table | string | 是 | 本地表名。 | +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| device | string | 是 | 远程设备。 | +| table | string | 是 | 本地表名。 | **返回值**: - | 类型 | 说明 | - | -------- | -------- | - | Promise<string> | 指定Promise回调函数。如果操作成功,返回远程设备的分布式表名。 | +| 类型 | 说明 | +| -------- | -------- | +| Promise<string> | 指定Promise回调函数。如果操作成功,返回远程设备的分布式表名。 | **示例**: ``` @@ -1568,11 +1569,11 @@ sync(mode: SyncMode, predicates: RdbPredicates, callback: AsyncCallback<Array **系统能力**:SystemCapability.DistributedDataManager.RelationalStore.Core。 **参数**: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | mode | SyncMode | 是 | 指同步模式。该值可以是推、拉。 | - | predicates | RdbPredicates | 是 | 约束同步数据和设备。 | - | callback | AsyncCallback<Array<[string, number]>> | 是 | 指定的callback回调函数,用于向调用者发送同步结果。string:设备ID;number:每个设备同步状态,0表示成功,其他值表示失败。| +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| mode | [SyncMode](#syncmode8) | 是 | 指同步模式。该值可以是推、拉。 | +| predicates | [RdbPredicates](#rdbpredicates) | 是 | 约束同步数据和设备。 | +| callback | AsyncCallback<Array<[string, number]>> | 是 | 指定的callback回调函数,用于向调用者发送同步结果。string:设备ID;number:每个设备同步状态,0表示成功,其他值表示失败。| **示例**: ``` @@ -1600,15 +1601,16 @@ sync(mode: SyncMode, predicates: RdbPredicates, callback: AsyncCallback<Array **系统能力**:SystemCapability.DistributedDataManager.RelationalStore.Core。 **参数**: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | mode | SyncMode | 是 | 指同步模式。该值可以是推、拉。 | - | predicates | RdbPredicates | 是 | 约束同步数据和设备。 | +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| mode | [SyncMode](#syncmode8) | 是 | 指同步模式。该值可以是推、拉。 | +| predicates | [RdbPredicates](#rdbpredicates) | 是 | 约束同步数据和设备。 | **返回值**: - | 类型 | 说明 | - | -------- | -------- | - | Promise<Array<[string, number]>> | 指定Promise回调函数,用于向调用者发送同步结果。string:设备ID;number:每个设备同步状态,0表示成功,其他值表示失败。 | + +| 类型 | 说明 | +| -------- | -------- | +| Promise<Array<[string, number]>> | 指定Promise回调函数,用于向调用者发送同步结果。string:设备ID;number:每个设备同步状态,0表示成功,其他值表示失败。 | **示例**: ``` @@ -1625,7 +1627,7 @@ sync(mode: SyncMode, predicates: RdbPredicates, callback: AsyncCallback<Array }) ``` -### on +### on('dataChange')8+ on(event: 'dataChange', type: SubscribeType, observer: Callback<Array<string>>): void @@ -1635,10 +1637,11 @@ on(event: 'dataChange', type: SubscribeType, observer: Callback<Array<stri **参数**: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | type | SubscribeType | 是 | 指在{@code SubscribeType}中定义的订阅类型。 | - | observer | Callback<Array<string>> | 是 | 指分布式数据库中数据更改事件的观察者。 | +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| event | string | 是 | 取值为'dataChange',表示数据更改。 | +| type | [SubscribeType](#subscribetype8) | 是 | 指在{@code SubscribeType}中定义的订阅类型。 | +| observer | Callback<Array<string>> | 是 | 指分布式数据库中数据更改事件的观察者。 | **示例**: ``` @@ -1654,7 +1657,7 @@ on(event: 'dataChange', type: SubscribeType, observer: Callback<Array<stri } ``` -### off +### off('dataChange')8+ off(event:'dataChange', type: SubscribeType, observer: Callback<Array<string>>): void @@ -1664,12 +1667,14 @@ off(event:'dataChange', type: SubscribeType, observer: Callback<Array<stri **参数**: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | type | SubscribeType | 是 | 指在{@code SubscribeType}中定义的订阅类型。 | - | observer | Callback<Array<string>> | 是 | 指已注册的数据更改观察者。| +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| event | string | 是 | 取值为'dataChange',表示数据更改。 | +| type | [SubscribeType](#subscribetype8) | 是 | 指在{@code SubscribeType}中定义的订阅类型。 | +| observer | Callback<Array<string>> | 是 | 指已注册的数据更改观察者。| **示例**: + ``` function storeObserver(devices) { for (let i = 0; i < devices.length; i++) { diff --git a/zh-cn/application-dev/reference/apis/js-apis-distributed-data.md b/zh-cn/application-dev/reference/apis/js-apis-distributed-data.md index b6d4e0390b..37c7ab6962 100644 --- a/zh-cn/application-dev/reference/apis/js-apis-distributed-data.md +++ b/zh-cn/application-dev/reference/apis/js-apis-distributed-data.md @@ -26,7 +26,6 @@ createKVManager(config: KVManagerConfig, callback: AsyncCallback<KVManager> | config | [KVManagerConfig](#kvmanagerconfig) | 是 | 提供KVManager实例的配置信息,包括调用方的包名和用户信息。 | | callback | AsyncCallback<[KVManager](#kvmanager)> | 是 | KVManager实例创建时调用的回调,返回KVManager对象实例。 | - **示例**: let kvManager; @@ -573,7 +572,7 @@ off(event: 'distributedDataServiceDie', deathCallback?: Callback<void>): v | autoSync | boolean | 否 |设置数据库文件是否自动同步,默认不自动同步。 | | kvStoreType | [KVStoreType](#kvstoretype) | 否 |设置要创建的数据库类型,默认为多设备协同数据库。 | | securityLevel | [SecurityLevel](#securitylevel) | 否 |设置数据库安全级别,默认不设置安全级别。 | -| schema | [schema](#Schema8+) | 否 | 设置定义存储在数据库中的值。 | +| schema8+ | [Schema](#schema8) | 否 | 设置定义存储在数据库中的值。 | ## KVStoreType @@ -629,7 +628,7 @@ KVStore常量。 | 名称 | 类型 | 说明 | | --- | ---- | ----------------------- | -| root8+ | [FieldNode](#FieldNode) | 表示json根对象 | +| root8+ | [FieldNode](#fieldnode8) | 表示json根对象 | | indexes8+ | Array | 表示json类型的字符串数组。 | | mode8+ | number | 表示Schema的模式。 | | skip8+ | number | Schema的跳跃大小。 | @@ -651,7 +650,7 @@ constructor() | 名称 | 类型 | 说明 | | --- | ---- | ----------------------- | | nullable8+ | boolean | 表示数据库字段是否可以为空。 | -| default8+ | string | 表示fieldnode的默认值。 | +| default8+ | string | 表示Fieldnode的默认值。 | | type8+ | number | 表示值。 | ### constructor8+ ### @@ -664,9 +663,9 @@ constructor(name: string) **参数**: -| 参数名 | 参数类型 | 必填 | 说明 | -| ----- | ------ | ---- | ----------------------- | -| name | string | 是 | FieldNode的值。 +| 参数名 | 参数类型 | 必填 | 说明 | +| ------ | -------- | ---- | --------------- | +| name | string | 是 | FieldNode的值。 | ### appendChild8+ ### @@ -680,7 +679,7 @@ appendChild(child: FieldNode): boolean | 参数名 | 参数类型 | 必填 | 说明 | | ----- | ------ | ---- | ----------------------- | -| child | [FieldNode](#FieldNode) | 是 | 要附加的域节点。 | +| child | [FieldNode](#fieldnode8) | 是 | 要附加的域节点。 | **返回值**: @@ -2985,7 +2984,7 @@ get(key: string, callback: AsyncCallback<Uint8Array | string | boolean | numb ### get -get(key: string): Promise<Uint8Array | string | boolean | number> +get(key: string): Promise<Uint8Array | string | boolean | number> 获取指定键的值,并通过Promise方式返回,此方法为异步方法。 @@ -3252,7 +3251,7 @@ getResultSet(keyPrefix: string, callback: AsyncCallback<KvStoreResultSet>) | 参数名 | 参数类型 | 必填 | 说明 | | ----- | ------ | ---- | ----------------------- | | keyPrefix |string | 是 |表示要匹配的键前缀。 | -| callback |AsyncCallback<[KvStoreResultSet](#kvstoreresultset8)> | 是 |表示要匹配的键前缀。 | +| callback |AsyncCallback<[KvStoreResultSet](#kvstoreresultset8)> | 是 |回调函数。 | **示例** @@ -5075,7 +5074,7 @@ sync(deviceIdList: string[], mode: SyncMode, allowedDelayMs?: number): void ### on8+ ### -on(event: 'syncComplete', syncCallback: Callback<Arrary<[string, number]>>): void +on(event: 'syncComplete', syncCallback: Callback<Array<[string, number]>>): void 订阅同步完成事件回调通知,该方法为同步方法。 @@ -5086,9 +5085,10 @@ on(event: 'syncComplete', syncCallback: Callback<Arrary<[string, number]&g | 参数名 | 参数类型 | 必填 | 说明 | | ----- | ------ | ---- | ----------------------- | | event |'syncComplete' | 是 |同步完成时触发的事件名。 | -| syncCallback |Callback7+ | number | 是 | 否 | 单个PasteData中所能包含的Record的数量上限。 | +| MAX_RECORD_NUM7+ | number | 是 | 否 | 单个PasteData中所能包含的Record的数量上限。 | | MIMETYPE_TEXT_HTML7+ | string | 是 | 否 | HTML text文本的MIME类型定义。 | | MIMETYPE_TEXT_WANT7+ | string | 是 | 否 | Want的MIME类型定义。 | | MIMETYPE_TEXT_PLAIN7+ | string | 是 | 否 | Plain text文本的MIME类型定义。 | @@ -35,14 +35,14 @@ createPlainTextData(text:string): PasteData **系统能力**: SystemCapability.MiscServices.Pasteboard **参数** - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | text | string | 是 | 纯文本数据。 | +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| text | string | 是 | 纯文本数据。 | **返回值** - | 类型 | 说明 | - | -------- | -------- | - | [PasteData](#pastedata) | 包含此内容的剪贴板内容对象。 | +| 类型 | 说明 | +| -------- | -------- | +| [PasteData](#pastedata) | 包含此内容的剪贴板内容对象。 | **示例** @@ -60,14 +60,14 @@ createHtmlData(htmlText:string): PasteData **系统能力**: SystemCapability.MiscServices.Pasteboard **参数** - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | htmlText | string | 是 | 待保存的HTML文本内容。 | +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| htmlText | string | 是 | 待保存的HTML文本内容。 | **返回值** - | 类型 | 说明 | - | -------- | -------- | - | [PasteData](#pastedata) | 包含此内容的剪贴板内容对象。 | +| 类型 | 说明 | +| -------- | -------- | +| [PasteData](#pastedata) | 包含此内容的剪贴板内容对象。 | **示例** @@ -86,14 +86,14 @@ createWantData(want:Want): PasteData **系统能力**: SystemCapability.MiscServices.Pasteboard **参数** - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | want | [Want](js-apis-featureAbility.md#want) | 是 | 待保存的Want内容。 | +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| want | [Want](js-apis-featureAbility.md#want) | 是 | 待保存的Want内容。 | **返回值** - | 类型 | 说明 | - | -------- | -------- | - | [PasteData](#pastedata) | 包含此内容的剪贴板内容对象。 | +| 类型 | 说明 | +| -------- | -------- | +| [PasteData](#pastedata) | 包含此内容的剪贴板内容对象。 | **示例** @@ -115,14 +115,14 @@ createUriData(uri:string): PasteData **系统能力**: SystemCapability.MiscServices.Pasteboard **参数** - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | uri | string | 是 | 待保存的URI内容。 | +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| uri | string | 是 | 待保存的URI内容。 | **返回值** - | 类型 | 说明 | - | -------- | -------- | - | [PasteData](#pastedata) | 包含此内容的剪贴板内容对象。 | +| 类型 | 说明 | +| -------- | -------- | +| [PasteData](#pastedata) | 包含此内容的剪贴板内容对象。 | **示例** @@ -140,14 +140,14 @@ createPlainTextRecord(text:string): PasteDataRecord **系统能力**: SystemCapability.MiscServices.Pasteboard **参数** - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | text | string | 是 | 纯文本内容。 | +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| text | string | 是 | 纯文本内容。 | **返回值** - | 类型 | 说明 | - | -------- | -------- | - | [PasteDataRecord](#pastedatarecord7) | 一条新建的纯文本内容条目。 | +| 类型 | 说明 | +| -------- | -------- | +| [PasteDataRecord](#pastedatarecord7) | 一条新建的纯文本内容条目。 | **示例** @@ -165,14 +165,14 @@ createHtmlTextRecord(htmlText:string): PasteDataRecord **系统能力**: SystemCapability.MiscServices.Pasteboard **参数** - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | htmlText | string | 是 | 文本内容。 | +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| htmlText | string | 是 | 文本内容。 | **返回值** - | 类型 | 说明 | - | -------- | -------- | - | [PasteDataRecord](#pastedatarecord7) | 一条新建的HTML内容条目。 | +| 类型 | 说明 | +| -------- | -------- | +| [PasteDataRecord](#pastedatarecord7) | 一条新建的HTML内容条目。 | **示例** @@ -191,14 +191,14 @@ createWantRecord(want:Want): PasteDataRecord **系统能力**: SystemCapability.MiscServices.Pasteboard **参数** - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | want | [Want](js-apis-featureAbility.md#want) | 是 | Want类型数据。 | +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| want | [Want](js-apis-featureAbility.md#want) | 是 | Want类型数据。 | **返回值** - | 类型 | 说明 | - | -------- | -------- | - | [PasteDataRecord](#pastedatarecord7) | 一条新建的Want内容条目 | +| 类型 | 说明 | +| -------- | -------- | +| [PasteDataRecord](#pastedatarecord7) | 一条新建的Want内容条目 | **示例** @@ -220,14 +220,14 @@ createUriRecord(uri:string): PasteDataRecord **系统能力**: SystemCapability.MiscServices.Pasteboard **参数** - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | uri | string | 是 | URI内容。 | +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| uri | string | 是 | URI内容。 | **返回值** - | 类型 | 说明 | - | -------- | -------- | - | [PasteDataRecord](#pastedatarecord7) | 一条新建的URI内容条目。 | +| 类型 | 说明 | +| -------- | -------- | +| [PasteDataRecord](#pastedatarecord7) | 一条新建的URI内容条目。 | **示例** @@ -242,13 +242,13 @@ createUriRecord(uri:string): PasteDataRecord **系统能力**: 以下各项对应的系统能力均为SystemCapability.MiscServices.Pasteboard。 - | 名称 | 参数类型 | 可读 | 可写 | 说明 | +| 名称 | 参数类型 | 可读 | 可写 | 说明 | | -------- | -------- | -------- | -------- | -------- | -| additions | {[key: string]: object} | 是 | 是 | 设置的其他附加属性数据。 | -| mimeTypes | Array<string> | 是 | 否 | 剪贴板内容条目的数据类型, 非重复的类型列表。 | -| tag | string | 是 | 是 | 用户自定义标签。 | -| timestamp | number | 是 | 否 | 剪贴板数据的写入时间戳(毫秒)。 | -| localOnly | boolean | 是 | 是 | 配置剪贴板内容的“仅在本地”标志位。
- 默认情况为true。
- 配置为true时,表示内容仅在本地,不会在设备之间传递。
- 配置为false时,表示内容将在设备间传递。 | +| additions | {[key: string]: object} | 是 | 是 | 设置的其他附加属性数据。 | +| mimeTypes | Array<string> | 是 | 否 | 剪贴板内容条目的数据类型, 非重复的类型列表。 | +| tag | string | 是 | 是 | 用户自定义标签。 | +| timestamp | number | 是 | 否 | 剪贴板数据的写入时间戳(毫秒)。 | +| localOnly | boolean | 是 | 是 | 配置剪贴板内容的“仅在本地”标志位。
- 默认情况为true。
- 配置为true时,表示内容仅在本地,不会在设备之间传递。
- 配置为false时,表示内容将在设备间传递。 | ## PasteDataRecord7+ @@ -278,9 +278,9 @@ convertToText(): Promise<string> **系统能力**: SystemCapability.MiscServices.Pasteboard **返回值** - | 类型 | 说明 | - | -------- | -------- | - | Promise<void> | 异步回调函数,调用成功则返回强制转换的文本内容,调用失败则返回error信息。 | +| 类型 | 说明 | +| -------- | -------- | +| Promise<void> | 异步回调函数,调用成功则返回强制转换的文本内容,调用失败则返回error信息。 | **示例** @@ -303,9 +303,9 @@ convertToText(callback: AsyncCallback<string>): void **系统能力**: SystemCapability.MiscServices.Pasteboard **参数** - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | callback | AsyncCallback<string> | 是 | 回调函数,调用成功则返回强制转换的文本内容,调用失败则返回error信息。 | +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| callback | AsyncCallback<string> | 是 | 回调函数,调用成功则返回强制转换的文本内容,调用失败则返回error信息。 | **示例** @@ -340,9 +340,9 @@ getPrimaryText(): string **返回值** - | 类型 | 说明 | - | -------- | -------- | - | string | 纯文本内容。 | +| 类型 | 说明 | +| -------- | -------- | +| string | 纯文本内容。 | **示例** @@ -361,9 +361,9 @@ getPrimaryHtml(): string **系统能力**: SystemCapability.MiscServices.Pasteboard **返回值** - | 类型 | 说明 | - | -------- | -------- | - | string | HTML文本数据。 | +| 类型 | 说明 | +| -------- | -------- | +| string | HTML文本数据。 | **示例** @@ -383,9 +383,9 @@ getPrimaryWant(): Want **系统能力**: SystemCapability.MiscServices.Pasteboard **返回值** - | 类型 | 说明 | - | -------- | -------- | - | [Want](js-apis-featureAbility.md#want) | Want对象内容。 | +| 类型 | 说明 | +| -------- | -------- | +| [Want](js-apis-featureAbility.md#want) | Want对象内容。 | **示例** @@ -408,9 +408,9 @@ getPrimaryUri(): string **系统能力**: SystemCapability.MiscServices.Pasteboard **返回值** - | 类型 | 说明 | - | -------- | -------- | - | string | URI文本内容。 | +| 类型 | 说明 | +| -------- | -------- | +| string | URI文本内容。 | **示例** @@ -431,9 +431,9 @@ addTextRecord(text: string): void **系统能力**: SystemCapability.MiscServices.Pasteboard **参数** - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | text | string | 是 | 纯文本内容。 | +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| text | string | 是 | 纯文本内容。 | **示例** @@ -454,9 +454,9 @@ addHtmlRecord(htmlText: string): void **系统能力**: SystemCapability.MiscServices.Pasteboard **参数** - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | htmlText | string | 是 | HTML格式的文本内容。 | +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| htmlText | string | 是 | HTML格式的文本内容。 | **示例** @@ -478,9 +478,9 @@ addWantRecord(want: Want): void **系统能力**: SystemCapability.MiscServices.Pasteboard **参数** - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | want | [Want](js-apis-featureAbility.md#want) | 是 | Want对象内容。 | +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| want | [Want](js-apis-featureAbility.md#want) | 是 | Want对象内容。 | **示例** @@ -505,9 +505,9 @@ addUriRecord(uri: string): void **系统能力**: SystemCapability.MiscServices.Pasteboard **参数** - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | uri | string | 是 | URI文本内容。 | +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| uri | string | 是 | URI文本内容。 | **示例** @@ -528,9 +528,9 @@ addRecord(record: PasteDataRecord): void **系统能力**: SystemCapability.MiscServices.Pasteboard **参数** - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | record | [PasteDataRecord](#pastedatarecord7) | 是 | 待添加的条目。 | +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| record | [PasteDataRecord](#pastedatarecord7) | 是 | 待添加的条目。 | **示例** @@ -553,9 +553,9 @@ getMimeTypes(): Array<string> **系统能力**: SystemCapability.MiscServices.Pasteboard **返回值** - | 类型 | 说明 | - | -------- | -------- | - | Array<string> | 非重复的类型列表。 | +| 类型 | 说明 | +| -------- | -------- | +| Array<string> | 非重复的类型列表。 | **示例** @@ -574,9 +574,9 @@ getPrimaryMimeType(): string **系统能力**: SystemCapability.MiscServices.Pasteboard **返回值** - | 类型 | 说明 | - | -------- | -------- | - | string | 首个条目的数据类型。 | +| 类型 | 说明 | +| -------- | -------- | +| string | 首个条目的数据类型。 | **示例** @@ -595,9 +595,9 @@ getProperty(): PasteDataProperty **系统能力**: SystemCapability.MiscServices.Pasteboard **返回值** - | 类型 | 说明 | - | -------- | -------- | - | [PasteDataProperty](#pastedataproperty7) | 属性描述对象。 | +| 类型 | 说明 | +| -------- | -------- | +| [PasteDataProperty](#pastedataproperty7) | 属性描述对象。 | **示例** @@ -616,14 +616,14 @@ getRecordAt(index: number): PasteDataRecord **系统能力**: SystemCapability.MiscServices.Pasteboard **参数** - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | index | number | 是 | 指定条目的下标。 | +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| index | number | 是 | 指定条目的下标。 | **返回值** - | 类型 | 说明 | - | -------- | -------- | - | [PasteDataRecord](#pastedatarecord7) | 指定下标的条目。 | +| 类型 | 说明 | +| -------- | -------- | +| [PasteDataRecord](#pastedatarecord7) | 指定下标的条目。 | **示例** @@ -642,9 +642,9 @@ getRecordCount(): number **系统能力**: SystemCapability.MiscServices.Pasteboard **返回值** - | 类型 | 说明 | - | -------- | -------- | - | number | 条目的个数。 | +| 类型 | 说明 | +| -------- | -------- | +| number | 条目的个数。 | **示例** @@ -663,9 +663,9 @@ getTag(): string **系统能力**: SystemCapability.MiscServices.Pasteboard **返回值** - | 类型 | 说明 | - | -------- | -------- | - | string | 获取用户自定义的标签内容,如果没有设置用户自定义的标签内容将返回空。 | +| 类型 | 说明 | +| -------- | -------- | +| string | 获取用户自定义的标签内容,如果没有设置用户自定义的标签内容将返回空。 | **示例** @@ -684,14 +684,14 @@ hasMimeType(mimeType: string): boolean **系统能力**: SystemCapability.MiscServices.Pasteboard **参数** - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | mimeType | string | 是 | 待查询的数据类型。 | +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| mimeType | string | 是 | 待查询的数据类型。 | **返回值** - | 类型 | 说明 | - | -------- | -------- | - | boolean | 有指定的数据类型返回true,否则返回false。 | +| 类型 | 说明 | +| -------- | -------- | +| boolean | 有指定的数据类型返回true,否则返回false。 | **示例** @@ -710,14 +710,14 @@ removeRecordAt(index: number): boolean **系统能力**: SystemCapability.MiscServices.Pasteboard **参数** - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | index | number | 是 | 指定的下标。 | +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| index | number | 是 | 指定的下标。 | **返回值** - | 类型 | 说明 | - | -------- | -------- | - | boolean | 成功移除返回true,失败返回false。 | +| 类型 | 说明 | +| -------- | -------- | +| boolean | 成功移除返回true,失败返回false。 | **示例** @@ -736,15 +736,15 @@ replaceRecordAt(index: number, record: PasteDataRecord): boolean **系统能力**: SystemCapability.MiscServices.Pasteboard **参数** - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | index | number | 是 | 指定的下标。 | - | record | [PasteDataRecord](#pastedatarecord7) | 是 | 替换后的条目。 | +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| index | number | 是 | 指定的下标。 | +| record | [PasteDataRecord](#pastedatarecord7) | 是 | 替换后的条目。 | **返回值** - | 类型 | 说明 | - | -------- | -------- | - | boolean | 成功替换返回true,失败返回false。 | +| 类型 | 说明 | +| -------- | -------- | +| boolean | 成功替换返回true,失败返回false。 | **示例** @@ -764,9 +764,9 @@ getSystemPasteboard(): SystemPasteboard **系统能力**: SystemCapability.MiscServices.Pasteboard **返回值** - | 类型 | 说明 | - | -------- | -------- | - | [SystemPasteboard](#systempasteboard) | 系统剪切板对象。 | +| 类型 | 说明 | +| -------- | -------- | +| [SystemPasteboard](#systempasteboard) | 系统剪切板对象。 | **示例** @@ -786,17 +786,17 @@ var systemPasteboard = pasteboard.getSystemPasteboard(); ### setPasteData -setPasteData(pasteData:PasteData, callback:AsyncCallback<void>): void +setPasteData(data:PasteData, callback:AsyncCallback<void>): void 将数据写入系统剪切板,并使用callback方式返回结果。 **系统能力**: SystemCapability.MiscServices.Pasteboard **参数** - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | pasteData | [PasteData](#pastedata) | 是 | PasteData对象。 | - | callback | AsyncCallback<void> | 是 | 回调函数,表示是否成功将数据写入系统剪切板。 | +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| data | [PasteData](#pastedata) | 是 | PasteData对象。 | +| callback | AsyncCallback<void> | 是 | 回调函数,表示是否成功将数据写入系统剪切板。 | **示例** @@ -815,21 +815,21 @@ setPasteData(pasteData:PasteData, callback:AsyncCallback<void>): void ### setPasteData -setPasteData(pasteData:PasteData): Promise<void> +setPasteData(data:PasteData): Promise<void> 将数据写入系统剪切板,并使用Promise异步方式返回结果。 **系统能力**: SystemCapability.MiscServices.Pasteboard **参数** - | 参数名 | 类型 | 说明 | - | -------- | -------- | -------- | - | pasteData | [PasteData](#pastedata) | PasteData对象。 | +| 参数名 | 类型 | 说明 | +| -------- | -------- | -------- | +| data | [PasteData](#pastedata) | PasteData对象。 | **返回值** - | 类型 | 说明 | - | -------- | -------- | - | Promise<void> | 异步回调函数,表示是否成功将数据写入系统剪切板。 | +| 类型 | 说明 | +| -------- | -------- | +| Promise<void> | 异步回调函数,表示是否成功将数据写入系统剪切板。 | **示例** @@ -853,9 +853,9 @@ getPasteData( callback:AsyncCallback<PasteData>): void **系统能力**: SystemCapability.MiscServices.Pasteboard **参数** - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | callback | AsyncCallback<[PasteData](#pastedata)> | 是 | 回调函数,返回系统剪切板数据。 | +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| callback | AsyncCallback<[PasteData](#pastedata)> | 是 | 回调函数,返回系统剪切板数据。 | **示例** @@ -880,9 +880,9 @@ getPasteData(): Promise<PasteData> **系统能力**: SystemCapability.MiscServices.Pasteboard **返回值** - | 类型 | 说明 | - | -------- | -------- | - | Promise<[PasteData](#pastedata)> | 异步回调函数,调返回系统剪切板数据。 | +| 类型 | 说明 | +| -------- | -------- | +| Promise<[PasteData](#pastedata)> | 异步回调函数,调返回系统剪切板数据。 | **示例** @@ -905,10 +905,10 @@ on(type: 'update', callback: () =>void ): void **系统能力**: SystemCapability.MiscServices.Pasteboard **参数** - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | type | string | 是 | 取值为'update',表示系统剪贴板内容变化事件。 | - | callback | function | 是 | 剪贴板中内容变化时触发的用户程序的回调。 | +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| type | string | 是 | 取值为'update',表示系统剪贴板内容变化事件。 | +| callback | function | 是 | 剪贴板中内容变化时触发的用户程序的回调。 | **示例** @@ -923,17 +923,17 @@ on(type: 'update', callback: () =>void ): void ### off('update')7+ -off(type: 'update', callback?: () =>void ): void +off(type: 'update', callback?: () =>void ): void 取消订阅系统剪贴板内容变化事件。 **系统能力**: SystemCapability.MiscServices.Pasteboard **参数** - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | type | string | 是 | 取值为'update',表示系统剪贴板内容变化事件。 | - | callback | function | 否 | 剪贴板中内容变化时触发的用户程序的回调。 | +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| type | string | 是 | 取值为'update',表示系统剪贴板内容变化事件。 | +| callback | function | 否 | 剪贴板中内容变化时触发的用户程序的回调。 | **示例** @@ -951,9 +951,9 @@ hasPasteData(callback: AsyncCallback<boolean>): void **系统能力**: SystemCapability.MiscServices.Pasteboard **参数** - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | callback | AsyncCallback<boolean> | 是 | 返回为true表示系统剪切板中有内容,返回false表示系统剪切板中没有内容。 | +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| callback | AsyncCallback<boolean> | 是 | 返回为true表示系统剪切板中有内容,返回false表示系统剪切板中没有内容。 | **示例** @@ -977,9 +977,9 @@ hasPasteData(): Promise<boolean> **系统能力**: SystemCapability.MiscServices.Pasteboard **返回值** - | 类型 | 说明 | - | -------- | -------- | - | Promise<boolean> | 返回为true表示系统剪切板中有内容,返回false表示系统剪切板中没有内容。 | +| 类型 | 说明 | +| -------- | -------- | +| Promise<boolean> | 返回为true表示系统剪切板中有内容,返回false表示系统剪切板中没有内容。 | **示例** @@ -1001,9 +1001,9 @@ clear(callback: AsyncCallback<void>): void **系统能力**: SystemCapability.MiscServices.Pasteboard **参数** - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | callback | AsyncCallback<void> | 是 | 回调函数,表示是否成功清空系统剪切板内容。 | +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| callback | AsyncCallback<void> | 是 | 回调函数,表示是否成功清空系统剪切板内容。 | **示例** @@ -1028,9 +1028,9 @@ clear(): Promise<void> **返回值** - | 类型 | 说明 | - | -------- | -------- | - | Promise<void> | 异步回调函数,表示是否成功清空系统剪切板内容。 | +| 类型 | 说明 | +| -------- | -------- | +| Promise<void> | 异步回调函数,表示是否成功清空系统剪切板内容。 | **示例** diff --git a/zh-cn/application-dev/reference/apis/js-apis-request.md b/zh-cn/application-dev/reference/apis/js-apis-request.md index faa80affd7..cb0579c3a9 100644 --- a/zh-cn/application-dev/reference/apis/js-apis-request.md +++ b/zh-cn/application-dev/reference/apis/js-apis-request.md @@ -1,4 +1,4 @@ -# 上传下载 +# e上传下载 > ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** @@ -445,7 +445,7 @@ on(type: 'progress', callback:(receivedSize: number, totalSize: number) => vo ``` request.download({ url: 'https://xxxx/xxxx.hap' }, (err, data)=> { if (err) { - console.error('Fail to request download. Cause:' + err); + console.error('Failed to request download. Cause:' + err); return; } downloadTask = data; @@ -485,7 +485,7 @@ off(type: 'progress', callback?: (receivedSize: number, totalSize: number) => ``` request.download({ url: 'https://xxxx/xxxx.hap' }, (err, data)=> { if (err) { - console.error('Fail to request download. Cause:' + err); + console.error('Failed to request download. Cause:' + err); return; } downloadTask = data; @@ -497,11 +497,11 @@ off(type: 'progress', callback?: (receivedSize: number, totalSize: number) => ``` -### on('complete')7+ +### on('complete'|'pause'|'remove')7+ -on(type: 'complete', callback:() => void): void +on(type: 'complete'|'pause'|'remove', callback:() => void): void -开启下载任务完成监听,异步方法,使用callback形式返回。 +开启下载任务相关的监听,异步方法,使用callback形式返回。 **需要权限**:ohos.permission.INTERNET @@ -510,15 +510,15 @@ on(type: 'complete', callback:() => void): void - 参数: | 参数名 | 类型 | 必填 | 说明 | | -------- | -------- | -------- | -------- | - | type | string | 是 | 订阅的事件类型,取值为'complete'(下载任务完成)。 | - | callback | function | 是 | 下载完成的回调函数。 | + | type | string | 是 | 订阅的事件类型。
- 取值为'complete',表示下载任务完成;
- 取值为'pause',表示下载任务暂停;
- 取值为'remove',表示下载任务移除。 | + | callback | function | 是 | 回调函数。 | - 示例: ``` request.download({ url: 'https://xxxx/xxxx.hap' }, (err, data)=> { if (err) { - console.error('Fail to request download. Cause:' + err); + console.error('Failed to request download. Cause:' + err); return; } downloadTask= data; @@ -530,11 +530,11 @@ on(type: 'complete', callback:() => void): void ``` -### off('complete')7+ +### off('complete'|'pause'|'remove')7+ -off(type: 'complete', callback?:() => void): void +off(type: 'complete'|'pause'|'remove', callback?:() => void): void -取消下载任务完成监听,异步方法,使用callback形式返回。 +取消下载任务相关的监听,异步方法,使用callback形式返回。 **需要权限**:ohos.permission.INTERNET @@ -543,15 +543,15 @@ off(type: 'complete', callback?:() => void): void - 参数: | 参数名 | 类型 | 必填 | 说明 | | -------- | -------- | -------- | -------- | - | type | string | 是 | 取消订阅的事件类型,取值为'complete'(下载任务完成)。 | - | callback | function | 否 | 取消下载完成的回调函数。 | + | type | string | 是 | 取消订阅的事件类型。
- 取值为'complete',表示下载任务完成;
- 取值为'pause',表示下载任务暂停;
- 取值为'remove',表示下载任务移除。 | + | callback | function | 否 | 回调函数。 | - 示例: ``` request.download({ url: 'https://xxxx/xxxx.hap' }, (err, data)=> { if (err) { - console.error('Fail to request download. Cause:' + JSON.stringify(err)); + console.error('Failed to request download. Cause:' + JSON.stringify(err)); return; } downloadTask = data; @@ -590,7 +590,7 @@ on(type: 'fail', callback: (err: number) => void): void ``` request.download({ url: 'https://xxxx/xxxx.hap' }, (err, data)=> { if (err) { - console.error('Fail to request download. Cause:' + err); + console.error('Failed to request download. Cause:' + err); return; } downloadTask = data; @@ -629,7 +629,7 @@ off(type: 'fail', callback?: (err: number) => void): void ``` request.download({ url: 'https://xxxx/xxxx.hap' }, (err, data)=> { if (err) { - console.error('Fail to request download. Cause:' + err); + console.error('Failed to request download. Cause:' + err); return; } downloadTask = data; @@ -641,137 +641,6 @@ off(type: 'fail', callback?: (err: number) => void): void ``` -### on('pause')7+ - -on(type: 'pause', callback:() => void): void - -开启下载任务暂停监听,异步方法,使用callback形式返回结果。 - -**需要权限**:ohos.permission.INTERNET - -**系统能力**: SystemCapability.MiscServices.Download - -- 参数: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | type | string | 是 | 订阅的事件类型,取值为'pause'(下载暂停)。 | - | callback | function | 是 | 下载暂停的回调函数。 | - -- 示例: - - ``` - request.download({ url: 'https://xxxx/xxxx.hap' }, (err, data)=> { - if (err) { - console.error('Failed to pause the download task. Cause:' + err); - return; - } - downloadTask = data; - downloadTask.on('pause', function callBack() { - console.info('Download task paused.'); - } - ); - }); - ``` - - -### off('pause')7+ - -off(type: 'pause', callback?:() => void): void - -取消下载任务暂停监听,异步方法,使用callback形式返回结果。 - -**需要权限**:ohos.permission.INTERNET - -**系统能力**: SystemCapability.MiscServices.Download - -- 参数: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | type | string | 是 | 取消订阅的事件类型,取值为'pause'(下载暂停)。 | - | callback | function | 否 | 取消下载暂停的回调函数。 | - -- 示例: - - ``` - request.download({ url: 'https://xxxx/xxxx.hap' }, (err, data)=> { - if (err) { - console.error('Failed to pause the download task. Cause:' + err); - return; - } - downloadTask = data; - downloadTask.off('pause', function callBack() { - console.info('Download task paused.'); - } - ); - }); - ``` - - -### on('remove')7+ - -on(type: 'remove', callback:() => void): void - -开启下载任务移除监听,异步方法,使用callback形式返回结果。 - -**需要权限**:ohos.permission.INTERNET - -**系统能力**: SystemCapability.MiscServices.Download - -- 参数: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | type | string | 是 | 订阅的事件类型,取值为'remove'(下载任务移除)。 | - | callback | function | 是 | 下载移除的回调函数。 | - -- 示例: - - ``` - request.download({ url: 'https://xxxx/xxxx.hap' }, (err, data)=> { - if (err) { - console.error('Failed to remove the download task. Cause:' + err); - return; - } - downloadTask = data; - downloadTask.on('remove', function callBack() { - console.info('Download task removed.'); - } - ); - }); - ``` - - -### off('remove')7+ - -off(type: 'remove', callback?:() => void): void - -取消下载任务移除监听,异步方法,使用callback形式返回结果。 - -**需要权限**:ohos.permission.INTERNET - -**系统能力**: SystemCapability.MiscServices.Download - -- 参数: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | type | string | 是 | 取消订阅的事件类型,取值为'remove'(下载任务移除)。 | - | callback | function | 否 | 取消下载移除的回调函数。 | - -- 示例: - - ``` - request.download({ url: 'https://xxxx/xxxx.hap' }, (err, data)=> { - if (err) { - console.error('Failed to remove the download task. Cause:' + JSON.stringify(err)); - } - downloadTask = data; - downloadTask.off('remove', function callBack() { - console.info('Download task removed.'); - } - ); - }); - ``` - - ### remove remove(): Promise<boolean> @@ -853,7 +722,7 @@ query(): Promise<DownloadInfo> ``` downloadTask.query().then((downloadInfo) => { - console.info('Download task queried. Data:' + JSON.stringfy(downloadInfo)) + console.info('Download task queried. Data:' + JSON.stringify(downloadInfo)) }) .catch((err) => { console.error('Failed to query the download task. Cause:' + err) }); diff --git a/zh-cn/application-dev/reference/apis/js-apis-window.md b/zh-cn/application-dev/reference/apis/js-apis-window.md index 975ce49cb9..6202965ca4 100644 --- a/zh-cn/application-dev/reference/apis/js-apis-window.md +++ b/zh-cn/application-dev/reference/apis/js-apis-window.md @@ -160,12 +160,14 @@ import window from '@ohos.window'; | DEFAULT | 0 | 默认色域模式。 | | WIDE_GAMUT | 1 | 广色域模式。 | -## window.create7 +## window.create7+ create(id: string, type: WindowType, callback: AsyncCallback<Window>): void 创建子窗口,使用callback方式作为异步方法。 +从API version 8开始,此接口废弃,推荐使用[window.create8+](#windowcreate8)接口。 + **系统能力**:SystemCapability.WindowManager.WindowManager.Core - 参数 @@ -191,12 +193,14 @@ create(id: string, type: WindowType, callback: AsyncCallback<Window>): voi }); ``` -## window.create7 +## window.create7+ create(id: string, type: WindowType): Promise<Window> 创建子窗口,使用Promise方式作为异步方法。 +从API version 8开始,此接口废弃,推荐使用[window.create8+](#windowcreate8)接口。 + **系统能力**:SystemCapability.WindowManager.WindowManager.Core - 参数 @@ -523,7 +527,7 @@ off(type: 'systemBarTintChange', callback?: Callback<SystemBarTintState >) ## Window -下列API示例中都需使用[getTopWindow()](#window-gettopwindow)、[create()](#window-create)、[find()](#window-find)等先获取到Window实例,再通过此实例调用对应方法。 +下列API示例中都需使用[getTopWindow()](#window-gettopwindow)、[create()](#windowcreate7)、[find()](#window-find)等先获取到Window实例,再通过此实例调用对应方法。 ### hide7+ diff --git a/zh-cn/application-dev/security/accesstoken-overview.md b/zh-cn/application-dev/security/accesstoken-overview.md index 53e1626d32..a3f64bb28a 100644 --- a/zh-cn/application-dev/security/accesstoken-overview.md +++ b/zh-cn/application-dev/security/accesstoken-overview.md @@ -166,7 +166,7 @@ ACL方式的工作流程可以参考[ACL方式使用说明](#ACL方式使用说 如果应用申请的权限中,存在部分权限的权限等级比应用APL等级高,开发者可以选择通过ACL方式来解决这个等级不匹配的问题。 -在上述的[授权流程](# 不同权限类型的授权流程)的基础上,应用需要进行额外的ACL声明步骤。 +在上述的[授权流程](#不同权限类型的授权流程)的基础上,应用需要进行额外的ACL声明步骤。 应用除了需要在config.json文件声明所需申请的权限,还需要在应用的[profile文件中声明](accesstoken-guidelines.md)不满足申请条件的高等级权限,接下来的授权流程不变。 diff --git a/zh-cn/application-dev/security/figures/figure1.png b/zh-cn/application-dev/security/figures/figure1.png index f6c57888cc065ddb5239600ae7f44e6585237804..b09cdea12f110f83e67ab3f497ba15f73108c9bb 100644 GIT binary patch literal 42550 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�%_^|z~wSIX7fn#P;TMTQsn=D^>JcX0O@&$JF(YQ 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 -- GitLab