SAP的CPI发布接口RFC

在属性里面选择远程启用模块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文件,内容如下,自己对照着修改

<schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns="http://www.w3.org/2001/XMLSchema">

    <element name="ZSD_CRM_1011_Request">

        <complexType>

            <sequence>

                            <element name="IV_MATNR" type="string">

</element>

            </sequence>

        </complexType>

    </element>

</schema>


上面就代表着只有一个输入参数,对应SE37那个RFC的那个输入参数。

如果传入的是表,那么就按照下面的方式写


<schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns="http://www.w3.org/2001/XMLSchema">

    <element name="ZSD_CRM_1011_Request">

        <complexType>

            <sequence>

                <element name="IT_INPUT" minOccurs="0" maxOccurs="unbounded">

                    <complexType>

                        <sequence>

                            <element name="NAME1" type="string">

</element>

                            <element name="NAME2" type="string">

</element>

                            <element name="NAME2" type="string">

</element>

                        </sequence>

                    </complexType>

                </element>

            </sequence>

        </complexType>

    </element>

</schema>


点击左边的Add Source



选择自己桌面上那个xsd




然后右边。

右边需要获取RFC的WSDL

获取RFC的WSDL地址为:http://<host>:<port>/sap/bc/soap/wsdl11?services=<BAPI Name>&sap-client=<client>&sap-user=<user>&sap-password=<password>

自己改地址,端口号,services后面是函数名,系统,用户,密码

(注意:保存下来的文件扩展名是.wsdl,不能是xml,自己手动改一下)


点击右边的Add ,然后upload,选择刚刚保存的wsdl文件



连线,把左右映射起来


注意:REQUEST的消息映射如果传入的是空的。那么左边是自己的xsd,右边是系统的wsdl,在这个wsdl里面有RFC的函数名,这样SCC才知道是调用的哪个函数。左右两边加上文件即可,不需要连线映射上。消息映射为空时的xsd,如下:

<schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns="http://www.w3.org/2001/XMLSchema">

    <element name="ZSD_CRM_1009_Request">

    </element>

</schema>

传入的如果为空也有另一种方式,不用message mapping,改用content modify,如下,在里面的body上写上内容,这样也可以指定到要调用的RFC函数

然后点击右上角ok

5、添加Request Reply



6、添加SAP系统作为接收方




7、调用SAP系统选择RFC

双击RFC的连接线


Destination是在子账号里面的Destinations定义

8、然后跟前面一样,再添加一个消息映射,这个是返回的消息映射


左边是系统的wsdl文件,像之前一样,但是选择第二个Response。

右边是自己写的xsd文件


右边的xsd:是一个内表


<schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns="http://www.w3.org/2001/XMLSchema">

    <element name="ZSD_CRM_1011_Response">

        <complexType>

            <sequence>

                <element name="ET_OUTPUT" minOccurs="0" maxOccurs="unbounded">

                    <complexType>

                        <sequence>

                            <element name="MATNR" type="string">

</element>

                            <element name="WERKS" type="string">

</element>

                            <element name="LGORT" type="string">

</element>

                            <element name="ZSTOCK" type="string">

</element>

                            <element name="MSGTYP" type="string">

</element>

                            <element name="MSGTEXT" type="string">

</element>

                        </sequence>

                    </complexType>

                </element>

            </sequence>

        </complexType>

    </element>

</schema>


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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,888评论 6 515
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,677评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 168,386评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,726评论 1 297
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,729评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,337评论 1 310
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,902评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,807评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,349评论 1 318
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,439评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,567评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,242评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,933评论 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,420评论 0 24
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,531评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,995评论 3 377
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,585评论 2 359