功能实现SAP Cloud Application编程模型

2020-08-18 12:05发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


亲爱的,我正在使用Java在SAP Cloud Application Programming Model上实现功能( https://help.sap.com/viewer/65de2977205c403bbc107264b8eccf4b/Cloud/en-US/94c7f17ecc0b4508b3f4c5ed85bd7760.html可以在我们的响应集内显示,) 像下面这样:

"提供用于创建成功或失败的函数调用的响应的方法:

  • 在成功调用函数的情况下,可以使用setSuccess方法以下列之一返回数据:
    • 包含复杂类型的地图列表
    • 包含实体的EntityData列表
    • 包含原始类型的对象列表
  • 如果函数调用失败,则可以使用setError方法返回ErrorResponse实例,其中包含错误消息和状态代码。"

为简单起见,我在EntityData中创建了两个实例,并将其设置为像下面这样的响应对象:

服务定义:

使用来自'../db/data-model'的br.com.strategiatec;
 服务SalesmanService {
   实体销售员作为strategiatec.Salesman的预测;
   函数findSalesmanByLocation()返回Salesman;
 } 

我的实现:

 @Function(名称=" findSalesmanByLocation",serviceName =" SalesmanService")
 public OperationResponse findSalesmanByLocation(OperationRequest functionRequest,ExtensionHelper extensionHelper){
 尝试{
 List 结果=新的ArrayList ();
 Map  obj1 = new HashMap ();
 obj1.put(" ID",12);
 obj1.put(" name","测试名称1");
 obj1.put(" latitude",-19.859451);
 obj1.put("经度",-43.9456877);
 Map  obj2 = new HashMap ();
 obj2.put(" ID",35);
 obj2.put(" name","测试名称2");
 obj2.put(" latitude",-19.859451);
 obj2.put("经度",-43.9456877);
 List 键=新的ArrayList ();
 keys.add(" ID");
 result.add(EntityData.createFromMap(obj1,keys," Salesman"));
 result.add(EntityData.createFromMap(obj2,keys," Salesman"));
 OperationResponse响应= OperationResponse.setSuccess()。setEntityData(result).response();
 返回响应;
 } catch(Exception e){
 返回OperationResponse
 .setError(ErrorResponse.getBuilder()。setMessage("函数调用中的错误").response());
 }
 } 

致电该服务时,我只会得到第一条记录:

https://xx-xx-srv.cfapps.eu10.hana.ondemand.com/odata/v2/SalesmanService/findSalesmanByLocation

 <?xml version ='1.0'encoding ='utf-8'?>
 
      https://xx-xx-srv.cfapps.eu10.hana.ondemand.com:443/odata/v2/SalesmanService/Salesman(12)
     推销员
      2019-01-27T08:23:22.467Z 
     
     
     
         
              12 
             测试名称1 
              -19.859451 
              -43.9456877 
         
     
  

我尝试使用基本类型而不是实体来进行测试,但它也只返回一个条目。

还有一个遗漏点吗?

最好的问候

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


亲爱的,我正在使用Java在SAP Cloud Application Programming Model上实现功能( https://help.sap.com/viewer/65de2977205c403bbc107264b8eccf4b/Cloud/en-US/94c7f17ecc0b4508b3f4c5ed85bd7760.html可以在我们的响应集内显示,) 像下面这样:

"提供用于创建成功或失败的函数调用的响应的方法:

  • 在成功调用函数的情况下,可以使用setSuccess方法以下列之一返回数据:
    • 包含复杂类型的地图列表
    • 包含实体的EntityData列表
    • 包含原始类型的对象列表
  • 如果函数调用失败,则可以使用setError方法返回ErrorResponse实例,其中包含错误消息和状态代码。"

为简单起见,我在EntityData中创建了两个实例,并将其设置为像下面这样的响应对象:

服务定义:

使用来自'../db/data-model'的br.com.strategiatec;
 服务SalesmanService {
   实体销售员作为strategiatec.Salesman的预测;
   函数findSalesmanByLocation()返回Salesman;
 } 

我的实现:

 @Function(名称=" findSalesmanByLocation",serviceName =" SalesmanService")
 public OperationResponse findSalesmanByLocation(OperationRequest functionRequest,ExtensionHelper extensionHelper){
 尝试{
 List 结果=新的ArrayList ();
 Map  obj1 = new HashMap ();
 obj1.put(" ID",12);
 obj1.put(" name","测试名称1");
 obj1.put(" latitude",-19.859451);
 obj1.put("经度",-43.9456877);
 Map  obj2 = new HashMap ();
 obj2.put(" ID",35);
 obj2.put(" name","测试名称2");
 obj2.put(" latitude",-19.859451);
 obj2.put("经度",-43.9456877);
 List 键=新的ArrayList ();
 keys.add(" ID");
 result.add(EntityData.createFromMap(obj1,keys," Salesman"));
 result.add(EntityData.createFromMap(obj2,keys," Salesman"));
 OperationResponse响应= OperationResponse.setSuccess()。setEntityData(result).response();
 返回响应;
 } catch(Exception e){
 返回OperationResponse
 .setError(ErrorResponse.getBuilder()。setMessage("函数调用中的错误").response());
 }
 } 

致电该服务时,我只会得到第一条记录:

https://xx-xx-srv.cfapps.eu10.hana.ondemand.com/odata/v2/SalesmanService/findSalesmanByLocation

 <?xml version ='1.0'encoding ='utf-8'?>
 
      https://xx-xx-srv.cfapps.eu10.hana.ondemand.com:443/odata/v2/SalesmanService/Salesman(12)
     推销员
      2019-01-27T08:23:22.467Z 
     
     
     
         
              12 
             测试名称1 
              -19.859451 
              -43.9456877 
         
     
  

我尝试使用基本类型而不是实体来进行测试,但它也只返回一个条目。

还有一个遗漏点吗?

最好的问候

付费偷看设置
发送
3条回答
樱桃小丸子0093
1楼 · 2020-08-18 13:03.采纳回答

亲爱的,我已经打开票证 support.sap.com 和解决方案 只是在服务定义的返回类型之前放置一个"数组",就像这样:

 function findSalesmanByLocation()返回Salesman的数组; 

最诚挚的问候

Cikesha
2楼-- · 2020-08-18 12:45

您好,伊凡,谢谢。

compass1988
3楼-- · 2020-08-18 12:50

您好,伊萨亚斯,

感谢您分享答案。 我试图找出问题所在。

要添加到您的解决方案中,可以使您的代码更加"优雅"的一件事是利用"实体数据"构建器类,如下所示:

 @Function(Name =  " findSalesmanByLocation",serviceName =" SalesmanService")
 public OperationResponse findSalesmanByLocation(OperationRequest functionRequest,ExtensionHelper extensionHelper){
 List 结果= getEntityList();
 返回OperationResponse.setSuccess()。setEntityData(result).response();
 }

 私人List  getEntityList(){
 List  anEntityList =新的ArrayList ();
 anEntityList.add(createEntity(12,"虚拟名称1",-19.859451,-43.9456877,"推销员"));
 anEntityList.add(createEntity(35,"虚拟名称2",-19.859451,-43.9456877,"推销员"));
 anEntityList.add(createEntity(49,"虚拟名称3",-19.859451,-43.9456877,"推销员"));

 返回一个anEntityList;
 }

 私有EntityData createEntity(整数实体编号,字符串名称,字符串实体类型){
 EntityData anEntity = EntityData.getBuilder()
 .addKeyElement(" ID",实体ID)
 .addElement("名称",名称)
 .addElement(" latitude",name)
 .addElement("经度",名称)
 .buildEntityData(entityType);
 返回一个anEntity;
 }
 

您的代码将更易于阅读,并且您获得的关键元素的定义也将不同于每个实体数据的元素。

最好的问候,
Ivan

一周热门 更多>