十分钟玩转Fiori App中的ODATA Service

我们谈了了很多关于OData的话题,但是Fiori APP到底是怎么通过SAP Gateway调用OData Service的呢?

今天我们通过一个Fiori App实例来分析一下。

首先我们启动Fiori App “Manage Journal Entries”,这个APP我已经引用了好几次,就不再介绍了。

输入简单的过滤参数,公司代码和财年信息。

点击执行,应用返回相应的财务凭证的Header信息列表。

SAP Fiori应用是怎么通过前端的SAP UI5来调用后端系统得到凭证的Header信息的呢?我们使用Chrome浏览器自带的工具:Developer Tools,(和IE的F12类似) 查看网络传输信息,主要关注:XHR数据传输,关于XHR(XML HTTP Request)大家可以自行百度。

信息如下图:

 

 

我们可以获取OData调用的HTTP信息:

https://host:port/sap/opu/odata/sap/FAC_FINANCIAL_DOCUMENT_SRV_01/$batch?sap-client=210

协议:HTTPS

Hostname, port number,

Path of ICM node:/sap/opu/odata/sap

OData service name:

Payload:FAC_FINANCIAL_DOCUMENT_SRV_01

参数:$batch?sap-client=210,其中$batch表示是批处理,有多个Odata Service调用。

然后在payload信息里,可以看到有两次OData Service调用:

GET Headers/$count?sap-client=210&$filter=((CompanyCode%20eq%20%270001%27)%20and%20(FiscalYear%20eq%20%272017%27))

GET Headers?sap-client=210&$skip=0&$top=116&$orderby=PostingDate%20desc&$filter=((CompanyCode%20eq%20%270001%27)%20and%20(FiscalYear%20eq%20%272017%27))&$select=AccountingDocument%2cAccountingDocumentHeaderText%2cCompanyCodeName%2cAccountingDocumentType%2cCreatedByUser%2cPostingDate%2cAmountInCoCodeCrcy%2cCompanyCode%2cAccountingDocumentTypeName%2cCreatedByUserName%2cAccountingDocumentCategoryName%2cLedgerGroupName%2cParkedByUserName%2cReversalReasonName%2cTransactionCurrency%2cCoCodeCurrency%2cFiscalYear%2cReferenceDocumentType%2cIntercompanyTransaction%2cReversalFunction%2cCopilotKey

大家可能觉得有点乱,很多特殊字符比如:%20, %27等等,这是转义字符。

web 开发中通过问号(?)方式在浏览器地址栏中传值时。浏览器是通过“&”来区分问号后的参数个数的。如果出现传值参数中带有特殊字符时,在接受页面就会出现错误。

url出现了有+,空格,/,?,%,#,&,=等特殊符号的时候,可能在服务器端无法获得正确的参数值,如何是好?

解决办法

将这些字符转化成服务器可以识别的字符,对应关系如下:

URL字符转义

用其它字符替代吧,或用全角的。

+    URL 中+号表示空格                                 %2B   

空格 URL中的空格可以用+号或者编码           %20 

/   分隔目录和子目录                                     %2F     

?    分隔实际的URL和参数                             %3F     

%    指定特殊字符                                          %25     

#    表示书签                                                  %23     

&    URL 中指定的参数间的分隔符                  %26     

=    URL 中指定参数的值                                %3D

 

 

好的,我们分析了浏览器传到前端服务器的URI信息,我们需要在前端服务器(Gateway Server)模拟OData Service调用。

这里要重点介绍 SAP Gateway Client,它是是非常重要的调试测试工具,我们会在未来详细介绍。

T-code:

/n/IWFND/GW_CLIENT

由于是本地调用所以省略:https://hostname:port/

/sap/opu/odata/sap/FAC_FINANCIAL_DOCUMENT_SRV_01/$batch?sap-client=210

OData Service : FAC_FINANCIAL_DOCUMENT_SRV_01

Path: /sap/opu/odata/sap/

$batch批处理,会有不只一次调用。

Sap-client-210, 参数:client 210

在payload里查看ODATA Service请求的具体内容,为了便于理解,把转移字符转换成正常字符。

%2c -> , %20-> space %27->’

 

GET Headers/$count?sap-client=210&$filter=((CompanyCode eq '0001') and (FiscalYear eq '2017'))

分解URI, GET是HTTP Method, Headers是EntitySet,$count代表取结构集的行数量,$filter相当于选择条件,就是SQL里的where条件一样。

我们现在执行一下:

URI: /sap/opu/odata/sap/FAC_FINANCIAL_DOCUMENT_SRV_01/Headers/$count?sap-client=210&$filter=((CompanyCode eq '0001') and (FiscalYear eq '2017'))

HTTP Method : GET

GET Headers?sap-client=210&$skip=0&$top=116&$orderby=PostingDate desc&$filter=((CompanyCode eq '0001') and (FiscalYear eq '2017'))&$select=AccountingDocument,AccountingDocumentHeaderText,CompanyCodeName,AccountingDocumentType,CreatedByUser,PostingDate,AmountInCoCodeCrcy,CompanyCode,AccountingDocumentTypeName,CreatedByUserName,AccountingDocumentCategoryName,LedgerGroupName,ParkedByUserName,ReversalReasonName,TransactionCurrency,CoCodeCurrency,FiscalYear,ReferenceDocumentType,IntercompanyTransaction,ReversalFunction,CopilotKey

分析第二个URI,HTTP Method GET, Entity Set : Headers,&$orderby=PostingDate desc,查询条件:&$filter=((CompanyCode eq '0001') and (FiscalYear eq '2017'))。

$select 返回的字段

为了简单,我去掉一些字段。

/sap/opu/odata/sap/FAC_FINANCIAL_DOCUMENT_SRV_01/Headers?sap-client=210&$skip=0&$top=116&$orderby=PostingDate desc&$filter=((CompanyCode eq '0001') and (FiscalYear eq '2017'))&$select=AccountingDocument,AccountingDocumentHeaderText,CompanyCodeName,AccountingDocumentType

需要JSON格式的话,加上参数:$format=json

/sap/opu/odata/sap/FAC_FINANCIAL_DOCUMENT_SRV_01/Headers?sap-client=210&$format=json&$skip=0&$top=116&$orderby=PostingDate desc&$filter=((CompanyCode eq '0001') and (FiscalYear eq '2017'))&$select=AccountingDocument,AccountingDocumentHeaderText,CompanyCodeName,AccountingDocumentType

我们看到了,Fiori app通过UI5(Javascript类库),调用REST类型的OData Service,XHR其实就是早年的Ajax技术,发给Gateway服务器URI请求,Gateway服务器返回XML or JSON格式数据。

我们如何分析Fiori app调用OData Service就是截取XHR通信信息,然后分析URI,在SAP Gate Client模拟URI调用。可以分析Error Message,也可以Debug OData Service的实现代码。

好的,我们今天浅尝辄止,在以后的文章中我们再深入探讨如何Debug OData Service和SAP Gateway Client其他功能。

 

本文内容属于个人观点,不代表任何官方。

 

转载于:https://www.cnblogs.com/alexsap/p/7255638.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值