我们有一个用 Objective-C 编写的旧应用程序SMP framework SMP 3.0 SP12
,后端是SAP SMP Odata services
,它是一个基于离线的应用程序,但很少有功能只能在在线模式下工作。我们能够成功地与后端建立连接并登录到应用程序。
登录后,我们POST/GET
使用 SMP 框架scheduleCreateEntity
离线方法发起各种请求,当实体保存在离线数据库中时,我们调用 -(void) scheduleFlushQueuedRequestsWithDelegate:(id<SODataOfflineStoreFlushDelegate>) delegate;
请求在后端服务上应用更改,或者我们可以使用FunctionImports
方法直接向 onlineStore 发出请求。我们使用scheduleCreateEntity
方法发出的所有 POST 请求都已成功发布,我们甚至收到了正确的响应,同样地,FunctionImports
除了少数调用之外,它们中的大多数都工作正常,我们收到500 个内部服务器错误。
我们还尝试与可以在此问题上为我们提供支持的后端团队联系,他们确认我的请求确实到达了 SAP,并且响应在 SAP 端是成功的,但我们从未在我们的应用程序中收到成功响应。我们收到的响应是 500 internal server ERROR 。我在下面共享了有效负载请求和 FunctionImport 语法:
SMP 框架中定义的 functionImport 语法如下所示:
/**
* Schedule a FunctionImport
* Supported return types are Entiy or EntitySet. Please check the metadata because e.g. Complex Type is an unsupported return type.
* @param resourcePath the path of the resource with FunctionImport
* @param options additional paramaters dictionary
* @param completionBlock block called once execution completes; note that the completion block is redirected to the main UI thread
*/
- (id<SODataRequestExecution>) scheduleFunction:(NSString*)resourcePath
options:(NSDictionary*)options
completion:(void (^)(id<SODataRequestExecution> requestExecution, NSError *error))completionBlock;
调用失败的 FunctionImport 的有效负载请求如下:
-(void)sendRequestPostDatal:(Material*)mi
successBlock:(void (^)(id<SODataRequestExecution>))successBlock
errorBlock:(void (^)(NSError*))errorBlock{
[self checkOpenOnlineStoreSuccessBlock:^{
NSString * resourcePath = [NSString stringWithFormat:@"entity?parameter1='%@'¶meter2='%@'¶meter3='%@'¶meter4='%@'¶meter5=%ldm¶meter6='%@'¶meter7='%@'¶meter8='%@'", mi.value, mi.value, mi.value, mi.value, (long)mi.value, mi.value, mi.value, mi.value];
[self.onlineStore scheduleFunction:resourcePath options:nil completion:^(id<SODataRequestExecution> requestExecution, NSError* error){
if( error != nil ){
[UtilityManager dismissLoadingAlert];
}
[self callResponse:requestExecution error:error successBlock:successBlock errorBlock:errorBlock];
}];
}];
}
我已从 resourcePath 中删除了实际参数值和属性,但语法保持不变。
任何帮助将非常感激。谢谢你。