js-apis-data-distributedobject.md 27.5 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

W
wangxiyue 已提交
18
create(context: Context, source: object): DataObject
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
  | 参数名 | 类型 | 必填 | 说明 |
  | -------- | -------- | -------- | -------- |
28
  | context | Context | 是 | 应用的上下文。 <br>FA模型的应用Context定义见[Context](js-apis-inner-app-context.md)<br>Stage模型的应用Context定义见[Context](js-apis-inner-application-uiAbilityContext.md)。 |
29
  | source | object | 是 | 设置分布式数据对象的属性。 |
30

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

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

**示例:**
38

39 40
FA模型示例:

W
wufengshan 已提交
41
```js
42
// 导入模块
W
wufengshan 已提交
43
import distributedObject from '@ohos.data.distributedDataObject';
44
import featureAbility from '@ohos.ability.featureAbility';
L
LiRui 已提交
45
import { BusinessError } from '@ohos.base';
46 47
// 获取context
let context = featureAbility.getContext();
L
LiRui 已提交
48 49 50 51 52 53 54 55 56 57 58
interface sourceObject{
    name: string,
    age: number,
    isVis: boolean
}
let source: sourceObject = {
    name: "amy",
    age:18,
    isVis:false
}
let g_object: distributedObject.DataObject = distributedObject.create(context, source);
W
wufengshan 已提交
59
```
L
li_juntao 已提交
60

61 62 63 64 65
Stage模型示例:

```ts
// 导入模块
import distributedObject from '@ohos.data.distributedDataObject';
66
import UIAbility from '@ohos.app.ability.UIAbility';
L
LiRui 已提交
67 68 69 70 71 72 73 74 75
import { BusinessError } from '@ohos.base';
import window from '@ohos.window';

let g_object: distributedObject.DataObject = null;
interface sourceObject{
    name: string,
    age: number,
    isVis: boolean
}
76
class EntryAbility extends UIAbility {
L
LiRui 已提交
77 78 79 80 81 82 83
    onWindowStageCreate(windowStage: window.WindowStage) {
        let source: sourceObject = {
            name: "amy",
            age:18,
            isVis:false
        }
        g_object = distributedObject.create(this.context, source);
84 85 86
    }
}
```
L
li_juntao 已提交
87

88
## distributedObject.genSessionId
L
li_juntao 已提交
89 90 91

genSessionId(): string

W
wuyongning 已提交
92
随机创建一个sessionId。
L
li_juntao 已提交
93

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

W
wuyongning 已提交
96
**返回值:**
97

L
li_juntao 已提交
98 99 100 101
  | 类型 | 说明 |
  | -------- | -------- |
  | string | 随机创建的sessionId。 |

W
wuyongning 已提交
102
**示例:**
103

W
wufengshan 已提交
104 105
```js
import distributedObject from '@ohos.data.distributedDataObject';
L
LiRui 已提交
106
let sessionId: string = distributedObject.genSessionId();
W
wufengshan 已提交
107
```
L
li_juntao 已提交
108

109
## SaveSuccessResponse<sup>9+</sup>
110 111 112

save接口回调信息。

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

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

121
## RevokeSaveSuccessResponse<sup>9+</sup>
122 123 124

revokeSave接口回调信息。

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

W
wangdengze 已提交
127 128 129
| 名称 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| sessionId | string | 是 | 多设备协同的唯一标识。 |
L
li_juntao 已提交
130

W
wangxiyue 已提交
131
## DataObject
L
li_juntao 已提交
132

