SAP的CPI發(fā)布接口RFC

在屬性里面選擇遠(yuǎn)程啟用模塊SAP CPI 開發(fā)RFC適配器的Integration Flow

開發(fā)RFC適配器的Integration Flow

首先開發(fā)RFC(Remote Function Call)接口

Integration Suite發(fā)布Rest服務(wù)

開發(fā)RFC適配器的Iflow

創(chuàng)建包

添加Integration flow

開發(fā)iFlow

測(cè)試

首先開發(fā)RFC(Remote Function Call)接口

TCODE:SE37


在屬性里面選擇遠(yuǎn)程啟用模塊


然后寫入源碼,比如數(shù)據(jù)查詢


至此,RFC接口完畢

Integration Suite發(fā)布Rest服務(wù)

開發(fā)RFC適配器的Iflow

創(chuàng)建包




和ABAP里的程序需要存儲(chǔ)在一個(gè)開發(fā)包里一樣,Integration flow也需要存儲(chǔ)在一個(gè)包里,稱為Content package.

添加Integration flow

創(chuàng)建這個(gè)包就不講了,我就選擇自己之前的一個(gè)包,直接開始添加Integration flow

開發(fā)iFlow

點(diǎn)擊剛剛創(chuàng)建的iFlow



1、sender連接start,選擇https



雙擊https的連線,修改Address


下圖的CSRF不要勾上,如果勾上就只能是get方式訪問,不勾的話,get和post都可以訪問。


2、選擇groovy script



刪除里面的代碼,換成自己的,然后點(diǎn)擊右上角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;

}


上面這段代碼的意思就是請(qǐng)求的時(shí)候添加上一個(gè)附件

3、接收請(qǐng)求,Json轉(zhuǎn)xml


雙擊,改成如下


4、接收,消息映射



取名,點(diǎn)擊create



左邊是導(dǎo)入自己寫的xsd文件,右邊是sap系統(tǒng)里面導(dǎo)出的wsdl文件。

先來左邊。

桌面上放上xsd文件,內(nèi)容如下,自己對(duì)照著修改

<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>


上面就代表著只有一個(gè)輸入?yún)?shù),對(duì)應(yīng)SE37那個(gè)RFC的那個(gè)輸入?yún)?shù)。

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


<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>


點(diǎn)擊左邊的Add Source



選擇自己桌面上那個(gè)xsd




然后右邊。

右邊需要獲取RFC的WSDL

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

自己改地址,端口號(hào),services后面是函數(shù)名,系統(tǒng),用戶,密碼

(注意:保存下來的文件擴(kuò)展名是.wsdl,不能是xml,自己手動(dòng)改一下)


點(diǎn)擊右邊的Add ,然后upload,選擇剛剛保存的wsdl文件



連線,把左右映射起來


注意:REQUEST的消息映射如果傳入的是空的。那么左邊是自己的xsd,右邊是系統(tǒng)的wsdl,在這個(gè)wsdl里面有RFC的函數(shù)名,這樣SCC才知道是調(diào)用的哪個(gè)函數(shù)。左右兩邊加上文件即可,不需要連線映射上。消息映射為空時(shí)的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上寫上內(nèi)容,這樣也可以指定到要調(diào)用的RFC函數(shù)

然后點(diǎn)擊右上角ok

5、添加Request Reply



6、添加SAP系統(tǒng)作為接收方




7、調(diào)用SAP系統(tǒng)選擇RFC

雙擊RFC的連接線


Destination是在子賬號(hào)里面的Destinations定義

8、然后跟前面一樣,再添加一個(gè)消息映射,這個(gè)是返回的消息映射


左邊是系統(tǒng)的wsdl文件,像之前一樣,但是選擇第二個(gè)Response。

右邊是自己寫的xsd文件


右邊的xsd:是一個(gè)內(nèi)表


<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、再添加一個(gè)xml轉(zhuǎn)json



1、(勾上supress json root element可以去掉返回結(jié)果里最外層的ZSD_CRM_1011_Response,見下圖)



2、(然后勾上Streaming,在下面XML Element添加上最外層的和內(nèi)表名字,一定要從最外層開始寫,即便上面勾上supress json root element去掉了外層。這里是為了讓每次返回的都是一個(gè)json數(shù)組,即便只有一條數(shù)據(jù),如果不這樣做,那么返回一條數(shù)據(jù)時(shí),就不是個(gè)json數(shù)組,單是一條數(shù)據(jù)了。見下圖)



10、最后加一個(gè)groovy script


內(nèi)容:

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;

}

這里是在返回加上的一個(gè)附件

就完成了。


注意,需要到SCC里面添加上自己的RFC函數(shù))

測(cè)試

先拿到地址


地址見下圖右邊的endpoint


然后postman



版權(quán)聲明:本文為CSDN博主「尤其是十月的風(fēng)」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。

原文鏈接:https://blog.csdn.net/qq_34060435/article/details/119883131

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容