JSONStore 与 Cloudant DB 的离线同步问题

Issues in Offline synchronization of JSONStore with Cloudant DB

每当在 JSONStore 中输入任何 json 时,它都会像下面这样包装输入:{"json":{JSON_INPUT},"_id":1}。现在,如果我将 id 更改为字符串并尝试将其推送到 cloudant,它会成功推送它。但这不是正确的方法,因为它将包含包装器,当您下次尝试将其与 JSONStore 同步时,它将添加另一个类似的包装器,这将破坏您的 HTML 页面。现在我尝试的是向下一级 (var str=dirtyDocuments[i].json) 并仅发送输入 (str),每次都会出现以下错误:

[错误] FWLST0105E:由于 java.io.IOException 无法上传用户日志文件:第 1 行第 2784 列出现意外字符“\u0000”。

下面是将数据同步回 Cloudant DB 的代码:

pushToAdapter(){
let collectionName = 'activities';
let options = {};
WL.JSONStore.get(collectionName).getAllDirty(options)
.then(function (dirtyDocuments) {
for(var i=0; i < dirtyDocuments.length ; i++){
      var id = dirtyDocuments[i]._id;
      dirtyDocuments[i]._id=id.toString();}
      var resource = new WLResourceRequest("/adapters/ServiceAdapter/pushActivities", WLResourceRequest.GET)
      resource.setQueryParameter('params', dirtyDocuments)
      resource.send().then((success) => {
                console.log('-->JSONStore : Push document success', success)
              }, (failure) => {
                console.log('-->JSONStore: Push document failed', failure)
          })

  })
}

适配器方法:

function pushActivities(dirtyDocs) {
var path = 'employees';
    var input = {
    method : 'post',
    returnedContentType : 'json',
    path : path,
    body: {
    content: JSON.stringify(dirtyDocs),
    contentType: 'application/json'
}
};
return MFP.Server.invokeHttp(input);
} 

如果我可以提供任何其他帮助,请告诉我。

注意:我已经通过提供这样的示例输入来确认这一点: {"name":"abc"}。但它是一样的,所以我可以确保我的 json 输入中没有这样的字符。

编辑:

pushToAdapter(){
let collectionName = 'activities';
let options = {};
WL.JSONStore.get(collectionName).getAllDirty(options).then(function (dirtyDocs) {
for(var i=0;i<dirtyDocs.length;i++){
    var id=dirtyDocs[i]._id;
    id=id.toString();
    dirtyDocs[i]._id=id;
  }

WL.Client.invokeProcedure({
adapter : 'ServiceAdapter',
procedure : 'pushActivities',
parameters : dirtyDocs  // If i use say dirtyDocs[0].json it fails.
}).then(
(success)=>{console.log('success',success)},
(failure)=>{console.log('failure',failure)})}).then(function (responseFromAdapter) {
})
}

下面是对我有用的更新后的 pushToAdapter() 方法。

pushToAdapter(){
    console.log("Inside push to adapter");
    let collectionName = 'activities';
    let options = {};
    WL.JSONStore.get(collectionName).getAllDirty(options).then(function (dirtyDocs) {
    var temp=[dirtyDocs[0].json];   //Here its only for one element.
    WL.Client.invokeProcedure({
        adapter : 'FieldsServiceAdapter',
        procedure : 'pushActivities',
        parameters : temp
    }).then(
        (success)=>{console.log('success',success)},
        (failure)=>{console.log('failure',failure)})}).then(function (responseFromAdapter) {
        console.log('Response from adapter',responseFromAdapter)
    })
}

所以变化基本上是它需要一个数组,而我只是发送了一个 JSON 字符串。可能是一个非常愚蠢的错误。

注意:上面提到的错误与此无关,这是我后来发现的解析错误。以上错误可能是因为某些日志文件无法上传到服务器。