已合并
配置共享支持多值配置 #148190
配置共享支持多值配置 #148190
已合并
共 2 个文件变更+236-2
| @@ -149,4 +149,22 @@ The parameter format is incorrect or the value range is invalid. | |||
| 149 | 4. 检查接口传入的proxyData数组的长度是否超过32。 | 149 | 4. 检查接口传入的proxyData数组的长度是否超过32。 |
| 150 | 150 | ||
| 151 | 5. 检查接口传入的URI数组或者proxyData数组中的URI是否满足格式校验:<br/> | 151 | 5. 检查接口传入的URI数组或者proxyData数组中的URI是否满足格式校验:<br/> |
| 152 | - URI的固定格式为`"datashareproxy://{bundleName}/{path}"`,其中bundleName为配置发布方应用的bundleName,path可随意填写。 | 152 | + URI的固定格式为`"datashareproxy://{bundleName}/{path}"`,其中bundleName为配置发布方应用的bundleName,path可随意填写。 |
| 153 | + | ||
| 154 | +## 15700015 访问URI权限错误 | ||
| 155 | + | ||
| 156 | +**错误信息** | ||
| 157 | + | ||
| 158 | +No permission to access the data specified by the URI. | ||
| 159 | + | ||
| 160 | +**错误描述** | ||
| 161 | + | ||
| 162 | +没有权限访问URI所指定的数据。 | ||
| 163 | + | ||
| 164 | +**可能原因** | ||
| 165 | + | ||
| 166 | +未申请访问指定数据所需的权限。 | ||
| 167 | + | ||
| 168 | +**处理步骤** | ||
| 169 | + | ||
| 170 | +咨询数据提供方访问指定数据所需的权限。 | ||
| @@ -83,6 +83,9 @@ export default class EntryAbility extends UIAbility { | |||
| 83 | | uri | string | 否 | 否 | 共享配置的全局唯一标识。固定格式为`"datashareproxy://{bundleName}/{path}"`,其中bundleName为配置发布方应用的bundleName,path可随意填写,但同一应用内不允许重复。字符串长度不超过256个字节。 | | 83 | | uri | string | 否 | 否 | 共享配置的全局唯一标识。固定格式为`"datashareproxy://{bundleName}/{path}"`,其中bundleName为配置发布方应用的bundleName,path可随意填写,但同一应用内不允许重复。字符串长度不超过256个字节。 | |
| 84 | | value | [ValueType](js-apis-data-valuesBucket.md#valuetype) | 否 | 是 | 共享配置的值。不填则为空字符串。<br/>**说明:** <br/>1. API版本26.0.0之前,字符串长度不超过4096个字节;从API版本26.0.0开始,默认允许的字符串最大长度为4096字节,可以在[DataProxyConfig](#dataproxyconfig20)中配置maxValueLength将最大长度扩展到102400字节。<br/>2. 当首次发布共享配置时,如果未填写,将默认设置为空字符串。在更新共享配置时,如果未填写,共享配置的值将不会被更新。 | | 84 | | value | [ValueType](js-apis-data-valuesBucket.md#valuetype) | 否 | 是 | 共享配置的值。不填则为空字符串。<br/>**说明:** <br/>1. API版本26.0.0之前,字符串长度不超过4096个字节;从API版本26.0.0开始,默认允许的字符串最大长度为4096字节,可以在[DataProxyConfig](#dataproxyconfig20)中配置maxValueLength将最大长度扩展到102400字节。<br/>2. 当首次发布共享配置时,如果未填写,将默认设置为空字符串。在更新共享配置时,如果未填写,共享配置的值将不会被更新。 | |
| 85 | | allowList | string\[] | 否 | 是 | 允许订阅和读取共享配置的应用程序列表。不填则为空的字符串数组。数组最大长度为256,超过256的部分不生效。当首次发布共享配置时,如果未填写,将默认为空的允许列表。在更新共享配置时,如果未填写,共享配置的允许列表将不会被更新。一个空的允许列表表示只有发布者能够访问该共享配置。 <br/>API版本26.0.0之前,数组中每个元素为应用的[appIdentifier](../../quick-start/common-problem-of-application.md#什么是appidentifier),单个appIdentifier最大长度128字节,超过128字节的appIdentifier不会生效。<br/>从API版本26.0.0开始,数组支持配置特殊字符串"all"(区分大小写)表示允许所有应用访问。| | 85 | | allowList | string\[] | 否 | 是 | 允许订阅和读取共享配置的应用程序列表。不填则为空的字符串数组。数组最大长度为256,超过256的部分不生效。当首次发布共享配置时,如果未填写,将默认为空的允许列表。在更新共享配置时,如果未填写,共享配置的允许列表将不会被更新。一个空的允许列表表示只有发布者能够访问该共享配置。 <br/>API版本26.0.0之前,数组中每个元素为应用的[appIdentifier](../../quick-start/common-problem-of-application.md#什么是appidentifier),单个appIdentifier最大长度128字节,超过128字节的appIdentifier不会生效。<br/>从API版本26.0.0开始,数组支持配置特殊字符串"all"(区分大小写)表示允许所有应用访问。| |
| 86 | +| isMultiValues | boolean | 否 | 是 | 表示是否为使用values的多值类型的共享配置。true表示本次发布的数据是多值类型,则value参数将被忽略。false表示非多值类型。默认为false。 <br/>**起始版本:** 26.0.0 | | ||
| 87 | +| values | Record<number, [ValueType](js-apis-data-valuesBucket.md#valuetype)> | 否 | 是 | 多值类型取值。Record中的第一个参数为key,key由用户指定,必须唯一。第二个参数为key对应的value。单个应用在单个URI下最多支持添加10个value,每个value最大长度为4096字节。同时,所有value的总长度受[DataProxyConfig](#dataproxyconfig20)中maxValueLength字段限制。该参数仅在isMultiValues设置为true时生效,且不允许为空。当isMultivalues为false时默认为undefined。 <br/>**起始版本:** 26.0.0 | | ||
| 88 | +| trustProviders | string[] | 否 | 是 | 可对多值类型共享多值配置进行赋值的App列表。数组最多包含256个元素,超出部分无效。数组中每个元素为某个应用的[appIdentifier](../../quick-start/common-problem-of-application.md#什么是appidentifier)。appIdentifier最大长度为128字节,超过128字节的部分不生效。<br/>若首次发布共享配置时未设置该参数,则默认赋值列表为空。赋值列表为空表示仅发布者可以对多值类型的共享配置进行赋值。该数组支持特殊字符串"all"(区分大小写),表示允许所有应用对多值类型的共享配置进行赋值。该参数仅在isMultiValues设置为true时生效。<br/>**起始版本:** 26.0.0 | | ||
| 86 | 89 | ||
| 87 | ## DataProxyChangeInfo<sup>20+</sup> | 90 | ## DataProxyChangeInfo<sup>20+</sup> |
| 88 | 91 | ||
| @@ -95,6 +98,7 @@ export default class EntryAbility extends UIAbility { | |||
| 95 | | type | [ChangeType](#changetype20) | 否 | 否 | 通知变更的类型。 | | 98 | | type | [ChangeType](#changetype20) | 否 | 否 | 通知变更的类型。 | |
| 96 | | uri | string | 否 | 否 | 通知变更指定URI。| | 99 | | uri | string | 否 | 否 | 通知变更指定URI。| |
| 97 | | value | [ValueType](js-apis-data-valuesBucket.md#valuetype) | 否 | 否 | 更新的数据。 | | 100 | | value | [ValueType](js-apis-data-valuesBucket.md#valuetype) | 否 | 否 | 更新的数据。 | |
| 101 | +| values | [ValueType](js-apis-data-valuesBucket.md#valuetype)[] | 否 | 是 | 多值类型的变更数据。如果变更的数据类型不是多值类型,则values值为undefined。<br/>**起始版本:** 26.0.0 | | ||
| 98 | 102 | ||
| 99 | ## DataProxyErrorCode<sup>20+</sup> | 103 | ## DataProxyErrorCode<sup>20+</sup> |
| 100 | 104 | ||
| @@ -287,7 +291,17 @@ results.forEach((result) => { | |||
| 287 | 291 | ||
| 288 | publish(data: ProxyData[], config: DataProxyConfig): Promise<DataProxyResult[]> | 292 | publish(data: ProxyData[], config: DataProxyConfig): Promise<DataProxyResult[]> |
| 289 | 293 | ||
| 290 | -发布共享配置项。使用Promise异步回调。发布后,发布者和允许列表中指定的应用可以访问该共享配置项。如果要发布的URI已经存在,则更新对应的共享配置项。如果发布的配置项中存在任一URI的长度超出上限或者格式校验失败,则当前发布操作失败。只有发布者才允许更新共享配置项。API版本26.0.0之前,每个应用支持最多32个共享配置;从API版本26.0.0开始,每个应用支持最多64个共享配置。 | 294 | +发布共享配置项。使用Promise异步回调。 |
已过期 要命啊,这一大堆,适当换下行吧
改为: 发布共享配置项。使用Promise异步回调。 发布后,发布者和允许列表中指定的应用可以访问该共享配置项。 如果要发布的URI已经存在,则更新对应的共享配置项。如果发布的配置项中存在任一URI的长度超出上限或者格式校验失败,则当前发布操作失败。 只有发布者才允许更新共享配置项。 API版本26.0.0之前,每个应用支持最多32个共享配置;从API版本26.0.0开始,每个应用支持最多64个共享配置。 从API版本26.0.0开始,支持发布多值类型配置,一个uri只能对应一种值类型。且配置发布后不允许使用publish更新已发布的多值类型uri。多值类型的相关接口请见putValue、removeValue、getValues。 ![]() ![]() | |||
| 295 | + | ||
| 296 | +发布后,发布者和允许列表中指定的应用可以访问该共享配置项。 | ||
| 297 | + | ||
| 298 | +如果要发布的URI已经存在,则更新对应的共享配置项。如果发布的配置项中存在任一URI的长度超出上限或者格式校验失败,则当前发布操作失败。 | ||
| 299 | + | ||
| 300 | +只有发布者才允许更新共享配置项。 | ||
| 301 | + | ||
| 302 | +API版本26.0.0之前,每个应用支持最多32个共享配置;从API版本26.0.0开始,每个应用支持最多64个共享配置。 | ||
| 303 | + | ||
| 304 | +从API版本26.0.0开始,支持发布多值类型配置,一个uri只能对应一种值类型。且配置发布后不允许使用publish更新已发布的多值类型uri。多值类型的操作接口见[putValue](#putvalue),[removeValue](#removevalue)和[getValues](#getvalues)。 | ||
| 291 | 305 | ||
| 292 | **系统能力:** SystemCapability.DistributedDataManager.DataShare.Consumer | 306 | **系统能力:** SystemCapability.DistributedDataManager.DataShare.Consumer |
| 293 | 307 | ||
| @@ -475,4 +489,206 @@ dataProxyHandle.get(urisToGet, config).then((results: dataShare.DataProxyGetResu | |||
| 475 | }).catch((error: BusinessError) => { | 489 | }).catch((error: BusinessError) => { |
| 476 | console.error(`Failed to get config. code: ${error.code}, message: ${error.message}`); | 490 | console.error(`Failed to get config. code: ${error.code}, message: ${error.message}`); |
| 477 | }); | 491 | }); |
| 492 | +``` | ||
| 493 | + | ||
| 494 | +### putValue | ||
| 495 | + | ||
| 496 | +putValue(uri: string, key: number, value: ValueType, config: DataProxyConfig): Promise<void> | ||
| 497 | + | ||
| 498 | +将一个值写入到已发布的数据中。该操作仅支持对多值类型数据执行。使用Promise异步回调。 | ||
| 499 | + | ||
| 500 | +若传入的key不存在,则添加新的值;若传入的key已存在,则更新该key对应的值。 | ||
| 501 | + | ||
| 502 | +默认情况下,单条数据(即URI)在单个应用中最多可添加10个值,每个值最大长度为4096字节。同时,单条数据(即一个URI)在单次应用中所有值总长度受限于数据[publish](#publish20)时指定的maxValueLength参数值。 | ||
| 503 | + | ||
| 504 | +**起始版本:** 26.0.0 | ||
模型约束为啥不加啊,不是有李珍的评论意见吗 ![]() ![]() | |||
| 505 | + | ||
| 506 | +**系统能力:** SystemCapability.DistributedDataManager.DataShare.Consumer | ||
模型约束加一下 ![]() ![]() | |||
| 507 | + | ||
| 508 | +**参数:** | ||
| 509 | + | ||
| 510 | +| 参数名 | 类型 | 必填 | 说明 | | ||
| 511 | +| -------- | ----------------------------- | ---- | ------------------------ | | ||
| 512 | +| uri | string | 是 | 要操作的数据所对应的URI。固定格式为`"datashareproxy://{bundleName}/{path}"`,其中bundleName为配置发布方应用的bundleName,path可随意填写,但同一应用内不允许重复,字符串长度不超过256个字节。 | | ||
| 513 | +| key | number | 是 | 添加的值所对应的Key,对同一个应用来说是唯一的。<br>取值范围为全体整数。 | | ||
| 514 | +| value | [ValueType](js-apis-data-valuesBucket.md#valuetype) | 是 | 待添加的值。| | ||
| 515 | +| config | [DataProxyConfig](#dataproxyconfig20) | 是 | 表示数据代理操作的配置。配置中maxValueLength参数不生效。 | | ||
| 516 | + | ||
| 517 | +**返回值:** | ||
| 518 | + | ||
| 519 | +| 类型 | 说明 | | ||
| 520 | +| ---------------- | ------------------------------------------------------------ | | ||
| 521 | +| Promise<void> | Promise对象,无返回结果。 | | ||
| 522 | + | ||
| 523 | +**错误码:** | ||
| 524 | + | ||
| 525 | +以下错误码的详细介绍请参见[数据共享错误码](errorcode-datashare.md)。 | ||
| 526 | + | ||
| 527 | +| 错误码ID | 错误信息 | | ||
| 528 | +| -------- | -------------------- | | ||
| 529 | +| 15700000 | Inner error. Possible causes: The service is not ready or is being restarted abnormally. | | ||
| 530 | +| 15700011 | The URI does not exist. | | ||
| 531 | +| 15700014 | The parameter format is incorrect or the value range is invalid. | | ||
| 532 | +| 15700015 | No permission to access the data specified by the URI. | | ||
| 533 | + | ||
| 534 | +**示例:** | ||
| 535 | + | ||
| 536 | +```ts | ||
| 537 | +const config: dataShare.DataProxyConfig = { | ||
| 538 | + type: dataShare.DataProxyType.SHARED_CONFIG, | ||
| 539 | +}; | ||
| 540 | +let testUri: string = 'datashareproxy://com.test.dataproxyhandle/test/pv/001'; | ||
| 541 | +let newConfigData: dataShare.ProxyData[] = [{ | ||
| 542 | + uri: testUri, | ||
| 543 | + values: { 0: 'init' }, | ||
| 544 | + isMultiValues: true, | ||
| 545 | + allowList: [], | ||
| 546 | + trustProviders: [] | ||
| 547 | +}]; | ||
| 548 | + | ||
| 549 | +await dataProxyHandle?.publish(newConfigData, config).then((results: dataShare.DataProxyResult[]) => { | ||
| 550 | + results.forEach((result) => { | ||
| 551 | + console.info(`URI: ${result.uri}, Result: ${result.result}`); | ||
| 552 | + }); | ||
| 553 | +}).catch((error: BusinessError) => { | ||
| 554 | + console.error(`Failed to publish config. code: ${error.code}, message: ${error.message}`); | ||
| 555 | +}); | ||
| 556 | + | ||
| 557 | +try { | ||
| 558 | + await dataProxyHandle?.putValue(testUri, 1, 'hello', config); | ||
| 559 | + console.info(`putValue success`); | ||
| 560 | +} catch (error) { | ||
| 561 | + console.error(`putValue failed: code: ${error.code}, message: ${error.message}`); | ||
| 562 | +} | ||
| 563 | +``` | ||
| 564 | + | ||
| 565 | +### removeValue | ||
| 566 | + | ||
| 567 | +removeValue(uri: string, key: number, config: DataProxyConfig): Promise<void> | ||
| 568 | + | ||
| 569 | +移除键对应的值。该操作仅能对多值类型数据执行。仅能移除本应用添加过的值。使用Promise异步回调。 | ||
| 570 | + | ||
| 571 | +**起始版本:** 26.0.0 | ||
| 572 | + | ||
| 573 | +**系统能力:** SystemCapability.DistributedDataManager.DataShare.Consumer | ||
模型约束加一下 ![]() ![]() | |||
| 574 | + | ||
| 575 | +**参数:** | ||
| 576 | + | ||
| 577 | +| 参数名 | 类型 | 必填 | 说明 | | ||
| 578 | +| -------- | ----------------------------- | ---- | ------------------------ | | ||
| 579 | +| uri | string | 是 | 要操作的数据所对应的URI。固定格式为`"datashareproxy://{bundleName}/{path}"`,其中bundleName为配置发布方应用的bundleName,path可随意填写,但同一应用内不允许重复,字符串长度不超过256个字节。 | | ||
| 580 | +| key | number | 是 | 添加的值所对应的Key。 <br>取值范围为全体整数。 | | ||
| 581 | +| config | [DataProxyConfig](#dataproxyconfig20) | 是 | 表示数据代理操作的配置。 | | ||
| 582 | + | ||
| 583 | +**返回值:** | ||
| 584 | + | ||
| 585 | +| 类型 | 说明 | | ||
| 586 | +| ---------------- | ------------------------------------------------------------ | | ||
| 587 | +| Promise<void> | Promise对象,无返回结果。 | | ||
| 588 | + | ||
| 589 | +**错误码:** | ||
| 590 | + | ||
| 591 | +以下错误码的详细介绍请参见[数据共享错误码](errorcode-datashare.md)。 | ||
| 592 | + | ||
| 593 | +| 错误码ID | 错误信息 | | ||
| 594 | +| -------- | -------------------- | | ||
| 595 | +| 15700000 | Inner error. Possible causes: The service is not ready or is being restarted abnormally. | | ||
| 596 | +| 15700011 | The URI does not exist. | | ||
| 597 | +| 15700014 | The parameter format is incorrect or the value range is invalid. | | ||
| 598 | +| 15700015 | No permission to access the data specified by the URI. | | ||
| 599 | + | ||
| 600 | +**示例:** | ||
| 601 | + | ||
| 602 | +```ts | ||
| 603 | +const config: dataShare.DataProxyConfig = { | ||
| 604 | + type: dataShare.DataProxyType.SHARED_CONFIG, | ||
| 605 | +}; | ||
| 606 | +let testUri: string = 'datashareproxy://com.test.dataproxyhandle/test/pv/001'; | ||
| 607 | +let newConfigData: dataShare.ProxyData[] = [{ | ||
| 608 | + uri: testUri, | ||
| 609 | + values: { 0: 'init' }, | ||
| 610 | + isMultiValues: true, | ||
| 611 | + allowList: [], | ||
| 612 | + trustProviders: [] | ||
| 613 | +}]; | ||
| 614 | + | ||
| 615 | +await dataProxyHandle?.publish(newConfigData, config).then((results: dataShare.DataProxyResult[]) => { | ||
| 616 | + results.forEach((result) => { | ||
| 617 | + console.info(`URI: ${result.uri}, Result: ${result.result}`); | ||
| 618 | + }); | ||
| 619 | +}).catch((error: BusinessError) => { | ||
| 620 | + console.error(`Failed to publish config. code: ${error.code}, message: ${error.message}`); | ||
| 621 | +}); | ||
| 622 | + | ||
| 623 | +try { | ||
| 624 | + await dataProxyHandle?.removeValue(testUri, 0, config); | ||
| 625 | + console.info(`removeValue success`); | ||
| 626 | +} catch (error) { | ||
| 627 | + console.error(`removeValue failed: code: ${error.code}, message: ${error.message}`); | ||
| 628 | +} | ||
| 629 | +``` | ||
| 630 | + | ||
| 631 | +### getValues | ||
| 632 | + | ||
| 633 | +getValues(uri: string, config: DataProxyConfig): Promise<ValueType[]> | ||
| 634 | + | ||
| 635 | +获取指定URI下的所有多值类型数据。只有发布者和位于[allowList](#proxydata20)中的应用程序才能获取此数据。使用Promise异步回调。 | ||
| 636 | + | ||
| 637 | +**起始版本:** 26.0.0 | ||
| 638 | + | ||
| 639 | +**系统能力:** SystemCapability.DistributedDataManager.DataShare.Consumer | ||
| 640 | + | ||
模型约束加一下,都涉及的,排查接口都添加一下 ![]() ![]() | |||
| 641 | +**参数:** | ||
| 642 | + | ||
| 643 | +| 参数名 | 类型 | 必填 | 说明 | | ||
| 644 | +| -------- | ----------------------------- | ---- | ------------------------ | | ||
| 645 | +| uri | string | 是 | 要操作的数据所对应的URI。固定格式为`"datashareproxy://{bundleName}/{path}"`,其中bundleName为配置发布方应用的bundleName,path可随意填写,但同一应用内不允许重复,字符串长度不超过256个字节。 | | ||
| 646 | +| config | [DataProxyConfig](#dataproxyconfig20) | 是 | 表示数据代理操作的配置。 | | ||
| 647 | + | ||
| 648 | +**返回值:** | ||
| 649 | + | ||
| 650 | +| 类型 | 说明 | | ||
| 651 | +| ---------------- | ------------------------------------------------------------ | | ||
| 652 | +| Promise<[ValueType](js-apis-data-valuesBucket.md#valuetype)[]> | Promise对象,返回URI下所有值的数组。 | | ||
| 653 | + | ||
| 654 | +**错误码:** | ||
| 655 | + | ||
| 656 | +以下错误码的详细介绍请参见[数据共享错误码](errorcode-datashare.md)。 | ||
| 657 | + | ||
| 658 | +| 错误码ID | 错误信息 | | ||
| 659 | +| -------- | -------------------- | | ||
| 660 | +| 15700000 | Inner error. Possible causes: The service is not ready or is being restarted abnormally. | | ||
| 661 | +| 15700011 | The URI does not exist. | | ||
| 662 | +| 15700014 | The parameter format is incorrect or the value range is invalid. | | ||
| 663 | +| 15700015 | No permission to access the data specified by the URI. | | ||
| 664 | + | ||
| 665 | +**示例:** | ||
| 666 | + | ||
| 667 | +```ts | ||
| 668 | +const config: dataShare.DataProxyConfig = { | ||
| 669 | + type: dataShare.DataProxyType.SHARED_CONFIG, | ||
| 670 | +}; | ||
| 671 | +let testUri: string = 'datashareproxy://com.test.dataproxyhandle/test/pv/001'; | ||
| 672 | +let newConfigData: dataShare.ProxyData[] = [{ | ||
| 673 | + uri: testUri, | ||
| 674 | + values: { 0: 'init' }, | ||
| 675 | + isMultiValues: true, | ||
| 676 | + allowList: [], | ||
| 677 | + trustProviders: [] | ||
| 678 | +}]; | ||
| 679 | + | ||
| 680 | +await dataProxyHandle!.publish(newConfigData, config).then((results: dataShare.DataProxyResult[]) => { | ||
| 681 | + results.forEach((result) => { | ||
| 682 | + console.info(`URI: ${result.uri}, Result: ${result.result}`); | ||
| 683 | + }); | ||
| 684 | +}).catch((error: BusinessError) => { | ||
| 685 | + console.error(`Failed to publish config. code: ${error.code}, message: ${error.message}`); | ||
| 686 | +}); | ||
| 687 | + | ||
| 688 | +try { | ||
| 689 | + let result: ValueType[] = await dataProxyHandle?.getValues(testUri, config); | ||
| 690 | + console.info(`getValues success. Values: ` + JSON.stringify(result)); | ||
| 691 | +} catch (error) { | ||
| 692 | + console.error(`getValues failed: code: ${error.code}, message: ${error.message}`); | ||
| 693 | +} | ||
| 478 | ``` | 694 | ``` |




加一下模型约束