轉自:https://www.cnblogs.com/fanjb/p/10829858.html
一、 接口內容
接口詳細信息
1. 字段對應關系
發送字段對應關系
返回字段對應關系
2. 報文信息
傳入報文(報文結構,外圍系統提供)

1 <?xml version="1.0" encoding="utf-8"?> 2 <REQMESG> 3 <HEADER> 4 <WERKS>B001</WERKS> 5 </HEADER> 6 <ITEM> 7 <MATNR>000000000500022359</MATNR> 8 <WERKS>B001</WERKS> 9 <LGORT>BBBB</LGORT> 10 </ITEM> 11 <ITEM> 12 <MATNR>000000000500022352</MATNR> 13 <WERKS>B001</WERKS> 14 <LGORT>9501</LGORT> 15 </ITEM> 16 </REQMESG>
返回報文(外圍系統提供)

1 <?xml version="1.0" encoding="UTF-8"?> 2 <RESPONSE> 3 <MESG>天津市電工廠名稱為</MESG> 4 <ITEM> 5 <MATNR>000000000500022359</MATNR> 6 <WERKS>B001</WERKS> 7 <LGORT>BBBB</LGORT> 8 <MAKTX>測試物料2004</MAKTX> 9 <LABST>3425.0</LABST> 10 </ITEM> 11 <ITEM> 12 <MATNR>000000000500022352</MATNR> 13 <WERKS>B001</WERKS> 14 <LGORT>9501</LGORT> 15 <MAKTX>test004</MAKTX> 16 <LABST>6.0</LABST> 17 </ITEM> 18 </RESPONSE>
二、 接口配置
登陸網址:http://sgnwpid.sgcc.com.cn:50000/dir/start/index.jsp
事物碼登陸:SXMB_IFR
A. 配置ESR(Enterprise Service Builder)
找到對應命名空間(人資組開發機目前只有薪酬通道是正常的,此處我們暫時掛到薪酬組下)
1. 創建Data Types
代理類形式需要為雙方接口創建數據類型,國網項目都需要走esb通道,所傳數據以<![CDATA[*]]>包裹xml報文形式進行傳輸,所以發出方只需要輸入輸出各一個參數即可,此處我們使用公共數據類型
1.1 外圍側發送方
DT_SHARE_SGHRERP2CEERP_REQ
DT_SHARE_SGHRERP2CEERP_RESP
1.2 ERP側接收方
DT_TS01_MM2CEERP_REQ
DT_TS01_MM2CEERP_RESP
1.3 外圍和集中部署關系圖如下
2. 創建Message Types
根據DATA TYPES創建ERP側的MESSAGER TYPES
3. 創建Service Interface
分別創建外圍系統方和集中部署方服務接口。
SIO_TS01_MM_GETMSG
SII_TS01_CEERP_GETMSG
4. 創建Imported Archives
編輯xsl文檔,並導入IA
CDATA和xml之間轉換的固定格式:

1 <?xml version="1.0" encoding="UTF-8"?> 2 <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 3 <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 4 <xsl:template match="*"> 5 <!-- disable-output-escaping 屬性為yes不轉義符號--> 6 <xsl:variable name="xmlStr" select="/*/*"/> 7 <xsl:choose> 8 <xsl:when test="contains($xmlStr,'<?xml version="1.0" encoding="UTF-8"?>')"> 9 <xsl:value-of select="substring-after($xmlStr,'<?xml version="1.0" encoding="UTF-8"?>')" disable-output-escaping="yes"/> 10 </xsl:when> 11 <xsl:when test="contains($xmlStr,'<?xml version="1.0" encoding="utf-8"?>')"> 12 <xsl:value-of select="substring-after($xmlStr,'<?xml version="1.0" encoding="utf-8"?>')" disable-output-escaping="yes"/> 13 </xsl:when> 14 <xsl:otherwise> 15 <xsl:value-of select="$xmlStr" disable-output-escaping="yes"/> 16 </xsl:otherwise> 17 </xsl:choose> 18 </xsl:template> 19 </xsl:stylesheet>

