一、 文档信息
版本号* |
更新日期* |
姓名* |
更新内容及更新理由* |
备注* |
V1.0 |
2019/04/01 |
范佳斌 |
文档创建 |
此接口为集中部署发布服务供外围系统调用,实现方式为sproxy代理类的形式。可与RFC类型(文档01)互作比较,两者功能相同实现方式不同。 |
V1.1 |
2019/04/08 |
范佳斌 |
文档调整 |
|
|
|
|
|
|
二、 接口内容
接口编号 |
TS01 |
||
接口功能描述 |
测试:外围系统调用集中部署服务,获取集中部署物料信息 |
||
发送方 |
外围系统 |
发送方接口名称 |
SIO_TS01_MM_GETMSG |
接收方 |
集中部署ERP系统 |
接收方接口名称 |
SII_TS01_CEERP_GETMSG |
交互模式 |
同步 |
||
触发机制 |
实时/按需/定时作业 |
||
后台作业名称 |
无 |
作业频率 |
|
发生频度 |
每日 |
||
集成方式 |
PI+ESB |
||
接口类型 |
sproxy代理类 |
||
技术链路 |
外围系统-总部ESB-PI-集中部署ERP系统 |
||
服务提供方 |
集中部署ERP系统 |
||
备注 |
填写需要强调的重要信息 |
接口详细信息
1. 字段对应关系
发送字段对应关系
返回字段对应关系
字段信息 |
|||||||
发送方 |
接收方 |
字段描述 |
类型 |
是否必填 (是/否) |
长度(二者选其一) |
备注 |
|
外围系统 |
集中部署 |
固定长度 |
最大长度 |
||||
MATNR |
MATNR |
物料编码 |
CHAR |
|
|
||
WERKS |
WERKS |
工厂代码 |
CHAR |
|
|
||
LGORT |
LGORT |
库存地点 |
CHAR |
|
|
字段信息 |
|||||||
ERP系统字段名 |
外围系统字段名 |
字段描述 |
类型 |
是否必填 (是/否) |
长度 |
备注 |
|
固定长度 |
最大长度 |
||||||
MESG |
MESG |
APP接口编号 |
CHAR |
|
|
|
|
MATNR |
MATNR |
物料编码 |
CHAR |
|
|
||
WERKS |
WERKS |
工厂代码 |
CHAR |
|
|
||
LGORT |
LGORT |
库存地点 |
CHAR |
|
|
||
MAKTX |
MAKTX |
物料描述 |
CHAR |
|
|
||
LABST |
LABST |
非限制库存 |
DEC |
|
|
2. 报文信息
传入报文(报文结构,外围系统提供)
<?xml version="1.0" encoding="utf-8"?>
<REQMESG>
<HEADER>
<WERKS>B001</WERKS>
</HEADER>
<ITEM>
<MATNR>000000000500022359</MATNR>
<WERKS>B001</WERKS>
<LGORT>BBBB</LGORT>
</ITEM>
<ITEM>
<MATNR>000000000500022352</MATNR>
<WERKS>B001</WERKS>
<LGORT>9501</LGORT>
</ITEM>
</REQMESG>
返回报文(外围系统提供)
<?xml version="1.0" encoding="UTF-8"?>
<RESPONSE>
<MESG>天津市电工厂名称为</MESG>
<ITEM>
<MATNR>000000000500022359</MATNR>
<WERKS>B001</WERKS>
<LGORT>BBBB</LGORT>
<MAKTX>测试物料2004</MAKTX>
<LABST>3425.0</LABST>
</ITEM>
<ITEM>
<MATNR>000000000500022352</MATNR>
<WERKS>B001</WERKS>
<LGORT>9501</LGORT>
<MAKTX>test004</MAKTX>
<LABST>6.0</LABST>
</ITEM>
</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之间转换的固定格式:
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并填入
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. 实例参考代码
METHOD zpi00_ii_sii_ts01_ceerp_getmsg~sii_ts01_ceerp_getmsg.
*** **** INSERT IMPLEMENTATION HERE **** ***
DATA p_werks TYPE mard-werks.
TYPES:BEGIN OF ty_out,
matnr TYPE mard-matnr,
werks TYPE mard-werks,
lgort TYPE mard-lgort,
maktx TYPE makt-maktx,
labst TYPE mard-labst,
END OF ty_out.
DATA:lw_out TYPE ty_out,
lt_out TYPE TABLE OF ty_out.
DATA: lw_header TYPE zpi00_dt_ts01_mm2ceerp_req_hea, "输入参数抬头信息
lt_input_item TYPE TABLE OF zpi00_dt_ts01_mm2ceerp_req_ite, "输入参数内表
lw_input_item TYPE zpi00_dt_ts01_mm2ceerp_req_ite, "输入参数工作区
lw_return TYPE zpi00_dt_ts01_mm2ceerp_resp_re, "输出参数返回消息
lt_output_item TYPE TABLE OF zpi00_dt_ts01_mm2ceerp_resp_it, "输出参数内表
lw_output_item TYPE zpi00_dt_ts01_mm2ceerp_resp_it "输出参数工作区
.
DATA:lw_t001w TYPE t001w,
zmsg TYPE string.
MOVE-CORRESPONDING input-mt_ts01_mm2ceerp_req-header TO lw_header.
p_werks = lw_header-werks.
SELECT SINGLE werks name1 FROM t001w INTO CORRESPONDING FIELDS OF lw_t001w WHERE werks = p_werks AND spras = sy-langu.
IF lw_t001w-werks IS NOT INITIAL.
CONCATENATE lw_t001w-werks '工厂名称为' lw_t001w-name1 INTO zmsg.
lw_return-mesg = zmsg.
output-MT_TS01_MM2CEERP_RESP-RETURN = lw_return.
ELSE.
lw_return-mesg = '该工厂不存在'.
output-MT_TS01_MM2CEERP_RESP-RETURN = lw_return.
ENDIF.
LOOP AT input-mt_ts01_mm2ceerp_req-item INTO lw_input_item.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' "增加前导零
EXPORTING
input = lw_input_item-matnr
IMPORTING
output = lw_input_item-matnr.
APPEND lw_input_item TO lt_input_item.
ENDLOOP.
LOOP AT lt_input_item INTO lw_input_item.
* SELECT SINGLE a~matnr
* b~maktx
* FROM mard as a INNER JOIN makt as b
* on a~matnr = b~matnr
* INTO CORRESPONDING FIELDS OF lw_output_item
* WHERE a~matnr = lw_input_item-matnr.
SELECT SINGLE
a~matnr
a~werks
a~lgort
b~maktx
a~labst
FROM mard AS a INNER JOIN makt AS b
ON a~matnr = b~matnr
INTO CORRESPONDING FIELDS OF lw_output_item
WHERE a~matnr = lw_input_item-matnr AND
a~werks = lw_input_item-werks AND
a~lgort = lw_input_item-lgort AND
b~spras = sy-langu.
IF sy-subrc eq 0.
APPEND lw_output_item TO output-mt_ts01_mm2ceerp_resp-item.
CLEAR: lw_output_item.
ENDIF.
ENDLOOP.
ENDMETHOD.