• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# @ohos.data.distributedDataObject (分布式数据对象)
2
3本模块提供管理基本数据对象的相关能力,包括创建、查询、删除、修改、订阅等;同时支持相同应用多设备间的分布式数据对象协同能力。
4
5> **说明:**
6>
7> 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
8
9
10## 导入模块
11
12```ts
13import distributedObject from '@ohos.data.distributedDataObject';
14```
15
16## distributedObject.create<sup>9+</sup>
17
18create(context: Context, source: object): DataObject
19
20创建一个分布式数据对象。
21
22**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject
23
24**参数:**
25
26  | 参数名 | 类型 | 必填 | 说明 |
27  | -------- | -------- | -------- | -------- |
28  | context | Context | 是 | 应用的上下文。 <br>FA模型的应用Context定义见[Context](../apis-ability-kit/js-apis-inner-app-context.md)。<br>Stage模型的应用Context定义见[Context](../apis-ability-kit/js-apis-inner-application-uiAbilityContext.md)。 |
29  | source | object | 是 | 设置分布式数据对象的属性。 |
30
31**返回值:**
32
33| 类型 | 说明 |
34| -------- | -------- |
35| [DataObject](#dataobject) | 创建完成的分布式数据对象。 |
36
37**示例:**
38
39FA模型示例:
40
41```ts
42// 导入模块
43import distributedObject from '@ohos.data.distributedDataObject';
44import featureAbility from '@ohos.ability.featureAbility';
45import { BusinessError } from '@ohos.base';
46// 获取context
47let context = featureAbility.getContext();
48class SourceObject {
49    name: string
50    age: number
51    isVis: boolean
52
53    constructor(name: string, age: number, isVis: boolean) {
54        this.name = name
55        this.age = age
56        this.isVis = isVis
57    }
58}
59
60let source: SourceObject = new SourceObject("jack", 18, false);
61let g_object: distributedObject.DataObject = distributedObject.create(context, source);
62```
63
64Stage模型示例:
65
66```ts
67// 导入模块
68import distributedObject from '@ohos.data.distributedDataObject';
69import UIAbility from '@ohos.app.ability.UIAbility';
70import { BusinessError } from '@ohos.base';
71import window from '@ohos.window';
72
73let g_object: distributedObject.DataObject|null = null;
74class SourceObject {
75    name: string
76    age: number
77    isVis: boolean
78
79    constructor(name: string, age: number, isVis: boolean) {
80        this.name = name
81        this.age = age
82        this.isVis = isVis
83    }
84}
85
86class EntryAbility extends UIAbility {
87    onWindowStageCreate(windowStage: window.WindowStage) {
88        let source: SourceObject = new SourceObject("jack", 18, false);
89        g_object = distributedObject.create(this.context, source);
90    }
91}
92```
93
94## distributedObject.genSessionId
95
96genSessionId(): string
97
98随机创建一个sessionId。
99
100**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject
101
102**返回值:**
103
104  | 类型 | 说明 |
105  | -------- | -------- |
106  | string | 随机创建的sessionId。 |
107
108**示例:**
109
110```ts
111import distributedObject from '@ohos.data.distributedDataObject';
112let sessionId: string = distributedObject.genSessionId();
113```
114
115## SaveSuccessResponse<sup>9+</sup>
116
117[save](#save9)接口回调信息。
118
119**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject
120
121| 名称 | 类型 | 必填 | 说明 |
122| -------- | -------- | -------- | -------- |
123| sessionId | string | 是 | 多设备协同的唯一标识。 |
124| version | number | 是 | 已保存对象的版本。 |
125| deviceId | string | 是 | 存储数据的设备号,标识需要保存对象的设备。"local"表示本地设备,否则表示其他设备的设备号。 |
126
127## RevokeSaveSuccessResponse<sup>9+</sup>
128
129[revokeSave](#revokesave9)接口回调信息。
130
131**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject
132
133| 名称 | 类型 | 必填 | 说明 |
134| -------- | -------- | -------- | -------- |
135| sessionId | string | 是 | 多设备协同的唯一标识。 |
136
137## BindInfo<sup>11+</sup>
138
139数据库的绑定信息。当前版本只支持关系型数据库。
140
141**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject
142
143**参数:**
144
145  | 名称       | 类型                                                                 | 必填 | 说明                                 |
146  | ---------- | -------------------------------------------------------------------- | ---- | ------------------------------------ |
147  | storeName  | string                                                               | 是   | 待绑定资产在所属的数据库中的库名。   |
148  | tableName  | string                                                               | 是   | 待绑定资产在所属的数据库中的表名。   |
149  | primaryKey | [CommonType.ValuesBucket](js-apis-data-commonType.md#valuesbucket) | 是   | 待绑定资产在所属的数据库中的主键。   |
150  | field      | string                                                               | 是   | 待绑定资产在所属的数据库中的列名。   |
151  | assetName  | string                                                               | 是   | 待绑定资产在所属的数据库中的资产名。 |
152
153## DataObject
154
155表示一个分布式数据对象。在使用以下接口前,需调用[create()](#distributedobjectcreate9)获取DataObject对象。
156
157### setSessionId<sup>9+</sup>
158
159setSessionId(sessionId: string, callback: AsyncCallback&lt;void&gt;): void
160
161设置sessionId,使用callback方式异步回调。当可信组网中有多个设备时,多个设备间的对象如果设置为同一个sessionId,就能自动同步。
162
163**需要权限:** ohos.permission.DISTRIBUTED_DATASYNC164
165**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject
166
167**参数:**
168
169  | 参数名 | 类型 | 必填 | 说明 |
170  | -------- | -------- | -------- | -------- |
171  | sessionId | string | 是 | 分布式数据对象在可信组网中的标识ID。设置为""时表示退出分布式组网。|
172  | callback | AsyncCallback&lt;void&gt; | 是 | 加入session的异步回调。|
173
174**错误码:**
175
176  以下错误码的详细介绍参见[分布式数据对象错误码](errorcode-distributed-dataObject.md)。
177
178  | 错误码ID | 错误信息 |
179  | -------- | -------- |
180  | 15400001 | Create table failed.|
181
182**示例:**
183
184```ts
185// g_object加入分布式组网
186g_object.setSessionId(distributedObject.genSessionId(), ()=>{
187    console.info("join session");
188});
189// g_object退出分布式组网
190g_object.setSessionId("", ()=>{
191    console.info("leave all session");
192});
193```
194
195### setSessionId<sup>9+</sup>
196
197setSessionId(callback: AsyncCallback&lt;void&gt;): void
198
199退出所有已加入的session,使用callback方式异步回调。
200
201**需要权限:** ohos.permission.DISTRIBUTED_DATASYNC202
203**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject
204
205**参数:**
206
207  | 参数名 | 类型 | 必填 | 说明 |
208  | -------- | -------- | -------- | -------- |
209  | callback | AsyncCallback&lt;void&gt; | 是 | 退出所有已加入session的异步回调。 |
210
211**错误码:**
212
213  以下错误码的详细介绍参见[分布式数据对象错误码](errorcode-distributed-dataObject.md)。
214
215  | 错误码ID | 错误信息 |
216  | -------- | -------- |
217  | 15400001 | Create table failed.|
218
219**示例:**
220
221```ts
222// g_object加入分布式组网
223g_object.setSessionId(distributedObject.genSessionId(), ()=>{
224    console.info("join session");
225});
226// 退出分布式组网
227g_object.setSessionId(() => {
228    console.info("leave all session.");
229});
230```
231
232### setSessionId<sup>9+</sup>
233
234setSessionId(sessionId?: string): Promise&lt;void&gt;
235
236设置sessionId,使用Promise异步返回。当可信组网中有多个设备时,多个设备间的对象如果设置为同一个sessionId,就能自动同步。
237
238**需要权限:** ohos.permission.DISTRIBUTED_DATASYNC239
240**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject
241
242**参数:**
243
244  | 参数名 | 类型 | 必填 | 说明 |
245  | -------- | -------- | -------- | -------- |
246  | sessionId | string | 否 | 分布式数据对象在可信组网中的标识ID。如果要退出分布式组网,设置为""或不设置均可。 |
247
248**返回值:**
249
250| 类型 | 说明 |
251| -------- | -------- |
252| Promise&lt;void&gt; | Promise对象。|
253
254**错误码:**
255
256  以下错误码的详细介绍参见[分布式数据对象错误码](errorcode-distributed-dataObject.md)。
257
258  | 错误码ID | 错误信息 |
259  | -------- | -------- |
260  | 15400001 | Create table failed.|
261
262**示例:**
263
264```ts
265// g_object加入分布式组网
266g_object.setSessionId(distributedObject.genSessionId()).then (()=>{
267    console.info("join session.");
268    }).catch((error: BusinessError)=>{
269        console.info("error:" + error.code + error.message);
270});
271// 退出分布式组网
272g_object.setSessionId().then (()=>{
273    console.info("leave all session.");
274    }).catch((error: BusinessError)=>{
275        console.info("error:" + error.code + error.message);
276});
277```
278
279### on('change')<sup>9+</sup>
280
281on(type: 'change', callback: (sessionId: string, fields: Array&lt;string&gt;) => void): void
282
283监听分布式数据对象的数据变更。
284
285**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject
286
287**参数:**
288
289| 参数名 | 类型 | 必填 | 说明 |
290| -------- | -------- | -------- | -------- |
291| type | string | 是 | 事件类型,固定为'change',表示数据变更。 |
292| callback | Function | 是 | 变更回调对象实例。<br>sessionId:标识变更对象的sessionId; <br>fields:标识对象变更的属性名。 |
293
294**示例:**
295
296```ts
297g_object.on("change", (sessionId: string, fields: Array<string>) => {
298    console.info("change" + sessionId);
299    if (g_object != null && fields != null && fields != undefined) {
300        for (let index: number = 0; index < fields.length; index++) {
301            console.info("changed !" + fields[index] + " " + g_object[fields[index]]);
302        }
303    }
304});
305```
306
307### off('change')<sup>9+</sup>
308
309off(type: 'change', callback?: (sessionId: string, fields: Array&lt;string&gt;) => void): void
310
311当不再进行数据变更监听时,使用此接口删除对象的变更监听。
312
313**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject
314
315**参数:**
316
317| 参数名 | 类型 | 必填 | 说明 |
318| -------- | -------- | -------- | -------- |
319| type | string | 是 | 事件类型,固定为'change',表示数据变更。 |
320| callback | Function | 否 | 需要删除的数据变更回调,若不设置则删除该对象所有的数据变更回调。<br>sessionId:标识变更对象的sessionId; <br>fields:标识对象变更的属性名。 |
321
322
323**示例:**
324
325```ts
326// 删除数据变更回调changeCallback
327g_object.off("change", (sessionId: string, fields: Array<string>) => {
328    console.info("change" + sessionId);
329    if (g_object != null && fields != null && fields != undefined) {
330        for (let index: number = 0; index < fields.length; index++) {
331            console.info("changed !" + fields[index] + " " + g_object[fields[index]]);
332        }
333    }
334});
335// 删除所有的数据变更回调
336g_object.off("change");
337```
338
339### on('status')<sup>9+</sup>
340
341on(type: 'status', callback: (sessionId: string, networkId: string, status: 'online' \| 'offline' ) => void): void
342
343监听分布式数据对象的上下线。
344
345**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject
346
347**参数:**
348
349| 参数名 | 类型 | 必填 | 说明 |
350| -------- | -------- | -------- | -------- |
351| type | string | 是 | 事件类型,固定为'status',表示对象上下线。 |
352| callback | Function | 是 | 监听上下线回调实例。<br>sessionId:标识变更对象的sessionId; <br>networkId:标识对象设备; <br>status:标识对象为'online'(上线)或'offline'(下线)的状态。 |
353
354**示例:**
355
356```ts
357g_object.on("status", (sessionId: string, networkId: string, status: 'online' | 'offline') => {
358    console.info("status changed " + sessionId + " " + status + " " + networkId);
359});
360```
361
362### off('status')<sup>9+</sup>
363
364off(type: 'status', callback?:(sessionId: string, networkId: string, status: 'online' \| 'offline') => void): void
365
366当不再进行对象上下线监听时,使用此接口删除对象的上下线监听。
367
368**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject
369
370**参数:**
371
372| 参数名 | 类型 | 必填 | 说明 |
373| -------- | -------- | -------- | -------- |
374| type | string | 是 | 事件类型,固定为'status',表示对象上下线。 |
375| callback | Function | 否 | 需要删除的上下线回调,若不设置则删除该对象所有的上下线回调。<br>sessionId:标识变更对象的sessionId; <br>networkId:标识变更对象; <br>status:标识对象为'online'(上线)或'offline'(下线)的状态。 |
376
377
378**示例:**
379
380```ts
381// 删除上下线回调changeCallback
382g_object.off("status", (sessionId: string, networkId: string, status: 'online' | 'offline') => {
383    console.info("status changed " + sessionId + " " + status + " " + networkId);
384});
385// 删除所有的上下线回调
386g_object.off("status");
387```
388
389### save<sup>9+</sup>
390
391save(deviceId: string, callback: AsyncCallback&lt;SaveSuccessResponse&gt;): void
392
393保存分布式数据对象。使用callback方式异步回调。
394
395对象数据保存成功后,当应用存在时不会释放对象数据,当应用退出后,重新进入应用时,恢复保存在设备上的数据。
396
397有以下几种情况时,保存的数据将会被释放:
398
399- 存储时间超过24小时。
400- 应用卸载。
401- 成功恢复数据之后。
402
403**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject
404
405**参数:**
406
407  | 参数名 | 类型 | 必填 | 说明 |
408  | -------- | -------- | -------- | -------- |
409  | deviceId | string | 是 | 保存数据的deviceId,当deviceId为"local",代表存储在本地设备。 |
410  | callback | AsyncCallback&lt;[SaveSuccessResponse](#savesuccessresponse9)&gt; | 是 | 回调函数。返回SaveSuccessResponse,包含sessionId、version、deviceId等信息。 |
411
412**示例:**
413
414```ts
415g_object.setSessionId("123456");
416g_object.save("local", (err: BusinessError, result:distributedObject.SaveSuccessResponse) => {
417    if (err) {
418        console.info("save failed, error code = " + err.code);
419        console.info("save failed, error message: " + err.message);
420        return;
421    }
422    console.info("save callback");
423    console.info("save sessionId: " + result.sessionId);
424    console.info("save version: " + result.version);
425    console.info("save deviceId:  " + result.deviceId);
426});
427```
428
429### save<sup>9+</sup>
430
431save(deviceId: string): Promise&lt;SaveSuccessResponse&gt;
432
433保存分布式数据对象。使用Promise方式作为异步回调。
434
435对象数据保存成功后,当应用存在时不会释放对象数据,当应用退出后,重新进入应用时,恢复保存在设备上的数据。
436
437有以下几种情况时,保存的数据将会被释放:
438
439- 存储时间超过24小时。
440- 应用卸载。
441- 成功恢复数据之后。
442
443**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject
444
445**参数:**
446
447  | 参数名 | 类型 | 必填 | 说明 |
448  | -------- | -------- | -------- | -------- |
449  | deviceId | string | 是 | 保存数据的设备号,当deviceId默认为"local",标识需要保存对象的设备。 |
450
451**返回值:**
452
453  | 类型 | 说明 |
454  | -------- | -------- |
455  | Promise&lt;[SaveSuccessResponse](#savesuccessresponse9)&gt; | Promise对象。返回SaveSuccessResponse,包含sessionId、version、deviceId等信息。|
456
457**示例:**
458
459```ts
460g_object.setSessionId("123456");
461g_object.save("local").then((result: distributedObject.SaveSuccessResponse) => {
462    console.info("save callback");
463    console.info("save sessionId " + result.sessionId);
464    console.info("save version " + result.version);
465    console.info("save deviceId " + result.deviceId);
466}).catch((err: BusinessError) => {
467    console.info("save failed, error code = " + err.code);
468    console.info("save failed, error message: " + err.message);
469});
470```
471
472### revokeSave<sup>9+</sup>
473
474revokeSave(callback: AsyncCallback&lt;RevokeSaveSuccessResponse&gt;): void
475
476撤回保存的分布式数据对象。使用callback方式作为异步方法。
477
478如果对象保存在本地设备,那么将删除所有受信任设备上所保存的数据。
479如果对象保存在其他设备,那么将删除本地设备上的数据。
480
481**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject
482
483**参数:**
484
485  | 参数名 | 类型 | 必填 | 说明 |
486  | -------- | -------- | -------- | -------- |
487  | callback | AsyncCallback&lt;[RevokeSaveSuccessResponse](#revokesavesuccessresponse9)&gt; | 是 | 回调函数。返回RevokeSaveSuccessResponse,包含sessionId。 |
488
489**示例:**
490
491```ts
492g_object.setSessionId("123456");
493// 持久化数据
494g_object.save("local", (err: BusinessError, result: distributedObject.SaveSuccessResponse) => {
495    if (err) {
496        console.info("save failed, error code = " + err.code);
497        console.info("save failed, error message: " + err.message);
498        return;
499    }
500    console.info("save callback");
501    console.info("save sessionId: " + result.sessionId);
502    console.info("save version: " + result.version);
503    console.info("save deviceId:  " + result.deviceId);
504});
505// 删除持久化保存的数据
506g_object.revokeSave((err: BusinessError, result: distributedObject.RevokeSaveSuccessResponse) => {
507    if (err) {
508      console.info("revokeSave failed, error code = " + err.code);
509      console.info("revokeSave failed, error message: " + err.message);
510      return;
511    }
512    console.info("revokeSave callback");
513    console.info("revokeSave sessionId " + result.sessionId);
514});
515```
516
517### revokeSave<sup>9+</sup>
518
519revokeSave(): Promise&lt;RevokeSaveSuccessResponse&gt;
520
521撤回保存的分布式数据对象。使用Promise方式作为异步方法。
522
523如果对象保存在本地设备,那么将删除所有受信任设备上所保存的数据。
524如果对象保存在其他设备,那么将删除本地设备上的数据。
525
526**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject
527
528**返回值:**
529
530  | 类型 | 说明 |
531  | -------- | -------- |
532  | Promise&lt;[RevokeSaveSuccessResponse](#revokesavesuccessresponse9)&gt; | Promise对象。返回RevokeSaveSuccessResponse,包含sessionId。 |
533
534**示例:**
535
536```ts
537g_object.setSessionId("123456");
538// 持久化数据
539g_object.save("local").then((result: distributedObject.SaveSuccessResponse) => {
540    console.info("save callback");
541    console.info("save sessionId " + result.sessionId);
542    console.info("save version " + result.version);
543    console.info("save deviceId " + result.deviceId);
544}).catch((err: BusinessError) => {
545    console.info("save failed, error code = " + err.code);
546    console.info("save failed, error message: " + err.message);
547});
548// 删除持久化保存的数据
549g_object.revokeSave().then((result: distributedObject.RevokeSaveSuccessResponse) => {
550    console.info("revokeSave callback");
551    console.info("sessionId" + result.sessionId);
552}).catch((err: BusinessError)=> {
553    console.info("revokeSave failed, error code = " + err.code);
554    console.info("revokeSave failed, error message = " + err.message);
555});
556```
557
558### bindAssetStore<sup>11+</sup>
559
560bindAssetStore(assetKey: string, bindInfo: BindInfo, callback: AsyncCallback&lt;void&gt;): void
561
562绑定分布式对象中的单个资产与其对应的数据库信息,当前版本只支持分布式对象中的资产与关系型数据库的绑定。使用callback方式异步回调。
563
564当分布式对象中包含的资产和关系型数据库中包含的资产指向同一个实体资产文件,即两个资产的Uri相同时,就会存在冲突,我们把这种资产称为融合资产。如果需要分布式数据管理进行融合资产的冲突解决,需要先进行资产的绑定。当应用退出session后,绑定关系随之消失。
565
566**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject
567
568**参数:**
569
570  | 参数名   | 类型                      | 必填 | 说明                                                                               |
571  | -------- | ------------------------- | ---- | ---------------------------------------------------------------------------------- |
572  | assetKey | string                    | 是   | 待绑定的融合资产在分布式对象中的键值。                                             |
573  | bindInfo | [BindInfo](#bindinfo11)   | 是   | 待绑定的融合资产在数据库中的信息,包含库名、表名、主键、列名及在数据库中的资产名。 |
574  | callback | AsyncCallback&lt;void&gt; | 是   | 绑定数据库的回调。                                                                 |
575
576**示例:**
577
578```ts
579import UIAbility from '@ohos.app.ability.UIAbility';
580import type window from '@ohos.window';
581import distributedObject from '@ohos.data.distributedDataObject';
582import commonType from '@ohos.data.commonType';
583import type { BusinessError } from '@ohos.base';
584
585class Note {
586  title: string | undefined
587  text: string | undefined
588  attachment: commonType.Asset | undefined
589
590  constructor(title: string | undefined, text: string | undefined, attachment: commonType.Asset | undefined) {
591    this.title = title;
592    this.text = text;
593    this.attachment = attachment;
594  }
595}
596
597class EntryAbility extends UIAbility {
598  onWindowStageCreate(windowStage: window.WindowStage) {
599    let attachment: commonType.Asset = {
600      name: 'test_img.jpg',
601      uri: 'file://com.example.myapplication/data/storage/el2/distributedfiles/dir/test_img.jpg',
602      path: '/dir/test_img.jpg',
603      createTime: '2024-01-02 10:00:00',
604      modifyTime: '2024-01-02 10:00:00',
605      size: '5',
606      status: commonType.AssetStatus.ASSET_NORMAL
607    }
608    let note: Note = new Note('test', 'test', attachment);
609    let g_object: distributedObject.DataObject = distributedObject.create(this.context, note);
610    g_object.setSessionId('123456');
611
612    const bindInfo: distributedObject.BindInfo = {
613      storeName: 'notepad',
614      tableName: 'note_t',
615      primaryKey: {
616        'uuid': '00000000-0000-0000-0000-000000000000'
617      },
618      field: 'attachment',
619      assetName: attachment.name
620    }
621
622    g_object.bindAssetStore('attachment', bindInfo, (err: BusinessError) => {
623      if (err) {
624        console.error('bindAssetStore failed.');
625      }
626      console.info('bindAssetStore success.');
627    });
628  }
629}
630```
631
632### bindAssetStore<sup>11+</sup>
633
634bindAssetStore(assetKey: string, bindInfo: BindInfo): Promise&lt;void&gt;
635
636绑定分布式对象中的单个资产与其对应的数据库信息,当前版本只支持分布式对象中的资产与关系型数据库的绑定。使用Promise方式作为异步回调。
637
638当分布式对象中包含的资产和关系型数据库中包含的资产指向同一个实体资产文件,即两个资产的Uri相同时,就会存在冲突,我们把这种资产称为融合资产。如果需要分布式数据管理进行融合资产的冲突解决,需要先进行资产的绑定。当应用退出session后,绑定关系随之消失。
639
640**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject
641
642**参数:**
643
644  | 参数名   | 类型                    | 必填 | 说明                                                                               |
645  | -------- | ----------------------- | ---- | ---------------------------------------------------------------------------------- |
646  | assetKey | string                  | 是   | 待绑定的融合资产在分布式对象中的键值。                                             |
647  | bindInfo | [BindInfo](#bindinfo11) | 是   | 待绑定的融合资产在数据库中的信息,包含库名、表名、主键、列名及在数据库中的资产名。 |
648
649**返回值:**
650
651  | 类型                | 说明          |
652  | ------------------- | ------------- |
653  | Promise&lt;void&gt; | 无返回结果的Promise对象。 |
654
655**示例:**
656
657```ts
658import UIAbility from '@ohos.app.ability.UIAbility';
659import type window from '@ohos.window';
660import distributedObject from '@ohos.data.distributedDataObject';
661import commonType from '@ohos.data.commonType';
662import type { BusinessError } from '@ohos.base';
663
664class Note {
665  title: string | undefined
666  text: string | undefined
667  attachment: commonType.Asset | undefined
668
669  constructor(title: string | undefined, text: string | undefined, attachment: commonType.Asset | undefined) {
670    this.title = title;
671    this.text = text;
672    this.attachment = attachment;
673  }
674}
675
676class EntryAbility extends UIAbility {
677  onWindowStageCreate(windowStage: window.WindowStage) {
678    let attachment: commonType.Asset = {
679      name: 'test_img.jpg',
680      uri: 'file://com.example.myapplication/data/storage/el2/distributedfiles/dir/test_img.jpg',
681      path: '/dir/test_img.jpg',
682      createTime: '2024-01-02 10:00:00',
683      modifyTime: '2024-01-02 10:00:00',
684      size: '5',
685      status: commonType.AssetStatus.ASSET_NORMAL
686    }
687    let note: Note = new Note('test', 'test', attachment);
688    let g_object: distributedObject.DataObject = distributedObject.create(this.context, note);
689    g_object.setSessionId('123456');
690
691    const bindInfo: distributedObject.BindInfo = {
692      storeName: 'notepad',
693      tableName: 'note_t',
694      primaryKey: {
695        'uuid': '00000000-0000-0000-0000-000000000000'
696      },
697      field: 'attachment',
698      assetName: attachment.name
699    }
700
701    g_object.bindAssetStore("attachment", bindInfo).then(() => {
702      console.info('bindAssetStore success.');
703    }).catch((err: BusinessError) => {
704      console.error("bindAssetStore failed, error code = " + err.code);
705    });
706  }
707}
708```
709
710## distributedObject.createDistributedObject<sup>(deprecated)</sup>
711
712createDistributedObject(source: object): DistributedObject
713
714
715创建一个分布式数据对象。
716
717> **说明:**
718>
719> 从 API Version 8 开始支持,从 API Version 9 开始废弃,建议使用[distributedObject.create](#distributedobjectcreate9)替代。
720
721**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject
722
723**参数:**
724
725  | 参数名 | 类型 | 必填 | 说明 |
726  | -------- | -------- | -------- | -------- |
727  | source | object | 是 | 设置分布式数据对象的属性。 |
728
729**返回值:**
730
731| 类型 | 说明 |
732| -------- | -------- |
733| [DistributedObject](#distributedobjectdeprecated) | 创建完成的分布式数据对象。 |
734
735**示例:**
736
737```ts
738import distributedObject from '@ohos.data.distributedDataObject';
739class SourceObject {
740    name: string
741    age: number
742    isVis: boolean
743
744    constructor(name: string, age: number, isVis: boolean) {
745        this.name = name
746        this.age = age
747        this.isVis = isVis
748    }
749}
750
751let source: SourceObject = new SourceObject("jack", 18, false);
752let g_object: distributedObject.DistributedObject = distributedObject.createDistributedObject(source);
753```
754
755## DistributedObject<sup>(deprecated)</sup>
756
757表示一个分布式数据对象。在使用以下接口前,需调用[createDistributedObject()](#distributedobjectcreatedistributedobjectdeprecated)获取DistributedObject对象。
758
759### setSessionId<sup>(deprecated)</sup>
760
761setSessionId(sessionId?: string): boolean
762
763设置sessionId,当可信组网中有多个设备时,多个设备间的对象如果设置为同一个sessionId,就能自动同步。
764
765> **说明:**
766>
767> 从 API Version 8 开始支持,从 API Version 9 开始废弃,建议使用[setSessionId](#setsessionid9)替代。
768
769**需要权限:** ohos.permission.DISTRIBUTED_DATASYNC770
771**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject
772
773**参数:**
774
775  | 参数名 | 类型 | 必填 | 说明 |
776  | -------- | -------- | -------- | -------- |
777  | sessionId | string | 否 | 分布式数据对象在可信组网中的标识ID。如果要退出分布式组网,设置为""或不设置均可。 |
778
779**返回值:**
780
781  | 类型 | 说明 |
782  | -------- | -------- |
783  | boolean | true:标识设置sessionId成功。 <br>false:标识设置sessionId失败。 |
784
785**示例:**
786
787```ts
788import distributedObject from '@ohos.data.distributedDataObject';
789class SourceObject {
790    name: string
791    age: number
792    isVis: boolean
793
794    constructor(name: string, age: number, isVis: boolean) {
795        this.name = name
796        this.age = age
797        this.isVis = isVis
798    }
799}
800
801let source: SourceObject = new SourceObject("jack", 18, false);
802let g_object: distributedObject.DistributedObject = distributedObject.createDistributedObject(source);
803// g_object加入分布式组网
804g_object.setSessionId(distributedObject.genSessionId());
805// 设置为""退出分布式组网
806g_object.setSessionId("");
807```
808
809### on('change')<sup>(deprecated)</sup>
810
811on(type: 'change', callback: (sessionId: string, fields: Array&lt;string&gt;) => void): void
812
813监听分布式数据对象的变更。
814
815> **说明:**
816>
817> 从 API Version 8 开始支持,从 API Version 9 开始废弃,建议使用[on('change')](#onchange9)替代。
818
819**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject
820
821**参数:**
822
823| 参数名 | 类型 | 必填 | 说明 |
824| -------- | -------- | -------- | -------- |
825| type | string | 是 | 事件类型,固定为'change',表示数据变更。 |
826| callback | Function | 是 | 变更回调对象实例。<br>sessionId:标识变更对象的sessionId; <br>fields:标识对象变更的属性名。 |
827
828**示例:**
829
830```ts
831import distributedObject from '@ohos.data.distributedDataObject';
832class SourceObject {
833    name: string
834    age: number
835    isVis: boolean
836
837    constructor(name: string, age: number, isVis: boolean) {
838        this.name = name
839        this.age = age
840        this.isVis = isVis
841    }
842}
843
844let source: SourceObject = new SourceObject("jack", 18, false);
845let g_object: distributedObject.DistributedObject = distributedObject.createDistributedObject(source);
846g_object.on("change", (sessionId: string, fields: Array<string>) => {
847    console.info("change" + sessionId);
848    if (fields != null && fields != undefined) {
849        for (let index: number = 0; index < fields.length; index++) {
850            console.info("changed !" + fields[index] + " " + g_object[fields[index]]);
851        }
852    }
853});
854```
855
856### off('change')<sup>(deprecated)</sup>
857
858off(type: 'change', callback?: (sessionId: string, fields: Array&lt;string&gt;) => void): void
859
860当不再进行数据变更监听时,使用此接口删除对象的变更监听。
861
862> **说明:**
863>
864> 从 API Version 8 开始支持,从 API Version 9 开始废弃,建议使用[off('change')](#offchange9)替代。
865
866**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject
867
868**参数:**
869
870| 参数名 | 类型 | 必填 | 说明 |
871| -------- | -------- | -------- | -------- |
872| type | string | 是 | 事件类型,固定为'change',表示数据变更。 |
873| callback | Function | 否 | 需要删除的数据变更回调,若不设置则删除该对象所有的数据变更回调。<br>sessionId:标识变更对象的sessionId; <br>fields:标识对象变更的属性名。 |
874
875**示例:**
876
877```ts
878import distributedObject from '@ohos.data.distributedDataObject';
879class SourceObject {
880    name: string
881    age: number
882    isVis: boolean
883
884    constructor(name: string, age: number, isVis: boolean) {
885        this.name = name
886        this.age = age
887        this.isVis = isVis
888    }
889}
890
891let source: SourceObject = new SourceObject("jack", 18, false);
892let g_object: distributedObject.DistributedObject = distributedObject.createDistributedObject(source);
893// 删除数据变更回调changeCallback
894g_object.off("change", (sessionId: string, fields: Array<string>) => {
895    console.info("change" + sessionId);
896    if (fields != null && fields != undefined) {
897        for (let index: number = 0; index < fields.length; index++) {
898            console.info("changed !" + fields[index] + " " + g_object[fields[index]]);
899        }
900    }
901});
902// 删除所有的数据变更回调
903g_object.off("change");
904```
905
906### on('status')<sup>(deprecated)</sup>
907
908on(type: 'status', callback: (sessionId: string, networkId: string, status: 'online' | 'offline' ) => void): void
909
910监听分布式数据对象的上下线。
911
912> **说明:**
913>
914> 从 API Version 8 开始支持,从 API Version 9 开始废弃,建议使用[on('status')](#onstatus9)替代。
915
916**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject
917
918**参数:**
919
920| 参数名 | 类型 | 必填 | 说明 |
921| -------- | -------- | -------- | -------- |
922| type | string | 是 | 事件类型,固定为'status',表示对象上下线。 |
923| callback | Function | 是 | 监听上下线回调实例。<br>sessionId:标识变更对象的sessionId; <br>networkId:标识对象设备; <br>status:标识对象为'online'(上线)或'offline'(下线)的状态。 |
924
925**示例:**
926
927```ts
928import distributedObject from '@ohos.data.distributedDataObject';
929class SourceObject {
930    name: string
931    age: number
932    isVis: boolean
933
934    constructor(name: string, age: number, isVis: boolean) {
935        this.name = name
936        this.age = age
937        this.isVis = isVis
938    }
939}
940
941let source: SourceObject = new SourceObject("jack", 18, false);
942let g_object: distributedObject.DistributedObject = distributedObject.createDistributedObject(source);
943
944g_object.on("status", (sessionId: string, networkId: string, status: 'online' | 'offline') => {
945    console.info("status changed " + sessionId + " " + status + " " + networkId);
946});
947```
948
949### off('status')<sup>(deprecated)</sup>
950
951off(type: 'status', callback?: (sessionId: string, networkId: string, status: 'online' | 'offline' ) => void): void
952
953当不再进行对象上下线监听时,使用此接口删除对象的上下线监听。
954
955> **说明:**
956>
957> 从 API Version 8 开始支持,从 API Version 9 开始废弃,建议使用[off('status')](#offstatus9)替代。
958
959**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject
960
961**参数:**
962
963| 参数名 | 类型 | 必填 | 说明 |
964| -------- | -------- | -------- | -------- |
965| type | string | 是 | 事件类型,固定为'status',表示对象上下线。 |
966| callback | Function | 否 | 需要删除的上下线回调,若不设置则删除该对象所有的上下线回调。<br>sessionId:标识变更对象的sessionId; <br>networkId:标识变更对象; <br>status:标识对象为'online'(上线)或'offline'(下线)的状态。 |
967
968
969**示例:**
970
971```ts
972import distributedObject from '@ohos.data.distributedDataObject';
973class SourceObject {
974    name: string
975    age: number
976    isVis: boolean
977
978    constructor(name: string, age: number, isVis: boolean) {
979        this.name = name
980        this.age = age
981        this.isVis = isVis
982    }
983}
984
985let source: SourceObject = new SourceObject("jack", 18, false);
986let g_object: distributedObject.DistributedObject = distributedObject.createDistributedObject(source);
987// 删除上下线回调changeCallback
988g_object.off("status", (sessionId: string, networkId: string, status: 'online' | 'offline') => {
989    console.info("status changed " + sessionId + " " + status + " " + networkId);
990});
991// 删除所有的上下线回调
992g_object.off("status");
993```