js-apis-data-distributedobject.md 35.0 KB
Newer Older
Z
zengyawen 已提交
1
# @ohos.data.distributedDataObject (分布式数据对象)
L
li_juntao 已提交
2

3 4
本模块提供管理基本数据对象的相关能力,包括创建、查询、删除、修改、订阅等;同时支持相同应用多设备间的分布式数据对象协同能力。

G
ge-yafang 已提交
5
> **说明:**
6
>
L
li_juntao 已提交
7 8 9 10 11 12
> 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。


## 导入模块

```js
G
ge-yafang 已提交
13
import distributedObject from '@ohos.data.distributedDataObject';
L
li_juntao 已提交
14 15
```

16
## distributedObject.create<sup>9+</sup>
L
li_juntao 已提交
17

18
create(context: Context, source: object): DistributedObjectV9
L
li_juntao 已提交
19

20
创建一个分布式数据对象。
W
wuyongning 已提交
21

22
**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject
W
wuyongning 已提交
23

W
wuyongning 已提交
24
**参数:**
25

L
li_juntao 已提交
26 27
  | 参数名 | 类型 | 必填 | 说明 |
  | -------- | -------- | -------- | -------- |
Z
zhongjianfei 已提交
28
  | context | Context | 是 | 应用的上下文。 <br>FA模型的应用Context定义见[Context](js-apis-inner-app-context.md)<br>Stage模型的应用Context定义见[Context](js-apis-ability-context.md)。 |
29
  | source | object | 是 | 设置分布式数据对象的属性。 |
30

W
wuyongning 已提交
31
**返回值:**
32

