)
SAP PI开发手册-ERP发布服务供外部系统调用sproxy代理类转自https://www.cnblogs.com/fanjb/p/10829858.html一、 接口内容接口详细信息1. 字段对应关系发送字段对应关系返回字段对应关系2. 报文信息传入报文报文结构外围系统提供返回报文外围系统提供二、 接口配置登陆网址http://sgnwpid.sgcc.com.cn:50000/dir/start/index.jsp事物码登陆SXMB_IFRA.配置ESREnterprise Service Builder找到对应命名空间人资组开发机目前只有薪酬通道是正常的此处我们暂时挂到薪酬组下1. 创建Data Types代理类形式需要为双方接口创建数据类型国网项目都需要走esb通道所传数据以![CDATA[*]]包裹xml报文形式进行传输所以发出方只需要输入输出各一个参数即可此处我们使用公共数据类型1.1 外围侧发送方DT_SHARE_SGHRERP2CEERP_REQDT_SHARE_SGHRERP2CEERP_RESP1.2 ERP侧接收方DT_TS01_MM2CEERP_REQDT_TS01_MM2CEERP_RESP1.3 外围和集中部署关系图如下2. 创建Message Types根据DATA TYPES创建ERP侧的MESSAGER TYPES3. 创建Service Interface分别创建外围系统方和集中部署方服务接口。SIO_TS01_MM_GETMSGSII_TS01_CEERP_GETMSG4. 创建Imported Archives编辑xsl文档并导入IACDATA和xml之间转换的固定格式REQUEST:根据外围系统传入报文路径取数拼接到集中部署messagetyeps的报文结构中RESPONSE:同理将集中部署侧messagetypes的返回报文的值拼入到外围返回报文中去5. 创建Operation MappingB.配置integration builder1. 创建Configuration Scenario场景CS_TS01_MM2CEERP_GETMSG2. 导入Business System3. 创建发送方Communication ChannelCC_TS01_MM_GETMSG4. 创建Sender Agreement发送方发送方为BS_SGHRERP5. 创建Receiver Determination确认接收方系统接收方集中部署2016. 创建Interface Determination确认接收方系统的接收接口7. 创建接收方Communication Channel代理类用XIRFC类型用RFC8. 创建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填写CCBS_SGHRERP并导出wsdl即可供外围系统调用。三、 GUI侧接口开发前文部分为PI接口java端的开发配置接下来开发基于abap的服务提供方接口既ERP侧的逻辑代码。事物代码sproxy1. 根据组件名称、命名空间、接口名找到对应的接口由于服务提供方为集中部署我们只需开发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.