已合并
配置共享支持多值配置 #148190
archane创建于 6月2日
配置共享支持多值配置 #148190
已合并
archane创建于 6月2日
2 个文件变更+236-2
@@ -149,4 +149,22 @@ The parameter format is incorrect or the value range is invalid.
1494. 检查接口传入的proxyData数组的长度是否超过32。1494. 检查接口传入的proxyData数组的长度是否超过32。
150 150 
1515. 检查接口传入的URI数组或者proxyData数组中的URI是否满足格式校验:<br/>1515. 检查接口传入的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&lt;number, [ValueType](js-apis-data-valuesBucket.md#valuetype)&gt; | 否 | 是 | 多值类型取值。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 |
李珍
李珍李珍6月4日

加一下模型约束

likedislike
archane
archane
6月4日 评论:
98 102 
99## DataProxyErrorCode<sup>20+</sup>103## DataProxyErrorCode<sup>20+</sup>
100 104 
@@ -287,7 +291,17 @@ results.forEach((result) => {
287 291 
288publish(data: ProxyData[], config: DataProxyConfig): Promise&lt;DataProxyResult[]&gt;292publish(data: ProxyData[], config: DataProxyConfig): Promise&lt;DataProxyResult[]&gt;
289 293 
290-发布共享配置项。使用Promise异步回调。发布后,发布者和允许列表中指定的应用可以访问该共享配置项。如果要发布的URI已经存在,则更新对应的共享配置项。如果发布的配置项中存在任一URI的长度超出上限或者格式校验失败,则当前发布操作失败。只有发布者才允许更新共享配置项。API版本26.0.0之前,每个应用支持最多32个共享配置;从API版本26.0.0开始,每个应用支持最多64个共享配置。294+发布共享配置项。使用Promise异步回调。
葛亚芳
葛亚芳葛亚芳6月5日
已过期

要命啊,这一大堆,适当换下行吧

image.png

改为:

发布共享配置项。使用Promise异步回调。

发布后,发布者和允许列表中指定的应用可以访问该共享配置项。

如果要发布的URI已经存在,则更新对应的共享配置项。如果发布的配置项中存在任一URI的长度超出上限或者格式校验失败,则当前发布操作失败。

只有发布者才允许更新共享配置项。

API版本26.0.0之前,每个应用支持最多32个共享配置;从API版本26.0.0开始,每个应用支持最多64个共享配置。

从API版本26.0.0开始,支持发布多值类型配置,一个uri只能对应一种值类型。且配置发布后不允许使用publish更新已发布的多值类型uri。多值类型的相关接口请见putValueremoveValuegetValues

likedislike
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.Consumer306**系统能力:** 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&lt;void&gt;
497+ 
498+将一个值写入到已发布的数据中。该操作仅支持对多值类型数据执行。使用Promise异步回调。
499+ 
500+若传入的key不存在,则添加新的值;若传入的key已存在,则更新该key对应的值。
501+ 
502+默认情况下,单条数据(即URI)在单个应用中最多可添加10个值,每个值最大长度为4096字节。同时,单条数据(即一个URI)在单次应用中所有值总长度受限于数据[publish](#publish20)时指定的maxValueLength参数值。
503+ 
504+**起始版本:** 26.0.0
葛亚芳
葛亚芳葛亚芳6月5日

模型约束为啥不加啊,不是有李珍的评论意见吗

likedislike
505+ 
506+**系统能力:** SystemCapability.DistributedDataManager.DataShare.Consumer
李珍
李珍李珍6月4日

模型约束加一下image.png

likedislike
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&lt;void&gt; | 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&lt;void&gt;
568+ 
569+移除键对应的值。该操作仅能对多值类型数据执行。仅能移除本应用添加过的值。使用Promise异步回调。
570+ 
571+**起始版本:** 26.0.0
572+ 
573+**系统能力:** SystemCapability.DistributedDataManager.DataShare.Consumer
李珍
李珍李珍6月4日

模型约束加一下

likedislike
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&lt;void&gt; | 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&lt;ValueType[]&gt;
634+ 
635+获取指定URI下的所有多值类型数据。只有发布者和位于[allowList](#proxydata20)中的应用程序才能获取此数据。使用Promise异步回调。
636+ 
637+**起始版本:** 26.0.0
638+ 
639+**系统能力:** SystemCapability.DistributedDataManager.DataShare.Consumer
640+ 
李珍
李珍李珍6月4日

模型约束加一下,都涉及的,排查接口都添加一下

likedislike
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&lt;[ValueType](js-apis-data-valuesBucket.md#valuetype)[]&gt; | 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```