一、      接口内容

接口详细信息

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. forword与redirect

    1.从地址栏显示来说 forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地 ...

  2. PowerShell查看历史记录

    PowerShell的所有历史记录:   Get-Content (Get-PSReadLineOption).HistorySavePath   顺手写了一个掉用的函数:  function Get ...

  3. 输出c字母图形

    1 #include "stdio.h" 2 #include "math.h" 3 int main(void) 4 { 5 double y; 6 int ...

  4. WAI-ARIA无障碍网页资料

    一.ARIA是啥? WAI-ARIA指无障碍网页应用.主要针对的是视觉缺陷,失聪,行动不便的残疾人以及假装残疾的测试人员.尤其像盲人,眼睛看不到,其浏览网页则需要借助辅助设备,如屏幕阅读器,屏幕阅读机 ...

  5. vue-cli3使用jq

    第一步安装 npm install jquery --save 第二部配置vue.config.js, 没有这个文件就创建 主要是框框出来的那些: 忽略我配置的另一个uglifyjs-webpack- ...

  6. SDOI征途--斜率优化

    题目描述 给定长为 n 的数列 a, 要求划分成 m 段,使得方差最小, 输出方差\(*m^2\) 题解 斜率优化好题 准备部分 设第 i 段长为 \(len_i\) 先考虑方差(\(S^2\))的式 ...

  7. Learn day1 变量/数据类型

    1.Python 简介 (1) 1989年开发的语言,创始人范罗苏姆(Guido van Rossum),别称:龟叔(Guido). (2) python具有非常多并且强大的第三方库,使得程序开发起来 ...

  8. python实现城市气候与海洋的关系研究

    城市气候与海洋的关系研究 关注公众号"轻松学编程"了解更多. 以下命令都是在浏览器中输入. cmd命令窗口输入:jupyter notebook 后打开浏览器输入网址http:// ...

  9. Java_进程与线程

    进Process&Thread 区别 进程 线程 根本区别 作为资源分配的单位 调度和执行的单位 开销 每个进程都有独立的代码和数据空间(进程上下文), 进程间的切换会有较大的开销 线程可以看 ...

  10. 在windows下安装node-sass失败,提示\node-sass: Command failed,解决方案

    执行命令 yarn add node-sass@4.7.2 --dev --registry=https://registry.npm.taobao.org :报错 出现这个问题的原因一般是网络问题, ...