一、      接口内容

接口详细信息

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,'&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;')">
9 <xsl:value-of select="substring-after($xmlStr,'&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;')" disable-output-escaping="yes"/>
10 </xsl:when>
11 <xsl:when test="contains($xmlStr,'&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;')">
12 <xsl:value-of select="substring-after($xmlStr,'&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;')" 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>

TS01_CDATA2XML

 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>

TS01_XML2CDATA

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>

TS01_REQ

根据外围系统传入报文路径取数拼接到集中部署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>

TS01_RESP

同理,将集中部署侧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.

20-SAP PI开发手册-ERP发布服务供外部系统调用(sproxy代理类)的更多相关文章

  1. SAP PI开发手册-ERP发布服务供外部系统调用(sproxy代理类)

    转自:https://www.cnblogs.com/fanjb/p/10829858.html 一.      接口内容 接口详细信息 1.  字段对应关系 发送字段对应关系 返回字段对应关系 2. ...

  2. SAP PI开发手册-ERP发布服务供外围系统调用(RFC类型)

    1转自:https://www.cnblogs.com/fanjb/p/10677018.html 8年进入国网项目后陆陆续续做了一些接口,按实现方法去分有RFC和代理类sproxy类型,按服务提供方 ...

  3. 10-PI开发手册-ERP发布服务供外围系统调用(RFC类型)

      一.      文档信息 版本号* 更新日期* 姓名* 更新内容及更新理由* 备注* V1.0 2019/02/19 fanjb 文档创建 以福利接口13589(Z00HRJ_GJJ_REV_FI ...

  4. 关于IIS寄宿WCF服务,客户端不能生成代理类

    我在使用VS2010写好WCF的Web服务后,部署在IIS7.0上,可以在IE9上进行访问,并且能显示XML数据,如下图 然后我在项目的客户端进行服务的添加引用,如下图 VS2010自动生成代理类,但 ...

  5. 10_Jaxws使用自定义pojo发布服务

    [简述] 查询三天的天气信息(天气概况.日期.温度),测试jaxws是否支持自定义pojo发布服务. [开发过程] 服务端: 1.自定义pojo(天气概况.日期.温度) 2.开发SEI接口及实现类 3 ...

  6. 阿里巴巴Java开发手册更新了!

    自2017年,<阿里巴巴Java开发手册>发布,现已有超过260万位工程师下载及查阅手册,在数以千计的企业应用,手册成为受业界认可的开发规范. 昨天,<Java开发手册>再次更 ...

  7. Dubbo2.7源码分析-如何发布服务

    Dubbo的服务发布逻辑是比较复杂的,我还是以Dubbo自带的示例讲解,这样更方便和容易理解. Provider配置如下: <?xml version="1.0" encod ...

  8. 重磅发布:《阿里巴巴Android开发手册(规约)》

    1.前言 阿里巴巴于近日为广大程序员再送上重磅开春好礼:<阿里巴巴Android开发手册(规约)>.该开发规范在阿里内部经过了长期的修缮,现已总结成册,向所有移动开发者.技术爱好者开放,希 ...

  9. 在线教学、视频会议 Webus Fox(2) 服务端开发手册

    上次在<在线教学.视频会议软件 Webus Fox(1)文本.语音.视频聊天及电子白板基本用法>里介绍了软件的基本用法.本文主要介绍服务器端如何配置.开发. 1. 配置 1.1 IIS配置 ...

随机推荐

  1. Ubuntu使用mail命令发送邮件

    sudo apt-get install mailutils   如下命令发送邮件:    mail -s "Test mail from ubuntu" ckboss@y< ...

  2. 理解 Android Binder 机制(一):驱动篇

    Binder的实现是比较复杂的,想要完全弄明白是怎么一回事,并不是一件容易的事情. 这里面牵涉到好几个层次,每一层都有一些模块和机制需要理解.这部分内容预计会分为三篇文章来讲解.本文是第一篇,首先会对 ...

  3. Stream(三)

    public class Test08 { /* * 二.中间的加工操作 * (1)filter(Predicate p):过滤 * (2)distinct():去重 * (3)limit(long  ...

  4. BIO编程

    在实际的工作开发中,传统的模型有client/service模型.client端和service端要进行通信的话,有一种套接字的方式.传统的socket编程,包含一个socket服务端和一到多个soc ...

  5. 【总结】swagger

    1.swagger概念及配置 1.1基本概念 1.是一款让你更好的书写API文档的规范且完整框架. 2.提供描述.生产.消费和可视化RESTful Web Service. 3.是由庞大工具集合支撑的 ...

  6. git版本管理系统使用

    版本管理系统Git 关注公众号"轻松学编程"了解更多. git下载链接:https://pan.baidu.com/s/12vJn-K0lK9XlkVQbNe8S-A 密码:m4m ...

  7. TCP的粘包和拆包问题及解决办法(C#)

    本文参考:https://blog.csdn.net/wxy941011/article/details/80428470 原因 如果客户端连续不断的向服务端发送数据包时,服务端接收的数据会出现两个数 ...

  8. Hash 算法与 Manacher 算法

    目录 前言 简单介绍 简述 Hash 冲突 离散化 基本结构 普通 Hash 简述 例题 字符串 Hash 简单介绍 核心思想 基本运算 二维字符串 Hash 例题 兔子与兔子 回文子串的最大长度 后 ...

  9. shp文件转dwg并创建文本标注

    不得不说,ArcGIS 和 CAD 之间的兼容性非常差,shapefile文件和dwg文件之间互相转换会丢失各种属性,但是很多时候他们之间的转换对我们来说是刚需.通常我们都是通过第三方软件(如FME) ...

  10. VC6最基本

    高级语言C++程序设计[chap4][p119-1][我的自考书-刘璟周玉龙书] 1.VC6使用: <1>.编译:"Build"-->"Compile& ...