js-apis-data-distributedobject.md 13.6 KB
Newer Older
1
# 分布式数据对象
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 17 18 19 20
```

## distributedDataObject.createDistributedObject

createDistributedObject(source: object): DistributedObject


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

G
ge-yafang 已提交
23
**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject。
W
wuyongning 已提交
24

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

L
li_juntao 已提交
27 28
  | 参数名 | 类型 | 必填 | 说明 |
  | -------- | -------- | -------- | -------- |
29
  | source | object | 是 | 设置分布式数据对象的属性。 |
G
ge-yafang 已提交
30

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

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

**示例:**
38

W
wufengshan 已提交
39 40 41
```js
import distributedObject from '@ohos.data.distributedDataObject';
// 创建对象,对象包含4个属性类型,string,number,boolean和Object
W
wufengshan 已提交
42
var g_object = distributedObject.createDistributedObject({name:"Amy", age:18, isVis:false, parent:{mother:"jack mom",father:"jack Dad"}});
W
wufengshan 已提交
43
```
L
li_juntao 已提交
44 45


46
## distributedObject.genSessionId
L
li_juntao 已提交
47 48 49

genSessionId(): string

W
wuyongning 已提交
50
随机创建一个sessionId。
L
li_juntao 已提交
51

G
ge-yafang 已提交
52
**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject。
L
li_juntao 已提交
53

W
wuyongning 已提交
54
**返回值:**
55

L
li_juntao 已提交
56 57 58 59
  | 类型 | 说明 |
  | -------- | -------- |
  | string | 随机创建的sessionId。 |

W
wuyongning 已提交
60
**示例:**
61

W
wufengshan 已提交
62 63 64 65
```js
import distributedObject from '@ohos.data.distributedDataObject';
var sessionId = distributedObject.genSessionId();
```
L
li_juntao 已提交
66

67
## SaveSuccessResponse<sup>9+</sup>
68 69 70 71 72 73 74 75 76 77 78

save接口回调信息。

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

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

79
## RevokeSaveSuccessResponse<sup>9+</sup>
80 81 82 83 84 85 86 87

revokeSave接口回调信息。

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

| 名称 | 类型 | 说明 |
| -------- | -------- | -------- |
| sessionId | string | 多设备协同的唯一标识。 |
L
li_juntao 已提交
88 89 90

## DistributedObject

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

L
li_juntao 已提交
93 94 95 96
### setSessionId

setSessionId(sessionId?: string): boolean

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

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

G
ge-yafang 已提交
101
**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject。
W
wuyongning 已提交
102

W
wuyongning 已提交
103
**参数:**
104

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

W
wuyongning 已提交
109
**返回值:**
110

W
wuyongning 已提交
111 112
  | 类型 | 说明 |
  | -------- | -------- |
113
  | boolean | true:标识设置sessionId成功。 <br>false:标识设置sessionId失败。 |
G
ge-yafang 已提交
114

W
wuyongning 已提交
115
**示例:**
116

W
wufengshan 已提交
117 118
```js
import distributedObject from '@ohos.data.distributedDataObject';
W
wufengshan 已提交
119
var g_object = distributedObject.createDistributedObject({name:"Amy", age:18, isVis:false, parent:{mother:"jack mom",father:"jack Dad"}});;
“wangxiyue” 已提交
120
// g_object加入分布式组网
W
wufengshan 已提交
121
g_object.setSessionId(distributedObject.genSessionId());
“wangxiyue” 已提交
122
// 设置为""退出分布式组网
W
wufengshan 已提交
123 124
g_object.setSessionId("");
```
L
li_juntao 已提交
125 126 127 128 129

### on('change')

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

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

G
ge-yafang 已提交
132
**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject。
L
li_juntao 已提交
133

W
wuyongning 已提交
134
**参数:**
135

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

W
wuyongning 已提交
141
**示例:**
142

143 144
```js
import distributedObject from '@ohos.data.distributedDataObject';  
W
wufengshan 已提交
145
var g_object = distributedObject.createDistributedObject({name:"Amy", age:18, isVis:false, parent:{mother:"jack mom",father:"jack Dad"}});
146 147 148 149 150 151 152 153 154 155
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 已提交
156 157 158 159 160

### off('change')

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

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

G
ge-yafang 已提交
163
**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject。
W
wuyongning 已提交
164

W
wuyongning 已提交
165
**参数:**
166

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


W
wuyongning 已提交
173
**示例:**
174

175 176
```js
import distributedObject from '@ohos.data.distributedDataObject';  
W
wufengshan 已提交
177
var g_object = distributedObject.createDistributedObject({name:"Amy", age:18, isVis:false, parent:{mother:"jack mom",father:"jack Dad"}});
“wangxiyue” 已提交
178
// 删除数据变更回调changeCallback
179
g_object.off("change", globalThis.changeCallback);
“wangxiyue” 已提交
180
// 删除所有的数据变更回调
181 182
g_object.off("change");
```
L
li_juntao 已提交
183 184 185 186 187

### on('status')

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

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

G
ge-yafang 已提交
190
**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject。
W
wuyongning 已提交
191

