ALE/IDocs是什么?
ALE 是Application Link and Enabling的缩写,是SAP专门为SAP与SAP之间所设计的整合中间件。IDocs是中介文本
(Intermediate DOCument) 的缩写,是SAP提供的系统整合专用的数据/消息格式。ALE在SAP
3.0版本开始就作为SAP整个应用体系的一部分,为分布式数据交换提供了可靠安全的通讯机制。ALE的设计,原本作为两个SAP流程之间的一种消息传递服务(Messaging
Service)
,使SAP与SAP的业务流程之间企业数据能够有效的交换,为两个独立的SAP之间提供了的系统整合服务。不过,随着应用的发展,ALE/IDocs接口机制也已然成为与其它非SAP系统的标准的整合方式。
ALE的设计结构可以分为三层,即应用层,数据/消息分配层和通讯层。通讯层是SAP整合机制的基础,它利用远程功能呼叫RFC(Remote Function
Call)调用SAP系统的功能模块。
数据/消息分配层,主要提供三个关键服务:
按数据分配模型决定数据接收者。
消息的过滤和转换。
数据/消息的压缩,以提高传递效率。
应用层直接与SAP系统接口,生成或从其它系统接收含有路由信息的消息文本IDocs,包括消息接收者的姓名,要求发送的类型以及对消息进行处理的规则。
ALE的机制代替了原来的SAP所提供的批数据通讯BDC(Batch Data Communication)
方式。顾名思义,BDC为系统之间提供了简单的数据批处理服务,还不能作为一种中间件技术,它没有提供系统之间进行无缝整合所要求的纠错功能、系统管理和其它安全措施。总得说来,应用SAP的ALE机制进行SAP与SAP或非SAP系统整合有以下几个好处:
ALE技术不受SAP版本升级的影响,它提供了版本向后兼容性。ALE定义于SAP应用层,与SAP的逻辑层相对独立,整个ALE中间件独立于发送和接收系统。
ALE消息设计逻辑保证消息的“一次且只有一次”的消息传递。ALE采用“存储-
发送”技术确保消息即使系统发生故障或接收方没有准备接收时也可以达到目的地。这样就保证接收方不至于收到重复消息。
ALE也提供了IDocs管理功能。主要有文本缩减、文本版本控制以及文本数据过滤。三种控制机制使得SAP开发人员可以根据实际需要对IDocs文本在运行中进行动态处理。
ALE提供了系统管理功能,允许对ALE系统进行启动/复位/恢复等系统操作,为开发人员提供了进一步的管理控制。
IDoc 几乎可以传带任何SAP应用的数据,是一种“外围”定义格式,与SAP的应用数据定义不直接相关。IDocs已经广泛应用于早期的SAP-
EDI的数据交换,因而它的设计有点类似于EDI的标准,即EDIFACT标准。
IDocs是以字符基础的,因而是可读的。它有三种纪录类型,即:
控制纪录-含文本信息,如IDoc类型,发送/接收方信息以及文本标识。
数据纪录-含管理和实际数据部分。
状态纪录-用来追踪文本传递各点的状态,如状态码,系统时间,错误标识等。
1 、 需求场景
可以通过配置IDOC,通过PO将物料主数据下发到MDM系统。
## 2配置发送端IDOC
## 2.1定义段(WE31)
1\. 定义段类型,包含需要传输的字段
2\. 创建成功后设置批准
### 2.2定义基本类型(WE30)
1\. 创建开发对象
2\. 将段维护到基本类型
### 2.3定义消息类型(WE81)
1\. 定义消息类型
3\. WE82把基本类型分配给消息类型
### 2.5创建RFC目标(SM59)
1\. 创建RFC目标连接
2输入目标系统账户名密码
### 2.6创建接收端端口(WE21)
### 2.7配置发送端逻辑系统(SALE)
1\. 定义逻辑系统
### 2.8分配逻辑系统
1\. 将逻辑系统分配到集团
### 2.9维护分布模型和视图
点击更改参数文件
出站配置
入站配置
运行事务代码BD87查看结果。如果未黄灯,可以点击处理,再次执行。
查看结果,IDOC发送成功
CMOD
*&---------------------------------------------------------------------* *& 包含 ZXMGVU03 *&---------------------------------------------------------------------* CONSTANTS lc_segnam TYPE edilsegtyp VALUE 'ZMATMAS'. CONSTANTS lc_segnam1 TYPE edilsegtyp VALUE 'ZMATMAS1'. DATA:ls_idoc_data TYPE edidd, ls_idoc_data_next TYPE edidd, lv_tabix TYPE sy-tabix, ls_zmm_v_matcha TYPE zmm_v_matcha, ls_zmatmas TYPE zmatmas, ls_zmatmas1 TYPE zmatmas1, * ls_e1maram TYPE e1maram, ls_e1mara1 TYPE e1mara1, ls_e1marcm TYPE e1marcm. DATA:lt_idoc_data TYPE TABLE OF edidd, lv_exist_longtext TYPE boolean, ls_e1mtxhm TYPE e1mtxhm, ls_e1mtxlm TYPE e1mtxlm.
DATA:lt_mat TYPE zcl_bc_longtext_util=>tt_mat, lt_mat_longetxt TYPE zcl_bc_longtext_util=>tt_mat_longtext.CASE message_type. WHEN 'MATMAS'. LOOP AT idoc_data INTO ls_idoc_data. lv_tabix = sy-tabix.CASE ls_idoc_data-segnam.
WHEN 'E1MARA1'. CLEAR ls_e1mara1. MOVE ls_idoc_data-sdata TO ls_e1mara1. CLEAR ls_e1mara1. MOVE ls_idoc_data-sdata TO ls_e1mara1. CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT' EXPORTING input = ls_e1mara1-matnr_external IMPORTING output = ls_e1mara1-matnr_external EXCEPTIONS length_error = 1 OTHERS = 2. IF sy-subrc <> 0. * Implement suitable error handling here ENDIF.READ TABLE idoc_data WITH KEY segnam = lc_segnam TRANSPORTING NO FIELDS. IF sy-subrc = 0. CONTINUE. ENDIF.CLEAR ls_zmatmas. SELECT SINGLE * INTO CORRESPONDING FIELDS OF ls_zmatmas FROM zmm_v_matcha WHERE objek = ls_e1mara1-matnr_external.SELECT SINGLE ZZTSHXP ZZLBYP ZZCASID INTO (ls_zmatmas-ZZTSHXP,ls_zmatmas-ZZLBYP,ls_zmatmas-ZZCASID) FROM mara WHERE matnr = ls_e1mara1-matnr_external.REFRESH:lt_mat,lt_mat_longetxt. APPEND ls_e1mara1-matnr_external TO lt_mat. zcl_bc_longtext_util=>get_mat_longtext( EXPORTING it_mat = lt_mat IMPORTING et_mat_longetxt = lt_mat_longetxt ). READ TABLE lt_mat_longetxt INTO DATA(ls_mat_longetxt) INDEX 1. IF ls_mat_longetxt-longtext IS NOT INITIAL. ls_zmatmas-zzltx = ls_mat_longetxt-longtext. ELSE. SELECT SINGLE maktx INTO ls_zmatmas-zzltx FROM makt WHERE matnr = ls_e1mara1-matnr_external AND spras = '1'. ENDIF.REPLACE ALL OCCURRENCES OF '<(>&<)>' IN ls_zmatmas-zzl
...