1 <?xml version="1.0" encoding="UTF-8"?> 2 3 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> 4 5 <xsl:output version="1.0" encoding="UTF-8" method="xml"/> 6 7 8 <xsl:template match="/"> 9 10 11 <m:MT_SHARE_SGWMS2ERP_RESP xmlns:m="http://www.sgcc.com.cn/sgwms"> 12 13 14 <INPUT> 15 16 <!--加CDATA頭--> 17 18 19 <xsl:text disable-output-escaping="yes"><![CDATA[</xsl:text> 20 21 <!--節點完全復制--> 22 23 24 <xsl:copy-of select="./*"/> 25 26 <!--加CDATA尾--> 27 28 29 <xsl:text disable-output-escaping="yes">]]></xsl:text> 30 31 </INPUT> 32 33 </m:MT_SHARE_SGWMS2ERP_RESP> 34 35 </xsl:template> 36 37 </xsl:stylesheet>
REQUEST:

1 <?xml version="1.0" encoding="UTF-8"?> 2 <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 3 <xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/> 4 <xsl:template match="/"> 5 <ns1:MT_TS01_MM2CEERP_REQ xmlns:ns1="http://www.sgcc.com.cn/sghrerp/hrxc"> 6 <HEADER> 7 <WERKS> 8 <xsl:value-of select="HEADER/WERKS"/> 9 </WERKS> 10 </HEADER> 11 <xsl:for-each select="ITEM"> 12 <ITEM> 13 <MATNR> 14 <xsl:value-of select="MATNR"/> 15 </MATNR> 16 <WERKS> 17 <xsl:value-of select="WERKS"/> 18 </WERKS> 19 <LGORT> 20 <xsl:value-of select="LGORT"/> 21 </LGORT> 22 </ITEM> 23 </xsl:for-each> 24 </ns1:MT_TS01_MM2CEERP_REQ> 25 </xsl:template> 26 </xsl:stylesheet>
根據外圍系統傳入報文路徑取數拼接到集中部署messagetyeps的報文結構中
RESPONSE:

