嗨,丹,
一旦设备在线,可以从设备上传(刷新)多少条记录。例如,如果我在设备脱机时进行500次更改(创建、更新和删除),我是否能够一次刷新所有这些更改?如果是,所有这些更改是否会在一次调用中推送到服务器?
此致,
Siva
我相信答案是肯定的,所有更改都可以在一次刷新调用中推送到服务器上。
如果您希望查看所做的底层请求,本指南中的监视HTTP/HTTPS请求部分可能会有所帮助。
Kapsel入门-附录F-提示(SP09+)
使用Fiddler应该可以查看您的设备和SMP服务器以及SMP服务器和后端之间的通信。
希望有帮助,
Dan van Leeuwen
嗨Daniel,
目前我正在使用基于Kapsel的混合应用程序,目标是Windows 8.1平台。SMP SDK版本为SP08.
应用中的场景之一是在子节点离线创建一条记录,并将其附加到现有父节点。然后在同步过程中,创建的记录将在后端更新。更具体地说,模型看起来像:
WorkOrderSet:[
0:{
WorkOrderID:"111",
WorkOrderDesc:"Description 111",
Measurements:[]
},
1:{
WorkOrderID:"111",
WorkOrderDesc:"Description 111",
Measurements:[]
}
现在我想用WorkOrderID:"111"为WorkOrder创建一个测量记录。创建记录需要在脱机模式下进行。
以下是在联机模式下工作的代码片段:
var url=smpUrl+appId+"\WorkOrderSet";
var workOrderData={
"UserID":"11",
"WONumber":"W11",
};
工单数据测量=[{
"UserID":"11",
"WONumber":"W11",
"MeasurementID":"M11",
"Reading":"5"
};
var oHeaders={};
oHeaders['Authorization']=authStr;
oHeaders['X-SMP-APPCID']=APPCID;
oHeaders['Content-Type']="application/atom+xml";
oHeaders['X-csrf-token']="Fetch";
var request={
headers:oHeaders,
requestUri:url,
method:"GET"
};
OData.请求(请求,功能(数据,响应){
var csrfToken=响应.标题['x-csrf-token'];
oHeaders['x-csrf-token']=csrfToken;
var request={
headers:oHeaders,
requestUri:url,
data:workOrderData,
method:"POST"
};
OData.请求(request,successCallback,errorCallback)
}
对于离线模式,我尝试了两种解决方案:
解决方案1:
相同的代码因为它在联机模式下使用语句sap.OData.applyhtpclient应用程序(). 首先,GET调用成功,但是它没有返回任何x-csrf-token。其次,调用后返回错误为"OfflinePluginError-Code:9-Message:Invalid JSON String"
解决方案2:
使用deep insert,如下所述:#deepinsert
代码片段为:
var url=smpUrl+appId+"\WorkOrderSet";
var metaID="(UserID='11',WONumber='W11')";
var measurementData={
"UserID":"11",
"WONumber":"W11",
"MeasurementID":"M11",
"Reading":"5"
"WorkOrderSet":{
"uu metadata":{
"uri":metaID
}
}
};
var oHeaders={};
oHeaders['Authorization']=authStr;
oHeaders['X-SMP-APPCID']=APPCID;
var request={
headers:oHeaders,
requestUri:url,
数据:测量数据,
方法:"POST"
};
sap.OData.applyhtpclient应用程序();
OData.请求(request,successCallback,errorCallback);
POST request失败,出现错误【object object】
任何帮助都将不胜感激。
谢谢,
Chirag.
嗨,丹尼尔,
有刷新和刷新的问题。本地创建的实体在flush调用后成功发送到后端,但我仍然在我的设备中看到记录。
以下是场景:
-->使用临时订单号(我分配唯一编号)在设备中创建新订单
-->刷新存储。刷新成功,在后端创建了订单号。
-->调用刷新后,我仍然看到带有临时编号的订单。
我假设本地创建的记录不应该存在于设备中。但事实并非如此。
是否有办法获取后端创建的每条记录的成功消息?我想不出用冲水的方法。
问候,
默蒂
嗨默蒂,
你的场景是只上传的吗?如果是这种情况,那么根据我的经验,框架仍然不支持只上传的场景(丹尼尔确认)。
这里的解决方案是刷新后删除本地创建的实体。
谢谢,
Chirag。
Hi Chirag,
我的场景是上传和下载。由于实际订单号将在创建时在后端生成,因此我为该记录分配了临时编号。
根据订单类型,在执行刷新时将下载该订单。
我的理解是,本地创建的记录将在刷新后被删除,而刷新未发生。
敬,
Murthy
嗨Murty,nba大数据,
您所描述的问题只有在实体的主键值之间存在差异时才会发生。只需确保设备中可用的实体和从后端返回的实体的主键字段值相同。
谢谢,
Chirag。
Hi Chirag,
在设备中创建记录时,由于我分配主键(临时值),主键肯定会不同。当记录发送到后端时,即创建实际数字的时间。
是否有方法用后端生成的数字更新本地创建的记录?
注意,
Murthy