G
ge-yafang 已提交
33 34
| 类型 | 说明 |
| -------- | -------- |
35
| [DistributedObjectV9](#distributedobjectv9) | 创建完成的分布式数据对象。 |
W
wuyongning 已提交
36 37

**示例:**
38

39 40
FA模型示例:

W
wufengshan 已提交
41
```js
42
// 导入模块
W
wufengshan 已提交
43
import distributedObject from '@ohos.data.distributedDataObject';
44 45 46 47 48
import featureAbility from '@ohos.ability.featureAbility';
// 获取context
let context = featureAbility.getContext();
// 创建对象,该对象包含4个属性类型,string,number,boolean和Object
let g_object = distributedObject.create(context, {name:"Amy", age:18, isVis:false, parent:{mother:"jack mom",father:"jack Dad"}});
W
wufengshan 已提交
49
```
L
li_juntao 已提交
50

51 52 53 54 55
Stage模型示例:

```ts
// 导入模块
import distributedObject from '@ohos.data.distributedDataObject';
56 57
import UIAbility from '@ohos.app.ability.UIAbility';

58 59
// 获取context
let context;
60
class EntryAbility extends UIAbility {
61 62 63 64 65 66 67
    onWindowStageCreate(windowStage){
        context = this.context
    }
}
// 创建对象,该对象包含4个属性类型,string,number,boolean和Object
let g_object = distributedObject.create(context, {name:"Amy", age:18, isVis:false, parent:{mother:"jack mom",father:"jack Dad"}});
```
L
li_juntao 已提交
68

69
## distributedObject.genSessionId
L
li_juntao 已提交
70 71 72

genSessionId(): string

W
wuyongning 已提交
73
随机创建一个sessionId。
L
li_juntao 已提交
74

75
**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject
L
li_juntao 已提交
76

W
wuyongning 已提交
77
**返回值:**
78

L
li_juntao 已提交
79 80 81 82
  | 类型 | 说明 |
  | -------- | -------- |
  | string | 随机创建的sessionId。 |

W
wuyongning 已提交
83
**示例:**
84

W
wufengshan 已提交
85 86
```js
import distributedObject from '@ohos.data.distributedDataObject';
87
let sessionId = distributedObject.genSessionId();
W
wufengshan 已提交
88
```
L
li_juntao 已提交
89

90
## SaveSuccessResponse<sup>9+</sup>
91 92 93

save接口回调信息。

94
**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject
95

W
wangdengze 已提交
96 97 98 99 100
| 名称 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| sessionId | string | 是 | 多设备协同的唯一标识。 |
| version | number | 是 | 已保存对象的版本。 |
| deviceId | string | 是 | 存储数据的设备号,标识需要保存对象的设备。默认为"local",标识本地设备;可自定义设置其他标识设备的字符串。 |
101

102
## RevokeSaveSuccessResponse<sup>9+</sup>
103 104 105

revokeSave接口回调信息。

106
**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject
107

W
wangdengze 已提交
108 109 110
| 名称 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| sessionId | string | 是 | 多设备协同的唯一标识。 |
L
li_juntao 已提交
111

112
## DistributedObjectV9
L
li_juntao 已提交
113

114
表示一个分布式数据对象。
115

116
### setSessionId<sup>9+</sup>
L
li_juntao 已提交
117

118
setSessionId(sessionId: string, callback: AsyncCallback&lt;void&gt;): void
L
li_juntao 已提交
119

W
wuyongning 已提交
120
设置同步的sessionId,当可信组网中有多个设备时,多个设备间的对象如果设置为同一个sessionId,就能自动同步。
L
li_juntao 已提交
121

122
**需要权限:** ohos.permission.DISTRIBUTED_DATASYNC。
W
wufengshan 已提交
123

124 125 126 127 128 129 130 131 132 133 134
**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject

**参数:**

  | 参数名 | 类型 | 必填 | 说明 |
  | -------- | -------- | -------- | -------- |
  | sessionId | string | 是 | 分布式数据对象在可信组网中的标识ID。|
  | callback | AsyncCallback&lt;void&gt; | 是 | 加入session的异步回调。|

**错误码:**

Z
zengyawen 已提交
135
  以下错误码的详细介绍参见[分布式数据对象错误码](../errorcodes/errorcode-distributed-dataObject.md)
136

137
  | 错误码ID | 错误信息 |
138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159
  | -------- | -------- |
  | 15400001 | 创建内存数据库失败。|

**示例:**

FA模型示例

```js
import distributedObject from '@ohos.data.distributedDataObject';
import featureAbility from '@ohos.ability.featureAbility';
// 获取context
let context = featureAbility.getContext();
let g_object = distributedObject.create(context, {name:"Amy", age:18, isVis:false, parent:{mother:"jack mom",father:"jack Dad"}});
// g_object加入分布式组网
g_object.setSessionId(distributedObject.genSessionId(), ()=>{
    console.log("join session");
});
```
Stage模型示例

```ts
import distributedObject from '@ohos.data.distributedDataObject';
160 161
import UIAbility from '@ohos.app.ability.UIAbility';

162 163
// 获取context
let context;
164
class EntryAbility extends UIAbility {
165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193
    onWindowStageCreate(windowStage){
        context = this.context
    }
}
let g_object = distributedObject.create(context, {name:"Amy", age:18, isVis:false, parent:{mother:"jack mom",father:"jack Dad"}});
// g_object加入分布式组网
g_object.setSessionId(distributedObject.genSessionId(), ()=>{
    console.log("join session");
});
```

### setSessionId<sup>9+</sup>

setSessionId(callback: AsyncCallback&lt;void&gt;): void

退出所有已加入的session。

**需要权限:** ohos.permission.DISTRIBUTED_DATASYNC。

**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject

**参数:**

  | 参数名 | 类型 | 必填 | 说明 |
  | -------- | -------- | -------- | -------- |
  | callback | AsyncCallback&lt;void&gt; | 是 | 退出所有已加入session的异步回调。 |

**错误码:**

Z
zengyawen 已提交
194
  以下错误码的详细介绍参见[分布式数据对象错误码](../errorcodes/errorcode-distributed-dataObject.md)
195

196
  | 错误码ID | 错误信息 |
197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222
  | -------- | -------- |
  | 15400001 | 创建内存数据库失败。|

**示例:**

FA模型示例

```js
import distributedObject from '@ohos.data.distributedDataObject';
import featureAbility from '@ohos.ability.featureAbility';
// 获取context
let context = featureAbility.getContext();
let g_object = distributedObject.create(context, {name:"Amy", age:18, isVis:false, parent:{mother:"jack mom",father:"jack Dad"}});
// g_object加入分布式组网
g_object.setSessionId(distributedObject.genSessionId(), ()=>{
    console.log("join session");
});
// 退出分布式组网
g_object.setSessionId(() => {
    console.log("leave all lession.");
});
```
Stage模型示例

```ts
import distributedObject from '@ohos.data.distributedDataObject';
223 224
import UIAbility from '@ohos.app.ability.UIAbility';

225 226
// 获取context
let context;
227
class EntryAbility extends UIAbility {
228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251
    onWindowStageCreate(windowStage){
        context = this.context
    }
}
let g_object = distributedObject.create(context, {name:"Amy", age:18, isVis:false, parent:{mother:"jack mom",father:"jack Dad"}});
// g_object加入分布式组网
g_object.setSessionId(distributedObject.genSessionId(), ()=>{
    console.log("join session");
});
// 退出分布式组网
g_object.setSessionId(() => {
    console.log("leave all lession.");
});
```

### setSessionId<sup>9+</sup>

setSessionId(sessionId?: string): Promise&lt;void&gt;

设置同步的sessionId,当可信组网中有多个设备时,多个设备间的对象如果设置为同一个sessionId,就能自动同步。

**需要权限:** ohos.permission.DISTRIBUTED_DATASYNC。

**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject
W
wuyongning 已提交
252

W
wuyongning 已提交
253
**参数:**
254

L
li_juntao 已提交
255 256
  | 参数名 | 类型 | 必填 | 说明 |
  | -------- | -------- | -------- | -------- |
257
  | sessionId | string | 否 | 分布式数据对象在可信组网中的标识ID。如果要退出分布式组网,设置为""或不设置均可。 |
W
wuyongning 已提交
258

W
wuyongning 已提交
259
**返回值:**
260

261 262 263 264 265 266
| 类型 | 说明 |
| -------- | -------- |
| Promise&lt;void&gt; | Promise对象。|

**错误码:**

Z
zengyawen 已提交
267
  以下错误码的详细介绍参见[分布式数据对象错误码](../errorcodes/errorcode-distributed-dataObject.md)
268

269
  | 错误码ID | 错误信息 |
W
wuyongning 已提交
270
  | -------- | -------- |
271
  | 15400001 | 创建内存数据库失败。|
G
ge-yafang 已提交
272

W
wuyongning 已提交
273
**示例:**
274

275 276
FA模型示例

W
wufengshan 已提交
277 278
```js
import distributedObject from '@ohos.data.distributedDataObject';
279 280 281 282
import featureAbility from '@ohos.ability.featureAbility';
// 获取context
let context = featureAbility.getContext();
let g_object = distributedObject.create(context, {name:"Amy", age:18, isVis:false, parent:{mother:"jack mom",father:"jack Dad"}});
“wangxiyue” 已提交
283
// g_object加入分布式组网
284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299
g_object.setSessionId(distributedObject.genSessionId()).then (()=>{
    console.log("join session.");
    }).catch((error)=>{
        console.info("error:" + error.code + error.message);
});
// 退出分布式组网
g_object.setSessionId().then (()=>{
    console.log("leave all lession.");
    }).catch((error)=>{
        console.info("error:" + error.code + error.message);
});
```
Stage模型示例

```ts
import distributedObject from '@ohos.data.distributedDataObject';
300 301
import UIAbility from '@ohos.app.ability.UIAbility';

302 303
// 获取context
let context;
304
class EntryAbility extends UIAbility {
305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321
    onWindowStageCreate(windowStage){
        context = this.context
    }
}
let g_object = distributedObject.create(context, {name:"Amy", age:18, isVis:false, parent:{mother:"jack mom",father:"jack Dad"}});
// g_object加入分布式组网
g_object.setSessionId(distributedObject.genSessionId()).then (()=>{
    console.info("join session.");
    }).catch((error)=>{
        console.info("error:" + error.code + error.message);
});
// 退出分布式组网
g_object.setSessionId().then (()=>{
    console.log("leave all lession.");
    }).catch((error)=>{
        console.info("error:" + error.code + error.message);
});
W
wufengshan 已提交
322
```
L
li_juntao 已提交
323

324
### on('change')<sup>9+</sup>
L
li_juntao 已提交
325 326 327

on(type: 'change', callback: Callback<{ sessionId: string, fields: Array&lt;string&gt; }>): void

328
监听分布式数据对象的数据变更。
L
li_juntao 已提交
329

330
**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject
L
li_juntao 已提交
331

W
wuyongning 已提交
332
**参数:**
333

L
li_juntao 已提交
334 335 336
  | 参数名 | 类型 | 必填 | 说明 |
  | -------- | -------- | -------- | -------- |
  | type | string | 是 | 事件类型,固定为'change',表示数据变更。 |
W
wuyongning 已提交
337
  | callback | Callback<{ sessionId: string, fields: Array&lt;string&gt; }> | 是 | 变更回调对象实例。<br>sessionId:标识变更对象的sessionId; <br>fields:标识对象变更的属性名。 |
L
li_juntao 已提交
338

W
wuyongning 已提交
339
**示例:**
340

341 342
FA模型示例

343
```js
344 345 346 347 348
import distributedObject from '@ohos.data.distributedDataObject';
import featureAbility from '@ohos.ability.featureAbility';
// 获取context
let context = featureAbility.getContext();
let g_object = distributedObject.create(context, {name:"Amy", age:18, isVis:false, parent:{mother:"jack mom",father:"jack Dad"}});
349 350 351 352 353 354 355 356 357 358
globalThis.changeCallback = (sessionId, changeData) => {
    console.info("change" + sessionId);
    if (changeData != null && changeData != undefined) {
        changeData.forEach(element => {
        console.info("changed !" + element + " " + g_object[element]);
        });
    }
}
g_object.on("change", globalThis.changeCallback);
```
L
li_juntao 已提交
359

360 361 362 363
Stage模型示例

```ts
import distributedObject from '@ohos.data.distributedDataObject';
364 365
import UIAbility from '@ohos.app.ability.UIAbility';

366 367
// 获取context
let context;
368
class EntryAbility extends UIAbility {
369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385
    onWindowStageCreate(windowStage){
        context = this.context
    }
}
let g_object = distributedObject.create(context, {name:"Amy", age:18, isVis:false, parent:{mother:"jack mom",father:"jack Dad"}});
globalThis.changeCallback = (sessionId, changeData) => {
    console.info("change" + sessionId);
    if (changeData != null && changeData != undefined) {
        changeData.forEach(element => {
        console.info("changed !" + element + " " + g_object[element]);
        });
    }
}
g_object.on("change", globalThis.changeCallback);
```

### off('change')<sup>9+</sup>
L
li_juntao 已提交
386 387 388

off(type: 'change', callback?: Callback<{ sessionId: string, fields: Array&lt;string&gt; }>): void

W
wuyongning 已提交
389
当不再进行数据变更监听时,使用此接口删除对象的变更监听。
L
li_juntao 已提交
390

391
**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject
W
wuyongning 已提交
392

W
wuyongning 已提交
393
**参数:**
394

L
li_juntao 已提交
395 396 397
  | 参数名 | 类型 | 必填 | 说明 |
  | -------- | -------- | -------- | -------- |
  | type | string | 是 | 事件类型,固定为'change',表示数据变更。 |
W
wufengshan 已提交
398
  | callback | Callback<{ sessionId: string, fields: Array&lt;string&gt; }> | 否 | 需要删除的数据变更回调,若不设置则删除该对象所有的数据变更回调。<br>sessionId:标识变更对象的sessionId; <br>fields:标识对象变更的属性名。 |
L
li_juntao 已提交
399 400


W
wuyongning 已提交
401
**示例:**
402

403 404
FA模型示例

405
```js
406 407 408 409 410
import distributedObject from '@ohos.data.distributedDataObject';
import featureAbility from '@ohos.ability.featureAbility';
// 获取context
let context = featureAbility.getContext();
let g_object = distributedObject.create(context, {name:"Amy", age:18, isVis:false, parent:{mother:"jack mom",father:"jack Dad"}});
“wangxiyue” 已提交
411
// 删除数据变更回调changeCallback
412
g_object.off("change", globalThis.changeCallback);
“wangxiyue” 已提交
413
// 删除所有的数据变更回调
414 415
g_object.off("change");
```
L
li_juntao 已提交
416

417 418 419 420
Stage模型示例

```ts
import distributedObject from '@ohos.data.distributedDataObject';
421 422
import UIAbility from '@ohos.app.ability.UIAbility';

423 424
// 获取context
let context;
425
class EntryAbility extends UIAbility {
426 427 428 429 430 431 432 433 434 435 436 437
    onWindowStageCreate(windowStage){
        context = this.context
    }
}
let g_object = distributedObject.create(context, {name:"Amy", age:18, isVis:false, parent:{mother:"jack mom",father:"jack Dad"}});
// 删除数据变更回调changeCallback
g_object.off("change", globalThis.changeCallback);
// 删除所有的数据变更回调
g_object.off("change");
```

### on('status')<sup>9+</sup>
L
li_juntao 已提交
438 439 440

on(type: 'status', callback: Callback<{ sessionId: string, networkId: string, status: 'online' | 'offline' }>): void

441
监听分布式数据对象的上下线。
L
li_juntao 已提交
442

443
**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject
W
wuyongning 已提交
444

W
wuyongning 已提交
445
**参数:**
446

L
li_juntao 已提交
447 448 449
  | 参数名 | 类型 | 必填 | 说明 |
  | -------- | -------- | -------- | -------- |
  | type | string | 是 | 事件类型,固定为'status',表示对象上下线。 |
450
  | callback | Callback<{ sessionId: string, networkId: string, status: 'online' \| 'offline' }> | 是 | 监听上下线回调实例。<br>sessionId:标识变更对象的sessionId; <br>networkId:标识对象设备,即deviceId; <br>status:标识对象为'online'(上线)或'offline'(下线)的状态。 |
W
wuyongning 已提交
451 452

**示例:**
453

454 455
FA模型示例

456 457
```js
import distributedObject from '@ohos.data.distributedDataObject';
458 459 460 461 462 463 464 465 466 467 468 469 470 471
import featureAbility from '@ohos.ability.featureAbility';
// 获取context
let context = featureAbility.getContext();
globalThis.statusCallback = (sessionId, networkId, status) => {
    globalThis.response += "status changed " + sessionId + " " + status + " " + networkId;
}
let g_object = distributedObject.create(context, {name:"Amy", age:18, isVis:false, parent:{mother:"jack mom",father:"jack Dad"}});
g_object.on("status", globalThis.statusCallback);
```

Stage模型示例

```ts
import distributedObject from '@ohos.data.distributedDataObject';
472 473
import UIAbility from '@ohos.app.ability.UIAbility';

474 475
// 获取context
let context;
476
class EntryAbility extends UIAbility {
477 478 479 480
    onWindowStageCreate(windowStage){
        context = this.context
    }
}
481 482 483
globalThis.statusCallback = (sessionId, networkId, status) => {
    globalThis.response += "status changed " + sessionId + " " + status + " " + networkId;
}
484
let g_object = distributedObject.create(context, {name:"Amy", age:18, isVis:false, parent:{mother:"jack mom",father:"jack Dad"}});
485 486
g_object.on("status", globalThis.statusCallback);
```
L
li_juntao 已提交
487

488
### off('status')<sup>9+</sup>
L
li_juntao 已提交
489 490 491

off(type: 'status', callback?: Callback<{ sessionId: string, deviceId: string, status: 'online' | 'offline' }>): void

W
wuyongning 已提交
492
当不再进行对象上下线监听时,使用此接口删除对象的上下线监听。
L
li_juntao 已提交
493

494
**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject
L
li_juntao 已提交
495

W
wuyongning 已提交
496
**参数:**
497

L
li_juntao 已提交
498 499 500
  | 参数名 | 类型 | 必填 | 说明 |
  | -------- | -------- | -------- | -------- |
  | type | string | 是 | 事件类型,固定为'status',表示对象上下线。 |
W
wuyongning 已提交
501
  | callback | Callback<{ sessionId: string, deviceId: string, status: 'online' \| 'offline' }> | 否 | 需要删除的上下线回调,若不设置则删除该对象所有的上下线回调。<br>sessionId:标识变更对象的sessionId; <br>deviceId:标识变更对象的deviceId; <br>status:标识对象为'online'(上线)或'offline'(下线)的状态。 |
L
li_juntao 已提交
502 503


W
wuyongning 已提交
504
**示例:**
505

506 507
FA模型示例

508 509
```js
import distributedObject from '@ohos.data.distributedDataObject'; 
510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526
import featureAbility from '@ohos.ability.featureAbility';
// 获取context
let context = featureAbility.getContext();
let g_object = distributedObject.create(context, {name:"Amy", age:18, isVis:false, parent:{mother:"jack mom",father:"jack Dad"}});
globalThis.statusCallback = (sessionId, networkId, status) => {
    globalThis.response += "status changed " + sessionId + " " + status + " " + networkId;
}
// 删除上下线回调changeCallback
g_object.off("status",globalThis.statusCallback);
// 删除所有的上下线回调
g_object.off("status");
```

Stage模型示例

```ts
import distributedObject from '@ohos.data.distributedDataObject'; 
527 528
import UIAbility from '@ohos.app.ability.UIAbility';

529 530
// 获取context
let context;
531
class EntryAbility extends UIAbility {
532 533 534 535 536
    onWindowStageCreate(windowStage){
        context = this.context
    }
}
let g_object = distributedObject.create(context, {name:"Amy", age:18, isVis:false, parent:{mother:"jack mom",father:"jack Dad"}});
537 538 539
globalThis.statusCallback = (sessionId, networkId, status) => {
    globalThis.response += "status changed " + sessionId + " " + status + " " + networkId;
}
“wangxiyue” 已提交
540
// 删除上下线回调changeCallback
541
g_object.off("status",globalThis.statusCallback);
“wangxiyue” 已提交
542
// 删除所有的上下线回调
543 544
g_object.off("status");
```
545

546
### save<sup>9+</sup>
547 548 549 550 551 552 553 554 555 556 557 558 559

save(deviceId: string, callback: AsyncCallback&lt;SaveSuccessResponse&gt;): void

保存分布式数据对象。使用callback方式异步回调。

对象数据保存成功后,当应用存在时不会释放对象数据,当应用退出后,重新进入应用时,恢复保存在设备上的数据。

有以下几种情况时,保存的数据将会被释放:

- 存储时间超过24小时。
- 应用卸载。
- 成功恢复数据之后。

560
**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject
561 562

**参数:**
563

564 565 566
  | 参数名 | 类型 | 必填 | 说明 |
  | -------- | -------- | -------- | -------- |
  | deviceId | string | 是 | 保存数据的deviceId,当deviceId为"local",代表存储在本地设备。 |
W
wufengshan 已提交
567
  | callback | AsyncCallback&lt;[SaveSuccessResponse](#savesuccessresponse9)&gt; | 是 | 回调函数。返回SaveSuccessResponse,包含sessionId、version、deviceId等信息。 |
568 569

**示例:**
570

W
wangxiyue 已提交
571 572
FA模型示例
```ts
W
wufengshan 已提交
573
import distributedObject from '@ohos.data.distributedDataObject';
574 575 576 577 578
import featureAbility from '@ohos.ability.featureAbility';
// 获取context
let context = featureAbility.getContext();
let g_object = distributedObject.create(context, {name:"Amy", age:18, isVis:false});
g_object.setSessionId("123456");
W
wangxiyue 已提交
579
g_object.save("local", (result) => {
580 581 582 583 584 585 586
    console.log("save callback");
    console.info("save sessionId: " + result.sessionId);
    console.info("save version: " + result.version);
    console.info("save deviceId:  " + result.deviceId);
});
```

W
wangxiyue 已提交
587 588
Stage模型示例
```ts
589
import distributedObject from '@ohos.data.distributedDataObject';
590 591
import UIAbility from '@ohos.app.ability.UIAbility';

592 593
// 获取context
let context;
594
class EntryAbility extends UIAbility {
595 596 597 598 599
    onWindowStageCreate(windowStage){
        context = this.context
    }
}
let g_object = distributedObject.create(context, {name:"Amy", age:18, isVis:false});
W
wufengshan 已提交
600
g_object.setSessionId("123456");
W
wangxiyue 已提交
601
g_object.save("local", (result) => {
W
wufengshan 已提交
602
    console.log("save callback");
W
wangxiyue 已提交
603 604 605
    console.info("save sessionId: " + result.sessionId);
    console.info("save version: " + result.version);
    console.info("save deviceId:  " + result.deviceId);
W
wufengshan 已提交
606 607
});
```
608

609
### save<sup>9+</sup>
610 611 612 613 614 615 616 617 618 619 620 621 622

save(deviceId: string): Promise&lt;SaveSuccessResponse&gt;

保存分布式数据对象。使用Promise方式作为异步回调。

对象数据保存成功后,当应用存在时不会释放对象数据,当应用退出后,重新进入应用时,恢复保存在设备上的数据。

有以下几种情况时,保存的数据将会被释放:

- 存储时间超过24小时。
- 应用卸载。
- 成功恢复数据之后。

623
**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject
624 625

**参数:**
626

627 628 629 630
  | 参数名 | 类型 | 必填 | 说明 |
  | -------- | -------- | -------- | -------- |
  | deviceId | string | 是 | 保存数据的设备号,当deviceId默认为"local",标识需要保存对象的设备。 |

W
wufengshan 已提交
631
**返回值:**
632 633 634

  | 类型 | 说明 |
  | -------- | -------- |
W
wufengshan 已提交
635
  | Promise&lt;[SaveSuccessResponse](#savesuccessresponse9)&gt; | Promise对象。返回SaveSuccessResponse,包含sessionId、version、deviceId等信息。|
636 637 638

**示例:**

W
wufengshan 已提交
639 640
```js
import distributedObject from '@ohos.data.distributedDataObject';
641 642 643
import featureAbility from '@ohos.ability.featureAbility';
// 获取context
let context = featureAbility.getContext();
644
let g_object = distributedObject.create(context,{name:"Amy", age:18, isVis:false});
645 646 647 648 649 650 651 652 653 654 655 656 657
g_object.setSessionId("123456");
g_object.save("local").then((result) => {
    console.log("save callback");
    console.info("save sessionId " + result.sessionId);
    console.info("save version " + result.version);
    console.info("save deviceId " + result.deviceId);
}, () => {
    console.error("save failed");
});
```

```js
import distributedObject from '@ohos.data.distributedDataObject';
658 659
import UIAbility from '@ohos.app.ability.UIAbility';

660 661
// 获取context
let context;
662
class EntryAbility extends UIAbility {
663 664 665 666
    onWindowStageCreate(windowStage){
        context = this.context
    }
}
667
let g_object = distributedObject.create(context,{name:"Amy", age:18, isVis:false});
W
wufengshan 已提交
668
g_object.setSessionId("123456");
“wangxiyue” 已提交
669
g_object.save("local").then((result) => {
W
wufengshan 已提交
670 671 672 673
    console.log("save callback");
    console.info("save sessionId " + result.sessionId);
    console.info("save version " + result.version);
    console.info("save deviceId " + result.deviceId);
“wangxiyue” 已提交
674
}, () => {
W
wufengshan 已提交
675 676 677
    console.error("save failed");
});
```
678

679
### revokeSave<sup>9+</sup>
680

681
revokeSave(callback: AsyncCallback&lt;RevokeSaveSuccessResponse&gt;): void
682 683 684 685 686 687

撤回保存的分布式数据对象。使用callback方式作为异步方法。

如果对象保存在本地设备,那么将删除所有受信任设备上所保存的数据。
如果对象保存在其他设备,那么将删除本地设备上的数据。

688
**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject
689 690

**参数:**
691

692 693
  | 参数名 | 类型 | 必填 | 说明 |
  | -------- | -------- | -------- | -------- |
694
  | callback | AsyncCallback&lt;[RevokeSaveSuccessResponse](#revokesavesuccessresponse9)&gt; | 是 | 回调函数。返回RevokeSaveSuccessResponse,包含sessionId。 |
695 696 697

**示例:**

698 699
FA模型示例

W
wufengshan 已提交
700 701
```js
import distributedObject from '@ohos.data.distributedDataObject';
702 703 704 705 706
import featureAbility from '@ohos.ability.featureAbility';
// 获取context
let context = featureAbility.getContext();
let g_object = distributedObject.create(context, {name:"Amy", age:18, isVis:false});
g_object.setSessionId("123456");
W
wangxiyue 已提交
707 708
// 持久化数据
g_object.save("local", (result) => {
709 710 711 712
    console.log("save callback");
    console.info("save sessionId " + result.sessionId);
    console.info("save version " + result.version);
    console.info("save deviceId " + result.deviceId);
W
wangxiyue 已提交
713 714 715 716 717
});
// 删除持久化保存的数据
g_object.revokeSave((result) => {
  console.log("revokeSave callback");
  console.log("revokeSave sessionId " + result.sessionId);
718 719 720 721 722 723 724
});
```

Stage模型示例

```ts
import distributedObject from '@ohos.data.distributedDataObject';
725 726
import UIAbility from '@ohos.app.ability.UIAbility';

727 728
// 获取context
let context;
729
class EntryAbility extends UIAbility {
W
wangxiyue 已提交
730
    onWindowStageCreate(windowStage) {
731 732 733 734
        context = this.context
    }
}
let g_object = distributedObject.create(context, {name:"Amy", age:18, isVis:false});
W
wufengshan 已提交
735
g_object.setSessionId("123456");
W
wangxiyue 已提交
736 737 738 739 740 741 742 743 744
// 持久化数据
g_object.save("local", (result) => {
    console.log("save callback");
    console.info("save sessionId " + result.sessionId);
    console.info("save version " + result.version);
    console.info("save deviceId " + result.deviceId);
});
// 删除持久化保存的数据
g_object.revokeSave((result) => {
W
wufengshan 已提交
745
  console.log("revokeSave callback");
W
wangxiyue 已提交
746
  console.log("revokeSave sessionId " + result.sessionId);
W
wufengshan 已提交
747 748
});
```
749

750
### revokeSave<sup>9+</sup>
751

752
revokeSave(): Promise&lt;RevokeSaveSuccessResponse&gt;
753 754 755 756 757 758

撤回保存的分布式数据对象。使用Promise方式作为异步方法。

如果对象保存在本地设备,那么将删除所有受信任设备上所保存的数据。
如果对象保存在其他设备,那么将删除本地设备上的数据。

759
**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject
760

W
wufengshan 已提交
761
**返回值:**
762 763 764

  | 类型 | 说明 |
  | -------- | -------- |
W
wufengshan 已提交
765
  | Promise&lt;[RevokeSaveSuccessResponse](#revokesavesuccessresponse9)&gt; | Promise对象。返回RevokeSaveSuccessResponse,包含sessionId。 |
766 767 768

**示例:**

769 770
FA模型示例

W
wangxiyue 已提交
771
```ts
W
wufengshan 已提交
772
import distributedObject from '@ohos.data.distributedDataObject';
773 774 775 776
import featureAbility from '@ohos.ability.featureAbility';
// 获取context
let context = featureAbility.getContext();
let g_object = distributedObject.create(context, {name:"Amy", age:18, isVis:false});
W
wufengshan 已提交
777
g_object.setSessionId("123456");
W
wangxiyue 已提交
778 779 780 781 782 783 784 785 786 787
// 持久化数据
g_object.save("local").then((result) => {
    console.log("save callback");
    console.info("save sessionId " + result.sessionId);
    console.info("save version " + result.version);
    console.info("save deviceId " + result.deviceId);
}, () => {
    console.error("save failed");
});
// 删除持久化保存的数据
“wangxiyue” 已提交
788
g_object.revokeSave().then((result) => {
W
wufengshan 已提交
789 790
    console.log("revokeSave callback");
    console.log("sessionId" + result.sessionId);
“wangxiyue” 已提交
791
}, () => {
W
wufengshan 已提交
792 793 794
    console.error("revokeSave failed");
});
```
795 796 797 798 799

Stage模型示例

```ts
import distributedObject from '@ohos.data.distributedDataObject';
800 801
import UIAbility from '@ohos.app.ability.UIAbility';

802 803
// 获取context
let context;
804
class EntryAbility extends UIAbility {
W
wangxiyue 已提交
805
    onWindowStageCreate(windowStage) {
806 807 808 809 810 811 812 813 814 815 816 817 818
        context = this.context
    }
}
let g_object = distributedObject.create(context, {name:"Amy", age:18, isVis:false});
g_object.setSessionId("123456");
g_object.save("local").then((result) => {
    console.log("save callback");
    console.info("save sessionId " + result.sessionId);
    console.info("save version " + result.version);
    console.info("save deviceId " + result.deviceId);
}, () => {
    console.error("save failed");
});
W
wangxiyue 已提交
819 820 821 822 823 824 825 826

// 删除持久化保存的数据
g_object.revokeSave().then((result) => {
    console.log("revokeSave callback");
    console.log("sessionId" + result.sessionId);
}, () => {
    console.error("revokeSave failed");
});
827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030
```

## distributedObject.createDistributedObject<sup>(deprecated)</sup>

createDistributedObject(source: object): DistributedObject


创建一个分布式数据对象。

> **说明:**
>
> 从 API Version 8 开始支持,从 API Version 9 开始废弃,建议使用distributedObject.create替代。

**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject

**参数:**

  | 参数名 | 类型 | 必填 | 说明 |
  | -------- | -------- | -------- | -------- |
  | source | object | 是 | 设置分布式数据对象的属性。 |

**返回值:**

| 类型 | 说明 |
| -------- | -------- |
| [DistributedObject](#distributedobjectdeprecated) | 创建完成的分布式数据对象。 |

**示例:**

```js
import distributedObject from '@ohos.data.distributedDataObject';
// 创建对象,对象包含4个属性类型,string,number,boolean和Object
let g_object = distributedObject.createDistributedObject({name:"Amy", age:18, isVis:false, parent:{mother:"jack mom",father:"jack Dad"}});
```

## DistributedObject<sup>(deprecated)</sup>

表示一个分布式数据对象。

### setSessionId<sup>(deprecated)</sup>

setSessionId(sessionId?: string): boolean

设置同步的sessionId,当可信组网中有多个设备时,多个设备间的对象如果设置为同一个sessionId,就能自动同步。

> **说明:**
>
> 从 API Version 8 开始支持,从 API Version 9 开始废弃,建议使用[setSessionId](#setsessionid9)替代。

**需要权限:** ohos.permission.DISTRIBUTED_DATASYNC。

**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject

**参数:**

  | 参数名 | 类型 | 必填 | 说明 |
  | -------- | -------- | -------- | -------- |
  | sessionId | string | 否 | 分布式数据对象在可信组网中的标识ID。如果要退出分布式组网,设置为""或不设置均可。 |

**返回值:**

  | 类型 | 说明 |
  | -------- | -------- |
  | boolean | true:标识设置sessionId成功。 <br>false:标识设置sessionId失败。 |

**示例:**

```js
import distributedObject from '@ohos.data.distributedDataObject';
let g_object = distributedObject.createDistributedObject({name:"Amy", age:18, isVis:false, parent:{mother:"jack mom",father:"jack Dad"}});;
// g_object加入分布式组网
g_object.setSessionId(distributedObject.genSessionId());
// 设置为""退出分布式组网
g_object.setSessionId("");
```

### on('change')<sup>(deprecated)</sup>

on(type: 'change', callback: Callback<{ sessionId: string, fields: Array&lt;string&gt; }>): void

监听分布式数据对象的变更。

> **说明:**
>
> 从 API Version 8 开始支持,从 API Version 9 开始废弃,建议使用[on('change')](#onchange9)替代。

**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject

**参数:**

  | 参数名 | 类型 | 必填 | 说明 |
  | -------- | -------- | -------- | -------- |
  | type | string | 是 | 事件类型,固定为'change',表示数据变更。 |
  | callback | Callback<{ sessionId: string, fields: Array&lt;string&gt; }> | 是 | 变更回调对象实例。<br>sessionId:标识变更对象的sessionId; <br>fields:标识对象变更的属性名。 |

**示例:**

```js
import distributedObject from '@ohos.data.distributedDataObject';  
let g_object = distributedObject.createDistributedObject({name:"Amy", age:18, isVis:false, parent:{mother:"jack mom",father:"jack Dad"}});
globalThis.changeCallback = (sessionId, changeData) => {
    console.info("change" + sessionId);
    if (changeData != null && changeData != undefined) {
        changeData.forEach(element => {
        console.info("changed !" + element + " " + g_object[element]);
        });
    }
}
g_object.on("change", globalThis.changeCallback);
```

### off('change')<sup>(deprecated)</sup>

off(type: 'change', callback?: Callback<{ sessionId: string, fields: Array&lt;string&gt; }>): void

当不再进行数据变更监听时,使用此接口删除对象的变更监听。

> **说明:**
>
> 从 API Version 8 开始支持,从 API Version 9 开始废弃,建议使用[off('change')](#offchange9)替代。

**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject

**参数:**

  | 参数名 | 类型 | 必填 | 说明 |
  | -------- | -------- | -------- | -------- |
  | type | string | 是 | 事件类型,固定为'change',表示数据变更。 |
  | callback | Callback<{ sessionId: string, fields: Array&lt;string&gt; }> | 否 | 需要删除的数据变更回调,若不设置则删除该对象所有的数据变更回调。<br>sessionId:标识变更对象的sessionId; <br>fields:标识对象变更的属性名。 |


**示例:**

```js
import distributedObject from '@ohos.data.distributedDataObject';  
let g_object = distributedObject.createDistributedObject({name:"Amy", age:18, isVis:false, parent:{mother:"jack mom",father:"jack Dad"}});
// 删除数据变更回调changeCallback
g_object.off("change", globalThis.changeCallback);
// 删除所有的数据变更回调
g_object.off("change");
```

### on('status')<sup>(deprecated)</sup>

on(type: 'status', callback: Callback<{ sessionId: string, networkId: string, status: 'online' | 'offline' }>): void

监听分布式数据对象的上下线。

> **说明:**
>
> 从 API Version 8 开始支持,从 API Version 9 开始废弃,建议使用[on('status')](#onstatus9)替代。

**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject

**参数:**

  | 参数名 | 类型 | 必填 | 说明 |
  | -------- | -------- | -------- | -------- |
  | type | string | 是 | 事件类型,固定为'status',表示对象上下线。 |
  | callback | Callback<{ sessionId: string, networkId: string, status: 'online' \| 'offline' }> | 是 | 监听上下线回调实例。<br>sessionId:标识变更对象的sessionId; <br>networkId:标识对象设备,即deviceId; <br>status:标识对象为'online'(上线)或'offline'(下线)的状态。 |

**示例:**

```js
import distributedObject from '@ohos.data.distributedDataObject';
globalThis.statusCallback = (sessionId, networkId, status) => {
    globalThis.response += "status changed " + sessionId + " " + status + " " + networkId;
}
let g_object = distributedObject.createDistributedObject({name:"Amy", age:18, isVis:false, parent:{mother:"jack mom",father:"jack Dad"}});
g_object.on("status", globalThis.statusCallback);
```

### off('status')<sup>(deprecated)</sup>

off(type: 'status', callback?: Callback<{ sessionId: string, deviceId: string, status: 'online' | 'offline' }>): void

当不再进行对象上下线监听时,使用此接口删除对象的上下线监听。

> **说明:**
>
> 从 API Version 8 开始支持,从 API Version 9 开始废弃,建议使用[off('status')](#offstatus9)替代。

**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject

**参数:**

  | 参数名 | 类型 | 必填 | 说明 |
  | -------- | -------- | -------- | -------- |
  | type | string | 是 | 事件类型,固定为'status',表示对象上下线。 |
  | callback | Callback<{ sessionId: string, deviceId: string, status: 'online' \| 'offline' }> | 否 | 需要删除的上下线回调,若不设置则删除该对象所有的上下线回调。<br>sessionId:标识变更对象的sessionId; <br>deviceId:标识变更对象的deviceId; <br>status:标识对象为'online'(上线)或'offline'(下线)的状态。 |


**示例:**

```js
import distributedObject from '@ohos.data.distributedDataObject'; 
let g_object = distributedObject.createDistributedObject({name:"Amy", age:18, isVis:false, parent:{mother:"jack mom",father:"jack Dad"}});
globalThis.statusCallback = (sessionId, networkId, status) => {
    globalThis.response += "status changed " + sessionId + " " + status + " " + networkId;
}
// 删除上下线回调changeCallback
g_object.off("status",globalThis.statusCallback);
// 删除所有的上下线回调
g_object.off("status");
W
wangxiyue 已提交
1031
```