一、前言
江正军的博客对IDOC介绍非常详细
https://www.cnblogs.com/jiangzhengjun/p/4292135.html#_Toc411677416
二、下面介绍CAR和MDG分别下发小票和物料主数据
三、CAR系统
本文介绍的配置实例是POSDM(CAR)系统产生的IDOC传递到S4 retail的过程的小票IDOC的相关配置
1、CAR系统中出站部分的配置
进入事务代码:SM59配置一个远程连接到ECC系统
2、配置端口
3、配置合作伙伴
WE20配置每个合作伙伴的类型的KU的出战参数,使用之前配置的端口
关于队列处理
SPRING
在配置出站参数时,有个队列处理复选框.
-
不勾选, 系统使用TRFC传输. 通过SM58监控数据传输是否成功
-
勾选 . 需要给一个队列命名规则(如下图). 系统使用qRFC传递数据 使用SMQ1/SMQ2 监控数据传输是否成功
四、retail 系统,入站
入站部分在ECC设置,
1、WE20设置相同的合作伙伴参数文件
触发方式
SPRING
一般情况下,建议配置为后台作业触发.
实际测试发现, 部分IDOC类型如果配置成立即触发. 有可能导致IDOC本身无法保存(原因可以是IDOC后续处理报错的数据回滚把IDOC本身的保存也回滚了)
一不小心滚远了
所以稳妥起见,建议使用后台作业触发. 定义BD20的后台作业执行IDOC的并发后台处理.
后台触发还有一个好处:IDOC的执行可控. 对于使用TRFC传递的IDOC.对系统的进程的保护更好.(避免因为处理性能问题占用更多的进程,导致系统性能下降)
2、合作伙伴类型的选择
除非是自己定义IDOC的发送. 或接收.可以通过代码确定使用什么样的合作伙伴.标准产生的IDOC一般会根据业务确定合作伙伴类型
小票的合作伙伴本身包含了业务信息,不能随意调整.
如果是自己开发IDOC的发送或产生可以使用逻辑系统合作伙伴. 这样可以减少配置量.
3、合作伙伴的批量配置
可以通过程序 Z_BC_WE20_COPY 批量复制一个已经配置好的合作伙伴. 实现快速配置
批量配置对入站,出站部分都有效, 因为系统复制的是合作伙伴本身. 会把合作伙伴的入站,出站参数都复制了.
FUNCTION zcar_edi_partner_copy.
*"----------------------------------------------------------------------
*"*"本地接口:
*" IMPORTING
*" VALUE(IV_PARTNER_SOURCE) TYPE EDIPPARNUM
*" VALUE(IV_PARTNER_DEST) TYPE EDIPPARNUM
*" EXPORTING
*" VALUE(EV_ERROR) TYPE EDI_HELP-ERROR_FLAG
*" VALUE(EV_MESSAGE) TYPE STRING
*"----------------------------------------------------------------------
DATA: ls_edpp1 TYPE edpp1.
DATA: ls_source_edkp1 TYPE edkp1,
ls_dest_edkp1 TYPE edkp1.
DATA: lv_pe_error TYPE edi_help-error_flag.
**----------------------------------------------------------------------
SELECT SINGLE *
INTO ls_edpp1
FROM edpp1
WHERE parnum EQ iv_partner_dest
AND partyp EQ 'KU'.
IF sy-subrc EQ 0.
ev_error = 'E'.
ev_message = '目标合作伙伴已存在'.
RETURN.
ENDIF.
SELECT SINGLE *
INTO ls_edpp1
FROM edpp1
WHERE parnum EQ iv_partner_source.
IF sy-subrc NE 0.
ev_error = 'E'.
ev_message = '源合作伙伴不存在'.
RETURN.
ENDIF.
**----------------------------------------------------------------------
ls_source_edkp1-parnum = iv_partner_source.
ls_source_edkp1-partyp = 'KU'.
ls_dest_edkp1-parnum = iv_partner_dest.
ls_dest_edkp1-partyp = 'KU'.
CALL FUNCTION 'EDI_PARTNER_COPY_COMPLETE'
EXPORTING
source_edkp1 = ls_source_edkp1
dest_edkp1 = ls_dest_edkp1
* active_field = ' '
* no_ptype_check = ' '
* no_exceptions = ' '
IMPORTING
pe_error = lv_pe_error
EXCEPTIONS
db_error = 1
entry_not_exist = 2
entry_already_exist = 3
parameter_error = 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 INTO ev_message.
ev_error = 'E'.
RETURN.
ENDIF.
IF lv_pe_error NE space.
ev_error = 'E'.
ev_message = '复制过程出现错误'.
RETURN.
ELSE.
ev_error = 'S'.
ev_message = '复制伙伴参数文件成功'.
RETURN.
ENDIF.
**----------------------------------------------------------------------
ENDFUNCTION.
五、总结
基础的IDOC的出站,入站配置比较简单. 系统中更多的复杂配置一般是为了实现特定业务单据的过滤,产生IDOC的逻辑,以及业务数据的转换,执行产生单据等逻辑. 了解了最基础的部分, 再去看那些复杂的配置, 就不会被困扰在配置的汪洋大海中.