在属性里面选择远程启用模块SAP CPI 开发RFC适配器的Integration Flow
开发RFC适配器的Integration Flow
首先开发RFC(Remote Function Call)接口
Integration Suite发布Rest服务
开发RFC适配器的Iflow
创建包
添加Integration flow
开发iFlow
测试
首先开发RFC(Remote Function Call)接口
TCODE:SE37
在属性里面选择远程启用模块
然后写入源码,比如数据查询
至此,RFC接口完毕
Integration Suite发布Rest服务
开发RFC适配器的Iflow
创建包
和ABAP里的程序需要存储在一个开发包里一样,Integration flow也需要存储在一个包里,称为Content package.
添加Integration flow
创建这个包就不讲了,我就选择自己之前的一个包,直接开始添加Integration flow
开发iFlow
点击刚刚创建的iFlow
1、sender连接start,选择https
双击https的连线,修改Address
下图的CSRF不要勾上,如果勾上就只能是get方式访问,不勾的话,get和post都可以访问。
2、选择groovy script
删除里面的代码,换成自己的,然后点击右上角ok
代码
import com.sap.gateway.ip.core.customdev.util.Message;
import java.util.HashMap;
def Message processData(Message message) {
def headers = message.getHeaders();
def map = message.getProperties();
message.setHeader("SAP_IsIgnoreProperties", new Boolean(true));
message.setHeaders(headers);
def head = headers as String;
def body = message.getBody(java.lang.String) as String;
def messageLog = messageLogFactory.getMessageLog(message);
messageLog.addAttachmentAsString("PayloadRequest", body, "text/plain");
return message;
}
上面这段代码的意思就是请求的时候添加上一个附件
3、接收请求,Json转xml
双击,改成如下
4、接收,消息映射
取名,点击create
左边是导入自己写的xsd文件,右边是sap系统里面导出的wsdl文件。
先来左边。
桌面上放上xsd文件,内容如下,自己对照着修改
上面就代表着只有一个输入参数,对应SE37那个RFC的那个输入参数。
如果传入的是表,那么就按照下面的方式写
点击左边的Add Source
选择自己桌面上那个xsd
然后右边。
右边需要获取RFC的WSDL
获取RFC的WSDL地址为:http://
自己改地址,端口号,services后面是函数名,系统,用户,密码
(注意:保存下来的文件扩展名是.wsdl,不能是xml,自己手动改一下)
点击右边的Add ,然后upload,选择刚刚保存的wsdl文件
连线,把左右映射起来
注意:REQUEST的消息映射如果传入的是空的。那么左边是自己的xsd,右边是系统的wsdl,在这个wsdl里面有RFC的函数名,这样SCC才知道是调用的哪个函数。左右两边加上文件即可,不需要连线映射上。消息映射为空时的xsd,如下:
传入的如果为空也有另一种方式,不用message mapping,改用content modify,如下,在里面的body上写上内容,这样也可以指定到要调用的RFC函数
然后点击右上角ok
5、添加Request Reply
6、添加SAP系统作为接收方
7、调用SAP系统选择RFC
双击RFC的连接线
Destination是在子账号里面的Destinations定义
8、然后跟前面一样,再添加一个消息映射,这个是返回的消息映射
左边是系统的wsdl文件,像之前一样,但是选择第二个Response。
右边是自己写的xsd文件
右边的xsd:是一个内表
9、再添加一个xml转json
1、(勾上supress json root element可以去掉返回结果里最外层的ZSD_CRM_1011_Response,见下图)
2、(然后勾上Streaming,在下面XML Element添加上最外层的和内表名字,一定要从最外层开始写,即便上面勾上supress json root element去掉了外层。这里是为了让每次返回的都是一个json数组,即便只有一条数据,如果不这样做,那么返回一条数据时,就不是个json数组,单是一条数据了。见下图)
10、最后加一个groovy script
内容:
import com.sap.gateway.ip.core.customdev.util.Message;
import java.util.HashMap;
def Message processData(Message message) {
def body = message.getBody(java.lang.String) as String;
def messageLog = messageLogFactory.getMessageLog(message);
messageLog.addAttachmentAsString("PayloadResponse",body, "text/plain");
return message;
}
这里是在返回加上的一个附件
就完成了。
注意,需要到SCC里面添加上自己的RFC函数)
测试
先拿到地址
地址见下图右边的endpoint
然后postman
版权声明:本文为CSDN博主「尤其是十月的风」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_34060435/article/details/119883131