IDOC接口SAP间数据传递.docx
《IDOC接口SAP间数据传递.docx》由会员分享,可在线阅读,更多相关《IDOC接口SAP间数据传递.docx(17页珍藏版)》请在冰豆网上搜索。
IDOC接口SAP间数据传递
下面,咱们以SAP与SAP自概念数据传输的方式为例,向大伙儿说明如何利用IDOC。
本例中,咱们从一个系统(BI5CLNT202)将SFLIGHT的数据传输到另一个系统(BT3CLNT800)。
第一,从网上贴了下大体步骤,下面咱们依照那个步骤来操作:
创建IDOC:
第一步:
WE31创建IDOC所包含的字段. 第二步:
WE30创建IDOC把Segment分配给IDOC 第三步:
WE81 创建信息类型 第四步:
WE82 把IDOC类型与信息类型对应. 第五步:
WE57AssignMessage&IdocTypetoaFunctionModuleforProcess 第六步:
SM59DefineaRFCconnectionforIdoctransfer 第七步:
WE21DefineaPort(AssignaRFCdestinationwhichcreatedinSM59) 第八步:
WE41/42CreatProcessCode 第九步:
WE20DefineaPartnerProfiles(AlsocreataOutboundparameterswithPort,orInboundparameterswithProcesscode)管理IDOC:
WE02 显示IDOC,可以根据时间,IDOC类型查找IDOC,查看成功,出错信息。
WE46 IDOC管理(出\入) WE60 IDOC类型文档(可以查看IDOC结构,和每个字段的描述. WE19 根据IDOC号进行IDOC处理,可以修改IDOC值进行补发动作,处理分为内向和外向。
消息配置:
WE20配置伙伴消息进和出IDOC类型 WE21配置伙伴。
以下操作在发送方:
1.创建IDOC类型的段(WE31)
IDOC类型的字段,是组成MESSAGE的大体单位,咱们那个地址按关键值和非关键值分为2部份:
ZSEG_FLY01
ZSEG_FLY02:
创建完成后,能够通过菜单:
EDIT->SetRelease来发布SEGMENT。
2.创建IDOC类型,并把段分派给IDOC类型(WE30)
新建IDOC类型,点击
,将适才创建的段ZSEG_FLY01分派给根节点,将ZSEG_FLY02作为子节点分派给ZSEG_FLY01。
并将ZSEG_FLY01设置为强制,数量从1-9999999;将ZSEG_FLY02,设置为非强制,数量从1-1
最后的成效如下:
3.创建消息类型(WE81)
消息类型是传递消息的大体单元,所有的消息传递都是通过消息类型来操作的。
那个地址咱们只概念消息类型的名称。
4.将IDOC类型分派给消息类型(WE82)
5.概念RFC连接(SM59)
概念目标系统的链接:
6.概念端口(WE21)
那个地址概念目标系统的端口,概念事物性RFC,将RFCDestination概念为方才创建的系统链接
创建逻辑系统:
(SALE)
SALE->BasicSetting->LogicalSystem->DefineLogicalSystem
若是本系统的RFC链接也是第一次创建,还需要将逻辑系统分派到CLINET。
7.保护伙伴参数(WE20)
咱们为源系统保护出站参数。
将前面创建的逻辑系统作为合作伙伴编号,点击OutputParameters中的
按钮,添加出站处置参数:
以下内容为接收方系统完成:
8.依照前面的步骤,在接收方,创建相同的SEGMENT/IDOCTYPE/MESSAGETYPE等,和SM59概念RFC链接
9.设置入站处置代码(WE42)
第一,创建同意数据的表,从SFLIGHT复制:
咱们利用FUNCTIONMUDULE来处置数据。
需要概念入站处置代码,再分派给进站参数
第一创建FM,咱们从标准的IDOCFM“BAPI_IDOC_INPUT1”复制一个咱们自己的,逻辑咱们自己写,只取其参数,代码如下。
(具体创建FM的方式略)
FUNCTIONZADDFLYS.
*"----------------------------------------------------------------------
*"*"LocalInterface:
*"IMPORTING
*"VALUE(INPUT_METHOD)LIKEBDWFAP_PAR-INPUTMETHD
*"VALUE(MASS_PROCESSING)LIKEBDWFAP_PAR-MASS_PROC
*"EXPORTING
*"VALUE(WORKFLOW_RESULT)LIKEBDWF_PARAM-RESULT
*"VALUE(APPLICATION_VARIABLE)LIKEBDWF_PARAM-APPL_VAR
*"VALUE(IN_UPDATE_TASK)LIKEBDWFAP_PAR-UPDATETASK
*"VALUE(CALL_TRANSACTION_DONE)LIKEBDWFAP_PAR-CALLTRANS
*"TABLES
*"IDOC_CONTRLSTRUCTUREEDIDC
*"IDOC_DATASTRUCTUREEDIDD
*"IDOC_STATUSSTRUCTUREBDIDOCSTAT
*"RETURN_VARIABLESSTRUCTUREBDWFRETVAR
*"SERIALIZATION_INFOSTRUCTUREBDI_SER
*"EXCEPTIONS
*"WRONG_FUNCTION_CALLED
*"----------------------------------------------------------------------
data:
gt_zzsflighttypeZZSFLIGHToccurs0withheaderline,
wa_fly01likeZSEG_FLY01,
wa_fly02likeZSEG_FLY02.
*SETRETURN_VARIABLESVALUE
readtableidoc_contrlindex1.
return_variables-doc_number=idoc_contrl-docnum.
return_variables-wf_param='Processed_IDOCs'.
appendreturn_variables.
*SETIDOC_STATUSVALUE.
clearidoc_status.
idoc_status-status='53'.
idoc_status-docnum=idoc_contrl-docnum.
idoc_status-repid=sy-repid.
appendidoc_status.
*READEDIDD
loopatidoc_data.
caseidoc_data-segnam.
when'ZSEG_FLY01'.
clear:
wa_fly01,wa_fly02.
moveidoc_data-sdatatowa_fly01.
when'ZSEG_FLY02'.
moveidoc_data-sdatatowa_fly02.
move-correspondingwa_fly01togt_zzsflight.
move-correspondingwa_fly02togt_zzsflight.
appendgt_zzsflight.
endcase.
endloop.
*PROCESSINGDATA
insertzzsflightfromtablegt_zzsflight.
ENDFUNCTION.
将刚创建的FM添加到进站函数模块列表中(BD51)
下面咱们开始创建进站处置代码:
(WE42)
依照下面屏幕概念Processcode:
保留后,选择咱们适才创建的FM:
保留后,创建Processcode的消息类型:
10.分派FM到消息和IDOC类型(WE57)
11.保护伙伴参数文件(WE20)
12.在发送端效劳器新建一下程序,执行:
*&---------------------------------------------------------------------**& Report ZTESTIDOC*&*&---------------------------------------------------------------------**&*&*&---------------------------------------------------------------------*REPORT ZTESTIDOC.data:
wa_idoc_ctl like edidc, wa_fly01 like zseg_fly01, wa_fly02 like zseg_fly02.data:
gt_ret_ctl like edidc occurs 0, gt_idoc_data like edidd occurs 0 with header line, gt_sflight like sflight occurs 0 WITH HEADER LINE.* BUILD IDOC_CTL RECORDperform build_idoc_ctl.* BUILD ICOC_SEGMENT DATAperform build_idoc_seg.* CALL FUNCTION AND CREATE IDOCperform create_idoc.*&---------------------------------------------------**& Form CREATE_IDOC*&---------------------------------------------------** text*----------------------------------------------------** --> p1 text* <-- p2 text*----------------------------------------------------*form create_idoc. call function 'MASTER_IDOC_DISTRIBUTE' exporting master_idoc_control = wa_idoc_ctl* OBJ_TYPE = ''* CHNUM = '' tables communication_idoc_control = gt_ret_ctl master_idoc_data = gt_idoc_data* EXCEPTIONS* ERROR_IN_IDOC_CONTROL = 1* ERROR_WRITING_IDOC_STATUS = 2* ERROR_IN_IDOC_DATA = 3* SENDING_LOGICAL_SYSTEM_UNKNOWN = 4* OTHERS = 5 . if sy-subrc <> 0. MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. else. commit work. endif.endform. " CREATE_IDOC*&---------------------------------------------------**& Form BUILD_IDOC_CTL*&--------------------------------------------------** text*----------------------------------------------------** --> p1 text* <-- p2 text*----------------------------------------------------*form build_idoc_ctl.* TYPE wa_idoc_ctl-idoctp = 'ZDOCTY_FLY'. "IDOC TYPE (WE30) wa_idoc_ctl-mestyp = 'ZMSG_FLY'. "MESSAGE TYPE (WE81)* RECEIVER wa_idoc_ctl-rcvprt = 'LS'. "PARTNER TYPE wa_idoc_ctl-rcvprn = 'B3TCLNT800'. "PARTNER NO* SENDER wa_idoc_ctl-sndprt = 'LS'. "PARTNER TYPE wa_idoc_ctl-sndprn = 'BI5CLNT202'. "PARTNER NOendform. " BUILD_IDOC_CTL*&---------------------------------------------------**& Form BUILD_IDOC_SEG*&---------------------------------------------------** text*----------------------------------------------------** --> p1 text* <-- p2 text*----------------------------------------------------*form build_idoc_seg. select * from sflight into table gt_sflight.* loop at gt_sflight. gt_idoc_data-segnum = gt_idoc_data-segnum + 1. "SEGMENT NO gt_idoc_data-segnam = 'ZSEG_FLY01'. "SEGMENT NAME MOVE-CORRESPONDING gt_sflight to wa_fly01. move wa_fly01 to gt_idoc_data-sdata. append gt_idoc_data. gt_idoc_data-PSGNUM = gt_idoc_data-segnum. gt_idoc_data-segnum = gt_idoc_data-segnum + 1. gt_idoc_data-segnam = 'ZSEG_FLY02'. "SEGMENT NAME MOVE-CORRESPONDING gt_sflight to wa_fly02. move wa_fly02 to gt_idoc_data-sdata. append gt_idoc_data. endloop.endform. " BUILD_IDOC_SEG
通过WE02检查执行结果:
发送方:
双击各个项目能够看到明细
双击查看明细:
同意方:
Notes:
那个地址,接收方显示状态64,表示数据已成功同意,但还需要将数据传送到应用程序
因为接口此刻状态为64,咱们还要执行一个程序,来触发数据的传输:
TCODE:
BD20(或程序:
RBDAPP01;)
查看表ZZSFLIGHT的数据,与源系统数据一致