SAP 系统 发布service
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SAP 系统 发布service相关的知识,希望对你有一定的参考价值。
SAP系统发布一个webservice, 输入参数是String, 输出参数是一个list《bean》类型的,求个例子
如上,参数名称data的类型设置成了like,这个like代表什么。
如果返回参数名称设置为result,result作为一个数据集合,里面有很多data,每一个data对应数据库表的一条记录。
这样怎么设置,最好来个图片
首先Abap人员在table接口定义张内表data。因为like SFLIGHT,意思是data的参考SFLIGHT的结构。因为SFLIGHT航班表有许多的字段,你不可能让Java接收端的Bean对象也去建立那么多个字段变量出来,所以Java开发人员只需要参考需要的字段就可以了。
//实现比如:
Abap: 通过把数据获取到data表中;
Java人员:
1、建立Bean对象,比如:
public class Sflight
private String mandt; //MANDT
private String carrid; //CARRID
.....
注意字段传过来的类型,一般来说Java人员建模的类型要主要考虑字符型和数值型就可以了。
2、ABAP人员通过Function把数据传输过来(注意设置function属性---> Remote-Enable Module);Java人员开始接收,因为data是like sflight,所以这里的data是Table类型,如果定义的sflight是struture类型的话在处理一下,以下介绍的是data是内表类型,所以Java人员获取数据:
/*
* 开始取出值
*/
JCoTable tabs = jtablist.getTable("DATA"); //注意‘DATA’是大写
由于是table,所以要把获取的数据存放在List集合中,也可以放在数组,都可以,看你开发人员的业务需求。我这里以List<Bean>为例,所以先定义:
List<Sflight> sfs = new ArrayList<Sflight>();
****************************************************************
接著把数据tabs存放在list中:
if (tabs != null && !tabs .isEmpty())
for (int n = 0; n < tabs .getNumRows(); n++)
Sflight sf = new Sflight();
tabs .setRow(n); //指针(可以理解成游标)
String mandt= tabs .getString("MANDT");
String carrid= tabs .getString("CARRID");
//....
sf.setMandt(mandt);
sf.setCarrid(carrid);
sfs.add(sf); //把当前这行数据添加进集合list中
以上把数据加入集合就OK啦。
这样的话,接收端成功接收到SAP Function传过来的数据啦,怎样处理应该不用说明了吧,如果还用说明,请把Java人员给辞职了吧。 参考技术A 返回参数一般设置为双方系统采用xml接口传输,自己再根据xml数据解析成list吧,因为abap只能用内表,而内表和java的list不一样,webservice是一个通用的协议,不是专用于abap和java的之间的一个传输,追问
我补充了问题
SAP OData service的执行是如何从Gateway系统转交到backend系统
下面是我今天研究的后台OData数据的model以及如何在IE里面consume:
SPRO里面:
这个model provider class定义了LWM_CUSTOMER_BRIEFING这个model的所有structure,以及structure之间的相互关系。
现在没有一个图形化界面的tool来做modelling,我们只能在CL_LWM_CB_ADAPTER_MDP的DEFINE里面定义model的structure。具体做法是预先定义好后台要使用的entity的data type,
Customer briefing 所有使用到的DDIC object全部放在这个package里面:LWM_CRM_CUSTOMER_BRIEFING
在DEFINE里面,通过ABAP 代码创建一个个entity,给它们绑上DDIC object,同时建立相互关系,如association.
通过http://ldcigm2.herr.corp:50018/sap/opu/sdata/sap/customer_briefing?sap-client=001 我们可以拿到customer briefing的service document。
Service document里面只定义了哪些entity暴露了哪些操作,真正metadata的full definition xml用这个URL down:
http://ldcigm2.jerry.corp:50018/sap/opu/sdata/sap/customer_briefing/$metadata?sap-client=001&$format=xml
service document也能通过SICF进去之后,从sap node出发,点test拿到。
比如这部分就说明CustomerCollection这个节点能够执行“search”的action:
返回所有的Customer信息,Customer node的property就是在figure1里面看到的那些。
Search 所有name property中包含“UT_Customer” 的Customer
http://ldcigm2.jerry.corp:50018/sap/opu/sdata/sap/CUSTOMER_BRIEFING/CustomerCollection?sap-client=001&$format=xml&search=UT_Customer
返回Partner ID = 133的customer的detail 信息
http://ldcigm2.jerry.corp:50018/sap/opu/sdata/sap/CUSTOMER_BRIEFING/CustomerCollection(133)?sap-client=001&$format=xml
所有这些操作都在service provider class CL_LWM_CB_ADAPTER_RDP里面实现,
如果我们直接在IE里面通过http://ldcigm2.jerry.corp:50018/sap/opu/sdata/sap/CUSTOMER_BRIEFING/CustomerCollection(133)?sap-client=001&$format=xml
的URL consume OData service:
Gateway 系统上首先会根据OData service expose出来的external name找到internal使用的service ID:
然后根据service ID找到对应的CRM 系统的destination:
通过RFC直接call CRM系统上的一个remote function module:
在CRM的这个FM上设个断点,发现断点已经被触发了。
要获取更多Jerry的原创文章,请关注公众号"汪子熙":
以上是关于SAP 系统 发布service的主要内容,如果未能解决你的问题,请参考以下文章