0

我们有一个用 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='%@'&parameter2='%@'&parameter3='%@'&parameter4='%@'&parameter5=%ldm&parameter6='%@'&parameter7='%@'&parameter8='%@'", 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 中删除了实际参数值和属性,但语法保持不变。

任何帮助将非常感激。谢谢你。

4

0 回答 0