转自:https://www.cnblogs.com/fanjb/p/10829858.html
一、 接口内容
接口详细信息
1. 字段对应关系
发送字段对应关系
返回字段对应关系
2. 报文信息
传入报文(报文结构,外围系统提供)
返回报文(外围系统提供)
二、 接口配置
登陆网址:
事物码登陆: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之间转换的固定格式:
REQUEST:
根据外围系统传入报文路径取数拼接到集中部署messagetyeps的报文结构中
RESPONSE:
同理,将集中部署侧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并填入
选择对应的接口,外围系统调用
外围系统调用即: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.