【发布时间】:2018-05-10 21:50:16
【问题描述】:
每当在 JSONStore 中输入任何 json 时,它都会像下面这样包装输入:{"json":{JSON_INPUT},"_id":1}。现在,如果我将 id 更改为 string 并尝试将其推送到 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);
}
如果我能提供任何其他意见,请告诉我。
注意:我已通过提供如下示例输入来确认这一点: {“名称”:“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) {
})
}
【问题讨论】:
-
您能在这里分享代码 sn-ps 或完整项目吗?代码胜于雄辩
-
我在这个问题中添加的几个 sn-ps。 stackoverflow.com/questions/47489647/…。现在我找到了一种解决方法,我已将数据作为其推送到 jsonstore 中,但是在重新加载或刷新数据时,我只使用“json”标签内的有效负载。我意识到这不应该是解决方案,可能是一个非常愚蠢的解决方法。
-
您将所有 JSON 作为查询参数传递,这是一个坏主意 - 某些客户端对查询参数的大小有限制。而是将 JSON 作为正文的一部分发送。在将 JSON 作为查询参数发送时,请确保数据经过正确的 URL 编码。
-
我们应该如何处理覆盖真实数据的包装器({"json":{"data":""},"_id":""})。当我调用 getdirtydocs 时,它附带了这个包装器,现在如果我通过这个 enitre 事情就很好了,但是它有一个不同的 _id 它将创建另一个记录,甚至结构也与真实数据不同。如果我进入返回的对象并仅发送数据部分,它会再次给出相同的错误(如上所述)。而且我已经稍微更新了代码,我不再在查询参数中发送它,我已经更新了我的问题。抱歉,如果这很烦人,我对此很陌生。
标签: ibm-mobilefirst cloudant mobilefirst-adapters jsonstore