云平台与OData的集成-如何处理传入的$ filter查询参数

2020-08-31 05:05发布

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

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


我们定义了一个iFlow,它公开了OData服务并使用了接收方OData服务。 我们希望允许最终用户使用$ filter查询参数来查询此iFlow OData服务。 我们希望iFlow能够从传入的URL中提取$ filter,并将其传递给接收方OData服务。

我们如何做到这一点?

我们认为解决方案涉及以下内容:

$ {header.filter}在" OData Receiver"连接的"处理"选项卡的"自定义查询选项"字段中

但是我们不知道要使用什么$ {header}属性,也找不到任何能够明确标识可用$ {header}属性的文档。

对此事的任何指导表示赞赏。

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

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


我们定义了一个iFlow,它公开了OData服务并使用了接收方OData服务。 我们希望允许最终用户使用$ filter查询参数来查询此iFlow OData服务。 我们希望iFlow能够从传入的URL中提取$ filter,并将其传递给接收方OData服务。

我们如何做到这一点?

我们认为解决方案涉及以下内容:

$ {header.filter}在" OData Receiver"连接的"处理"选项卡的"自定义查询选项"字段中

但是我们不知道要使用什么$ {header}属性,也找不到任何能够明确标识可用$ {header}属性的文档。

对此事的任何指导表示赞赏。

付费偷看设置
发送
15条回答
黑丝骑士
1楼 · 2020-08-31 05:34.采纳回答

大家好,

好消息! 在Odata发送方通道之后,将以下代码添加到默认groovy脚本中,此问题已解决。

if(uriInfo.getFilter()!= null){

def filter = uriInfo.getFilter()。getExpressionString();

if(odataURI.size()!= 0)

odataURI.append(urlDelimiter);

odataURI.append(" \ $ filter =")。append(filter);

log.logErrors(LogMessage.TechnicalError,"过滤器值:" + filter);

}

此后,将$ {Header.odataURI}添加到OData接收器适配器的查询选项中。


粗暴的香蕉
2楼-- · 2020-08-31 05:26

嗨阿尼尔,

很高兴听到您使用此方法(-> http-Odata->)。

感谢您的信息。

槿木_熙
3楼-- · 2020-08-31 05:32

您好,Virendra,

很高兴听到您已提取数据并将其记录下来。

我不确定如何对Odata调用(v4?)做同样的事情,我认为如果可能的话,它会增加一层额外的处理,但是要花一些时间和测试才能给出正确的答案 或建议。

我建议公开一个事件。

亲切问候

clever101
4楼-- · 2020-08-31 05:50

Virendra,

您在记录有效载荷时遇到问题吗?

在常规脚本步骤中尝试以下代码(确保它不是javascript步骤):

导入com.sap.gateway.ip.core.customdev.util.Message;
 导入java.util.HashMap;

 def消息processData(消息消息)
 {
     def body = message.getBody(java.lang.String)as String;
     def messageLog = messageLogFactory.getMessageLog(message);
     if(messageLog!= null)
 {
         messageLog.addAttachmentAsString(" ResponsePayload:",body," text/plain");
      }
     返回消息;
 } 
软件心理学工程师
5楼-- · 2020-08-31 05:38

我现在也面临着同样的问题。 我已将iFlow置于跟踪模式并进行了验证。 没有标准标头可用于访问传入URL中的查询部分。

因此,作为替代方案,我正在使用HTTP发送方通道来获取查询部分。 现在,我可以将CamelHttpQuery标头访问到内容修饰符中的另一个标头变量中。 我使用groovy脚本仅隔离了我需要的值,并将其保存在属性中并在后续步骤中使用。

SAP小黑
6楼-- · 2020-08-31 05:46

Hello Andrew,

之前,我尝试将OData用作发送方,但无法获取URL参数。 因此,由于我们没有设计限制,因此我将设计更改为HTTP作为发送方来捕获查询参数。

如果确定要使用OData适配器,请使用标头UriInfo标头,然后您可以将标头的值看到为com.sap.gateway.core.ip.odata.OGWUriInfo@xyza123。 使用groovy脚本,我们必须在此类上应用几种方法并获取过滤器参数。

灬番茄
7楼-- · 2020-08-31 05:37

感谢Kevin的回应。 为了了解iFlow执行过程中标头,属性和有效负载的内容,我们正在尝试获取日志作为附件,如上面的链接所述,并能够生成附件。 但是,当我们尝试打开它时,它失败并显示以下消息。 知道这里有什么问题吗?

"对日志附件的请求失败,并出现以下错误:服务器无效响应:无法解析消息。状态代码:500消息: 内部" target =" _blank"> http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"> 内部服务器错误 尝试调用从中加载的空对象的方法java.io.InputStream.read(byte [])时 局部变量'is' "

一周热门 更多>