W
wuyongning 已提交
192
**参数:**
193

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

**示例:**
200

201 202 203 204 205
```js
import distributedObject from '@ohos.data.distributedDataObject';
globalThis.statusCallback = (sessionId, networkId, status) => {
    globalThis.response += "status changed " + sessionId + " " + status + " " + networkId;
}
W
wufengshan 已提交
206
var g_object = distributedObject.createDistributedObject({name:"Amy", age:18, isVis:false, parent:{mother:"jack mom",father:"jack Dad"}});
207 208
g_object.on("status", globalThis.statusCallback);
```
L
li_juntao 已提交
209 210 211 212 213

### off('status')

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

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

G
ge-yafang 已提交
216
**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject。
L
li_juntao 已提交
217

W
wuyongning 已提交
218
**参数:**
219

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


W
wuyongning 已提交
226
**示例:**
227

228 229
```js
import distributedObject from '@ohos.data.distributedDataObject'; 
W
wufengshan 已提交
230
var g_object = distributedObject.createDistributedObject({name:"Amy", age:18, isVis:false, parent:{mother:"jack mom",father:"jack Dad"}});
231 232 233
globalThis.statusCallback = (sessionId, networkId, status) => {
    globalThis.response += "status changed " + sessionId + " " + status + " " + networkId;
}
“wangxiyue” 已提交
234
// 删除上下线回调changeCallback
235
g_object.off("status",globalThis.statusCallback);
“wangxiyue” 已提交
236
// 删除所有的上下线回调
237 238
g_object.off("status");
```
239

240
### save<sup>9+</sup>
241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256

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

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

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

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

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

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

**参数:**
257

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

**示例:**
264

W
wufengshan 已提交
265 266 267 268
```js
import distributedObject from '@ohos.data.distributedDataObject';
var g_object = distributedObject.createDistributedObject({name:"Amy", age:18, isVis:false});
g_object.setSessionId("123456");
“wangxiyue” 已提交
269
g_object.save("local", (status, result) => {
W
wangxiyue 已提交
270
    console.log("save status = " + status);
W
wufengshan 已提交
271
    console.log("save callback");
W
wangxiyue 已提交
272 273 274
    console.info("save sessionId: " + result.sessionId);
    console.info("save version: " + result.version);
    console.info("save deviceId:  " + result.deviceId);
W
wufengshan 已提交
275 276
});
```
277

278
### save<sup>9+</sup>
279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294

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

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

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

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

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

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

**参数:**
295

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

W
wufengshan 已提交
300
**返回值:**
301 302 303

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

**示例:**

W
wufengshan 已提交
308 309 310 311
```js
import distributedObject from '@ohos.data.distributedDataObject';
var g_object = distributedObject.createDistributedObject({name:"Amy", age:18, isVis:false});
g_object.setSessionId("123456");
“wangxiyue” 已提交
312
g_object.save("local").then((result) => {
W
wufengshan 已提交
313 314 315 316
    console.log("save callback");
    console.info("save sessionId " + result.sessionId);
    console.info("save version " + result.version);
    console.info("save deviceId " + result.deviceId);
“wangxiyue” 已提交
317
}, () => {
W
wufengshan 已提交
318 319 320
    console.error("save failed");
});
```
321

322
### revokeSave<sup>9+</sup>
323

324
revokeSave(callback: AsyncCallback&lt;RevokeSaveSuccessResponse&gt;): void
325 326 327 328 329 330 331 332 333

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

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

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

**参数:**
334

335 336
  | 参数名 | 类型 | 必填 | 说明 |
  | -------- | -------- | -------- | -------- |
W
wufengshan 已提交
337
  | callback | AsyncCallback&lt;[RevokeSaveSuccessResponse](#revokesavesuccessresponse9)&gt; | 否 | 回调函数。返回RevokeSaveSuccessResponse,包含sessionId。 |
338 339 340

**示例:**

W
wufengshan 已提交
341 342 343 344
```js
import distributedObject from '@ohos.data.distributedDataObject';
var g_object = distributedObject.createDistributedObject({name:"Amy", age:18, isVis:false});
g_object.setSessionId("123456");
“wangxiyue” 已提交
345
g_object.revokeSave((result, data) => {
W
wufengshan 已提交
346 347 348
  console.log("revokeSave callback");
});
```
349

350
### revokeSave<sup>9+</sup>
351

352
revokeSave(): Promise&lt;RevokeSaveSuccessResponse&gt;
353 354 355 356 357 358 359 360

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

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

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

W
wufengshan 已提交
361
**返回值:**
362 363 364

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

**示例:**

W
wufengshan 已提交
369 370 371 372
```js
import distributedObject from '@ohos.data.distributedDataObject';
var g_object = distributedObject.createDistributedObject({name:"Amy", age:18, isVis:false});
g_object.setSessionId("123456");
“wangxiyue” 已提交
373
g_object.revokeSave().then((result) => {
W
wufengshan 已提交
374 375
    console.log("revokeSave callback");
    console.log("sessionId" + result.sessionId);
“wangxiyue” 已提交
376
}, () => {
W
wufengshan 已提交
377 378 379
    console.error("revokeSave failed");
});
```