W
wangxiyue 已提交
133
表示一个分布式数据对象。在使用以下接口前,需调用[create()](#distributedobjectcreate9)获取DataObject对象。
134

135
### setSessionId<sup>9+</sup>
L
li_juntao 已提交
136

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

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

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

143 144 145 146 147 148 149 150 151 152 153
**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject

**参数:**

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

**错误码:**

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

156
  | 错误码ID | 错误信息 |
157
  | -------- | -------- |
L
LiRui 已提交
158
  | 15400001 | Create table failed.|
159 160 161 162 163 164

**示例:**

```js
// g_object加入分布式组网
g_object.setSessionId(distributedObject.genSessionId(), ()=>{
W
wangxiyue 已提交
165
    console.info("join session");
166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186
});
```

### 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 已提交
187
  以下错误码的详细介绍参见[分布式数据对象错误码](../errorcodes/errorcode-distributed-dataObject.md)
188

189
  | 错误码ID | 错误信息 |
190
  | -------- | -------- |
L
LiRui 已提交
191
  | 15400001 | Create table failed.|
192 193 194 195 196 197

**示例:**

```js
// g_object加入分布式组网
g_object.setSessionId(distributedObject.genSessionId(), ()=>{
W
wangxiyue 已提交
198
    console.info("join session");
199 200 201
});
// 退出分布式组网
g_object.setSessionId(() => {
L
LiRui 已提交
202
    console.info("leave all session.");
203 204 205 206 207 208 209 210 211 212 213 214
});
```

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

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

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

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

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

W
wuyongning 已提交
216
**参数:**
217

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

W
wuyongning 已提交
222
**返回值:**
223

224 225 226 227 228 229
| 类型 | 说明 |
| -------- | -------- |
| Promise&lt;void&gt; | Promise对象。|

**错误码:**

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

232
  | 错误码ID | 错误信息 |
W
wuyongning 已提交
233
  | -------- | -------- |
L
LiRui 已提交
234
  | 15400001 | Create table failed.|
G
ge-yafang 已提交
235

W
wuyongning 已提交
236
**示例:**
237

W
wufengshan 已提交
238
```js
239 240 241
// g_object加入分布式组网
g_object.setSessionId(distributedObject.genSessionId()).then (()=>{
    console.info("join session.");
L
LiRui 已提交
242
    }).catch((error: BusinessError)=>{
243 244 245 246
        console.info("error:" + error.code + error.message);
});
// 退出分布式组网
g_object.setSessionId().then (()=>{
L
LiRui 已提交
247 248
    console.info("leave all session.");
    }).catch((error: BusinessError)=>{
249 250
        console.info("error:" + error.code + error.message);
});
W
wufengshan 已提交
251
```
L
li_juntao 已提交
252

253
### on('change')<sup>9+</sup>
L
li_juntao 已提交
254 255 256

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

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

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

W
wuyongning 已提交
261
**参数:**
262

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

W
wuyongning 已提交
268
**示例:**
269

270
```js
L
LiRui 已提交
271 272 273
interface ChangeCallback {
  sessionId: string,
  fields: Array<string>
274
}
L
LiRui 已提交
275 276 277 278 279 280 281 282
g_object.on("change", (changeData: ChangeCallback) => {
    console.info("change" + changeData.sessionId);
    if (changeData.fields != null && changeData.fields != undefined) {
        for (let index: number = 0; index < changeData.fields.length; index++) {
            console.info("changed !" + changeData.fields[index] + " " + g_object[changeData.fields[index]]);
        }
    }
});
283 284 285
```

### off('change')<sup>9+</sup>
L
li_juntao 已提交
286 287 288

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

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

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

W
wuyongning 已提交
293
**参数:**
294

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


W
wuyongning 已提交
301
**示例:**
302

303
```js
304
// 删除数据变更回调changeCallback
L
LiRui 已提交
305 306 307 308 309 310 311 312
g_object.off("change", (changeData:ChangeCallback) => {
    console.info("change" + changeData.sessionId);
    if (changeData.fields != null && changeData.fields != undefined) {
        for (let index: number = 0; index < changeData.fields.length; index++) {
            console.info("changed !" + changeData.fields[index] + " " + g_object[changeData.fields[index]]);
        }
    }
});
313 314 315 316 317
// 删除所有的数据变更回调
g_object.off("change");
```

### on('status')<sup>9+</sup>
L
li_juntao 已提交
318 319 320

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

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

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

W
wuyongning 已提交
325
**参数:**
326

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

**示例:**
333

334
```js
L
LiRui 已提交
335 336 337 338
interface onStatusCallback {
    sessionId: string,
    networkId: string,
    status: 'online' | 'offline'
339
}
L
LiRui 已提交
340 341 342 343

g_object.on("status", (statusCallback:onStatusCallback) => {
    console.info("status changed " + statusCallback.sessionId + " " + statusCallback.status + " " + statusCallback.networkId);
});
344
```
L
li_juntao 已提交
345

346
### off('status')<sup>9+</sup>
L
li_juntao 已提交
347 348 349

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

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

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

W
wuyongning 已提交
354
**参数:**
355

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


W
wuyongning 已提交
362
**示例:**
363

364
```js
L
LiRui 已提交
365 366 367 368
interface offStatusCallback {
    sessionId: string,
    networkId: string,
    status: 'online' | 'offline'
369
}
“wangxiyue” 已提交
370
// 删除上下线回调changeCallback
L
LiRui 已提交
371 372 373
g_object.off("status", (statusCallback:StatusCallback) => {
    console.info("status changed " + statusCallback.sessionId + " " + statusCallback.status + " " + statusCallback.networkId);
});
“wangxiyue” 已提交
374
// 删除所有的上下线回调
375 376
g_object.off("status");
```
377

378
### save<sup>9+</sup>
379 380 381 382 383 384 385 386 387 388 389 390 391

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

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

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

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

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

392
**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject
393 394

**参数:**
395

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

**示例:**
402

W
wangxiyue 已提交
403
```ts
W
wufengshan 已提交
404
g_object.setSessionId("123456");
L
LiRui 已提交
405
g_object.save("local", (err: BusinessError, result:distributedObject.SaveSuccessResponse) => {
W
wangxiyue 已提交
406 407 408 409 410
    if (err) {
        console.info("save failed, error code = " + err.code);
        console.info("save failed, error message: " + err.message);
        return;
    }
W
wangxiyue 已提交
411
    console.info("save callback");
W
wangxiyue 已提交
412 413 414
    console.info("save sessionId: " + result.sessionId);
    console.info("save version: " + result.version);
    console.info("save deviceId:  " + result.deviceId);
W
wufengshan 已提交
415 416
});
```
417

418
### save<sup>9+</sup>
419 420 421 422 423 424 425 426 427 428 429 430 431

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

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

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

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

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

432
**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject
433 434

**参数:**
435

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

W
wufengshan 已提交
440
**返回值:**
441 442 443

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

**示例:**

W
wufengshan 已提交
448
```js
449
g_object.setSessionId("123456");
L
LiRui 已提交
450
g_object.save("local").then((result: distributedObject.SaveSuccessResponse) => {
W
wangxiyue 已提交
451
    console.info("save callback");
W
wufengshan 已提交
452 453 454
    console.info("save sessionId " + result.sessionId);
    console.info("save version " + result.version);
    console.info("save deviceId " + result.deviceId);
L
LiRui 已提交
455
}).catch((err: BusinessError) => {
W
wangxiyue 已提交
456 457
    console.info("save failed, error code = " + err.code);
    console.info("save failed, error message: " + err.message);
W
wufengshan 已提交
458 459
});
```
460

461
### revokeSave<sup>9+</sup>
462

463
revokeSave(callback: AsyncCallback&lt;RevokeSaveSuccessResponse&gt;): void
464 465 466 467 468 469

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

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

470
**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject
471 472

**参数:**
473

474 475
  | 参数名 | 类型 | 必填 | 说明 |
  | -------- | -------- | -------- | -------- |
476
  | callback | AsyncCallback&lt;[RevokeSaveSuccessResponse](#revokesavesuccessresponse9)&gt; | 是 | 回调函数。返回RevokeSaveSuccessResponse,包含sessionId。 |
477 478 479

**示例:**

W
wufengshan 已提交
480 481
```js
g_object.setSessionId("123456");
W
wangxiyue 已提交
482
// 持久化数据
L
LiRui 已提交
483
g_object.save("local", (err: BusinessError, result: distributedObject.SaveSuccessResponse) => {
W
wangxiyue 已提交
484 485 486 487 488
    if (err) {
        console.info("save failed, error code = " + err.code);
        console.info("save failed, error message: " + err.message);
        return;
    }
W
wangxiyue 已提交
489
    console.info("save callback");
W
wangxiyue 已提交
490 491 492
    console.info("save sessionId: " + result.sessionId);
    console.info("save version: " + result.version);
    console.info("save deviceId:  " + result.deviceId);
W
wangxiyue 已提交
493 494
});
// 删除持久化保存的数据
L
LiRui 已提交
495
g_object.revokeSave((err: BusinessError, result: distributedObject.RevokeSaveSuccessResponse) => {
W
wangxiyue 已提交
496 497 498 499 500 501 502
    if (err) {
      console.info("revokeSave failed, error code = " + err.code);
      console.info("revokeSave failed, error message: " + err.message);
      return;
    }
    console.info("revokeSave callback");
    console.info("revokeSave sessionId " + result.sessionId);
W
wufengshan 已提交
503 504
});
```
505

506
### revokeSave<sup>9+</sup>
507

508
revokeSave(): Promise&lt;RevokeSaveSuccessResponse&gt;
509 510 511 512 513 514

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

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

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

W
wufengshan 已提交
517
**返回值:**
518 519 520

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

**示例:**

W
wangxiyue 已提交
525
```ts
W
wufengshan 已提交
526
g_object.setSessionId("123456");
W
wangxiyue 已提交
527
// 持久化数据
L
LiRui 已提交
528
g_object.save("local").then((result: distributedObject.SaveSuccessResponse) => {
W
wangxiyue 已提交
529
    console.info("save callback");
530 531 532
    console.info("save sessionId " + result.sessionId);
    console.info("save version " + result.version);
    console.info("save deviceId " + result.deviceId);
L
LiRui 已提交
533
}).catch((err: BusinessError) => {
W
wangxiyue 已提交
534 535
    console.info("save failed, error code = " + err.code);
    console.info("save failed, error message: " + err.message);
536
});
W
wangxiyue 已提交
537
// 删除持久化保存的数据
L
LiRui 已提交
538
g_object.revokeSave().then((result: distributedObject.RevokeSaveSuccessResponse) => {
W
wangxiyue 已提交
539 540
    console.info("revokeSave callback");
    console.info("sessionId" + result.sessionId);
L
LiRui 已提交
541
}).catch((err: BusinessError)=> {
W
wangxiyue 已提交
542 543
    console.info("revokeSave failed, error code = " + err.code);
    console.info("revokeSave failed, error message = " + err.message);
W
wangxiyue 已提交
544
});
545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575
```

## 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';
L
LiRui 已提交
576 577 578 579 580 581 582 583 584 585 586
interface sourceObject{
    name: string,
    age: number,
    isVis: boolean
}
let source: sourceObject = {
    name: "amy",
    age:18,
    isVis:false
}
let g_object: distributedObject.DistributedObject = distributedObject.createDistributedObject(source);
587 588 589 590
```

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

W
wangxiyue 已提交
591
表示一个分布式数据对象。在使用以下接口前,需调用[createDistributedObject()](#distributedobjectcreatedistributedobjectdeprecated)获取DistributedObject对象。
592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622

### 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';
L
LiRui 已提交
623 624 625 626 627 628 629 630 631 632 633
interface sourceObject{
    name: string,
    age: number,
    isVis: boolean
}
let source: sourceObject = {
    name: "amy",
    age:18,
    isVis:false
}
let g_object: distributedObject.DistributedObject = distributedObject.createDistributedObject(source);
634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661
// 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
W
wangxiyue 已提交
662
import distributedObject from '@ohos.data.distributedDataObject';
L
LiRui 已提交
663 664 665 666
interface sourceObject{
    name: string,
    age: number,
    isVis: boolean
667
}
L
LiRui 已提交
668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685
interface ChangeCallback {
    sessionId: string,
    fields: Array<string>
}
let source: sourceObject = {
    name: "amy",
    age:18,
    isVis:false
}
let g_object: distributedObject.DistributedObject = distributedObject.createDistributedObject(source);
g_object.on("change", (changeData:ChangeCallback) => {
    console.info("change" + changeData.sessionId);
    if (changeData.fields != null && changeData.fields != undefined) {
        for (let index: number = 0; index < changeData.fields.length; index++) {
            console.info("changed !" + changeData.fields[index] + " " + g_object[changeData.fields[index]]);
        }
    }
});
686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710
```

### 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
W
wangxiyue 已提交
711
import distributedObject from '@ohos.data.distributedDataObject';
L
LiRui 已提交
712 713 714 715 716 717 718 719 720 721 722 723 724 725 726
interface sourceObject{
    name: string,
    age: number,
    isVis: boolean
}
interface ChangeCallback {
    sessionId: string,
    fields: Array<string>
}
let source: sourceObject = {
    name: "amy",
    age:18,
    isVis:false
}
let g_object: distributedObject.DistributedObject = distributedObject.createDistributedObject(source);
727
// 删除数据变更回调changeCallback
L
LiRui 已提交
728 729 730 731 732 733 734 735
g_object.off("change", (changeData:ChangeCallback) => {
    console.info("change" + changeData.sessionId);
    if (changeData.fields != null && changeData.fields != undefined) {
        for (let index: number = 0; index < changeData.fields.length; index++) {
            console.info("changed !" + changeData.fields[index] + " " + g_object[changeData.fields[index]]);
        }
    }
});
736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762
// 删除所有的数据变更回调
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';
L
LiRui 已提交
763 764 765 766 767 768 769 770 771 772

interface sourceObject{
    name: string,
    age: number,
    isVis: boolean
}
interface StatusCallback {
    sessionId: string,
    networkId: string,
    status: 'online' | 'offline'
773
}
L
LiRui 已提交
774 775 776 777 778 779 780 781 782 783
let source: sourceObject = {
    name: "amy",
    age:18,
    isVis:false
}
let g_object: distributedObject.DistributedObject = distributedObject.createDistributedObject(source);

g_object.on("status", (statusCallback:StatusCallback) => {
    console.info("status changed " + statusCallback.sessionId + " " + statusCallback.status + " " + statusCallback.networkId);
});
784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808
```

### 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
W
wangxiyue 已提交
809
import distributedObject from '@ohos.data.distributedDataObject';
L
LiRui 已提交
810 811 812 813 814 815 816 817 818
interface sourceObject{
    name: string,
    age: number,
    isVis: boolean
}
interface offStatusCallback {
    sessionId: string,
    deviceId: string,
    status: 'online' | 'offline'
819
}
L
LiRui 已提交
820 821 822 823 824 825
let source: sourceObject = {
    name: "amy",
    age:18,
    isVis:false
}
let g_object: distributedObject.DistributedObject = distributedObject.createDistributedObject(source);
826
// 删除上下线回调changeCallback
L
LiRui 已提交
827 828 829
g_object.off("status", (statusCallback:offStatusCallback) => {
    console.info("status changed " + statusCallback.sessionId + " " + statusCallback.status + " " + statusCallback.deviceId);
});
830 831
// 删除所有的上下线回调
g_object.off("status");
W
wangxiyue 已提交
832
```