1 <?xml version="1.0" encoding="UTF-8"?> 2 <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 3 <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 4 <xsl:template match="/"> 5 <xsl:apply-templates select="*"/> 6 </xsl:template> 7 <xsl:template match="*"> 8 <MESG> 9 <xsl:value-of select="RETURN/MESG"/> 10 </MESG> 11 <xsl:for-each select="ITEM"> 12 <ITEM> 13 <MATNR> 14 <xsl:value-of select="MATNR"/> 15 </MATNR> 16 <WERKS> 17 <xsl:value-of select="WERKS"/> 18 </WERKS> 19 <LGORT> 20 <xsl:value-of select="LGORT"/> 21 </LGORT> 22 <MAKTX> 23 <xsl:value-of select="MAKTX"/> 24 </MAKTX> 25 <LABST> 26 <xsl:value-of select="LABST"/> 27 </LABST> 28 </ITEM> 29 </xsl:for-each> 30 </xsl:template> 31 </xsl:stylesheet>
同理,將集中部署側messagetypes的返回報文的值拼入到外圍返回報文中去
5. 創建Operation Mapping
B. 配置integration builder
1. 創建Configuration Scenario(場景)
CS_TS01_MM2CEERP_GETMSG
2. 導入Business System
3. 創建發送方Communication Channel
CC_TS01_MM_GETMSG
4. 創建Sender Agreement,發送方
發送方為:BS_SGHRERP
5. 創建Receiver Determination
確認接收方系統
接收方:集中部署201
6. 創建Interface Determination,
確認接收方系統的接收接口
7. 創建接收方Communication Channel
(代理類用XI,RFC類型用RFC)
8. 創建Receiver Agreement,接收方
9. 激活CS,並導出wsdl
所有的組件均要導入CS場景CS_TS01_MM2CEERP_GETMSG中,一步一激活確認所有組件均激活后導出wsdl進行測試。有一種情況的報錯需要把場景及其組件刪掉重新配置注冊的情況,請注意。
按照如下格式修改URL並填入
http://10.1.169.34:50000/XISOAPAdapter/MessageServlet?channel=:BS_SGHRERP:CC_TS01_MM_GETMSG
選擇對應的接口,外圍系統調用
外圍系統調用即:SIO_TS01_MM_GETMSG
填寫CC:BS_SGHRERP,並導出wsdl即可供外圍系統調用。
三、 GUI側接口開發
前文部分為PI接口java端的開發配置,接下來開發基於abap的服務提供方接口(既ERP側)的邏輯代碼。
事物代碼:sproxy
1. 根據組件名稱、命名空間、接口名找到對應的接口
由於服務提供方為集中部署,我們只需開發ceerp側的接口即可
2. 雙擊創建,分配包、請求號、前綴,系統自動根據PI的配置生成輸入輸出參數及其參考數據結構
3. 雙擊方法,在其內編寫邏輯代碼即可,注意導入導出的參數使用方式,一般接口data types都會定義成string類型,遇到數字型QUAN、DEC可能出現轉換錯誤,可在代碼中進行轉換
4. 實例參考代碼
1 METHOD zpi00_ii_sii_ts01_ceerp_getmsg~sii_ts01_ceerp_getmsg. 2 *** **** INSERT IMPLEMENTATION HERE **** *** 3 4 DATA p_werks TYPE mard-werks. 5 6 TYPES:BEGIN OF ty_out, 7 matnr TYPE mard-matnr, 8 werks TYPE mard-werks, 9 lgort TYPE mard-lgort, 10 maktx TYPE makt-maktx, 11 labst TYPE mard-labst, 12 END OF ty_out. 13 14 DATA:lw_out TYPE ty_out, 15 lt_out TYPE TABLE OF ty_out. 16 17 DATA: lw_header TYPE zpi00_dt_ts01_mm2ceerp_req_hea, "輸入參數抬頭信息 18 lt_input_item TYPE TABLE OF zpi00_dt_ts01_mm2ceerp_req_ite, "輸入參數內表 19 lw_input_item TYPE zpi00_dt_ts01_mm2ceerp_req_ite, "輸入參數工作區 20 lw_return TYPE zpi00_dt_ts01_mm2ceerp_resp_re, "輸出參數返回消息 21 lt_output_item TYPE TABLE OF zpi00_dt_ts01_mm2ceerp_resp_it, "輸出參數內表 22 lw_output_item TYPE zpi00_dt_ts01_mm2ceerp_resp_it "輸出參數工作區 23 . 24 25 DATA:lw_t001w TYPE t001w, 26 zmsg TYPE string. 27 28 MOVE-CORRESPONDING input-mt_ts01_mm2ceerp_req-header TO lw_header. 29 p_werks = lw_header-werks. 30 31 SELECT SINGLE werks name1 FROM t001w INTO CORRESPONDING FIELDS OF lw_t001w WHERE werks = p_werks AND spras = sy-langu. 32 33 IF lw_t001w-werks IS NOT INITIAL. 34 CONCATENATE lw_t001w-werks '工廠名稱為' lw_t001w-name1 INTO zmsg. 35 lw_return-mesg = zmsg. 36 output-MT_TS01_MM2CEERP_RESP-RETURN = lw_return. 37 ELSE. 38 lw_return-mesg = '該工廠不存在'. 39 output-MT_TS01_MM2CEERP_RESP-RETURN = lw_return. 40 ENDIF. 41 42 43 LOOP AT input-mt_ts01_mm2ceerp_req-item INTO lw_input_item. 44 CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' "增加前導零 45 EXPORTING 46 input = lw_input_item-matnr 47 IMPORTING 48 output = lw_input_item-matnr. 49 APPEND lw_input_item TO lt_input_item. 50 ENDLOOP. 51 52 LOOP AT lt_input_item INTO lw_input_item. 53 SELECT SINGLE 54 a~matnr 55 a~werks 56 a~lgort 57 b~maktx 58 a~labst 59 FROM mard AS a INNER JOIN makt AS b 60 ON a~matnr = b~matnr 61 INTO CORRESPONDING FIELDS OF lw_output_item 62 WHERE a~matnr = lw_input_item-matnr AND 63 a~werks = lw_input_item-werks AND 64 a~lgort = lw_input_item-lgort AND 65 b~spras = sy-langu. 66 67 IF sy-subrc eq 0. 68 APPEND lw_output_item TO output-mt_ts01_mm2ceerp_resp-item. 69 CLEAR: lw_output_item. 70 ENDIF. 71 ENDLOOP. 72 73 ENDMETHOD.