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<void>): void 160 161设置sessionId,使用callback方式异步回调。当可信组网中有多个设备时,多个设备间的对象如果设置为同一个sessionId,就能自动同步。 162 163**需要权限:** ohos.permission.DISTRIBUTED_DATASYNC。 164 165**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject 166 167**参数:** 168 169 | 参数名 | 类型 | 必填 | 说明 | 170 | -------- | -------- | -------- | -------- | 171 | sessionId | string | 是 | 分布式数据对象在可信组网中的标识ID。设置为""时表示退出分布式组网。| 172 | callback | AsyncCallback<void> | 是 | 加入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<void>): void 198 199退出所有已加入的session,使用callback方式异步回调。 200 201**需要权限:** ohos.permission.DISTRIBUTED_DATASYNC。 202 203**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject 204 205**参数:** 206 207 | 参数名 | 类型 | 必填 | 说明 | 208 | -------- | -------- | -------- | -------- | 209 | callback | AsyncCallback<void> | 是 | 退出所有已加入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<void> 235 236设置sessionId,使用Promise异步返回。当可信组网中有多个设备时,多个设备间的对象如果设置为同一个sessionId,就能自动同步。 237 238**需要权限:** ohos.permission.DISTRIBUTED_DATASYNC。 239 240**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject 241 242**参数:** 243 244 | 参数名 | 类型 | 必填 | 说明 | 245 | -------- | -------- | -------- | -------- | 246 | sessionId | string | 否 | 分布式数据对象在可信组网中的标识ID。如果要退出分布式组网,设置为""或不设置均可。 | 247 248**返回值:** 249 250| 类型 | 说明 | 251| -------- | -------- | 252| Promise<void> | 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<string>) => 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<string>) => 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<SaveSuccessResponse>): 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<[SaveSuccessResponse](#savesuccessresponse9)> | 是 | 回调函数。返回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<SaveSuccessResponse> 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<[SaveSuccessResponse](#savesuccessresponse9)> | 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<RevokeSaveSuccessResponse>): void 475 476撤回保存的分布式数据对象。使用callback方式作为异步方法。 477 478如果对象保存在本地设备,那么将删除所有受信任设备上所保存的数据。 479如果对象保存在其他设备,那么将删除本地设备上的数据。 480 481**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject 482 483**参数:** 484 485 | 参数名 | 类型 | 必填 | 说明 | 486 | -------- | -------- | -------- | -------- | 487 | callback | AsyncCallback<[RevokeSaveSuccessResponse](#revokesavesuccessresponse9)> | 是 | 回调函数。返回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<RevokeSaveSuccessResponse> 520 521撤回保存的分布式数据对象。使用Promise方式作为异步方法。 522 523如果对象保存在本地设备,那么将删除所有受信任设备上所保存的数据。 524如果对象保存在其他设备,那么将删除本地设备上的数据。 525 526**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject 527 528**返回值:** 529 530 | 类型 | 说明 | 531 | -------- | -------- | 532 | Promise<[RevokeSaveSuccessResponse](#revokesavesuccessresponse9)> | 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<void>): 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<void> | 是 | 绑定数据库的回调。 | 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<void> 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<void> | 无返回结果的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_DATASYNC。 770 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<string>) => 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<string>) => 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```