浅谈IDOC原理与机制(一)

这里不讨论IDOC具体的创建过程,仅说原理及机制。

 1.IDOC的两个特点:面向消息;异步;

 2.IDOC的两种应用:

       ALE:是面向于同一个公司不同的系统;

       EDI:是面向于不同公司;

3.IDOC发送数据的流程:

       创建凭证--->  产生IDOC---> 检查合作伙伴及端口--->发送数据。

      详细如下:

       产生IDOC: 对于outbound来说,首先要做合作伙伴信息的建立,WE20;

                        定义message type。

在进行端口及output mode、idoc type的设置

 对于OUTBUT MODE,如果选择transfer idoc immed,会立即产生IDOC文件;如果是COLLECT IDOCS,则是先收集,然后通过作业来实现idoc的产生,作业名是:RSNAST00;

     IDOC TYPE中的extension是对标准的idoc type没有的字段进行增加,VIEW是可以选择自己需要的段,减少数据的传输。

 使用标准的MESSAGE TYPE,需要定义MESSAGE CONTROL,TCODE是:NACE.需要业务类型,点击“OUTPUT TYPES”.

4. 对于INBOUND 来说,流程是:外系统发送文件----> 在SAP中检查端口、合作伙伴,生产IDOC---->处理IDOC文件。

5.IDOC RECORD TYPES用三部分组成:CONTROL RECORD(idoc id,partner、idoc type and logical message、external structure) 、DATA RECORDS(segment) 、

       STATUS RECORDS(idoc id,status information)。

6.IDOC TYPE 和MESSAGE TYPE的区别,可以理解为IDOC TYPE  确定了数据的结构;MESSAGE TYPE 定义了 process code

  

    对于inbound中的PROCESSING BY FUNCTION MODULE的如果选择TRIGGER BY BACKGROUND PROGRAM的话,也需要安排后台作业进行执行,RSEINB00和RBDAPP01

    IDOC TYPE 和MESSAGE TYPE的设置tcode为:WE81/WE82

7. 对于增强部分,主要是在process code的函数中找到相应的customer user exit。

8.自定义MESSAGE TYPE ,需要在function注意:四部分:

  * check if the function is called correctly                            *
  DATA: P_SQL_NO(9TYPE N,P_LIFEX LIKE LIKP-LIFEX,
        GDF_LFIMG TYPE ZHJS_EDI_KBETR.
  READ TABLE IDOC_CONTRL INDEX 1.
  IF SY-SUBRC <> 0.
    EXIT.
  ELSEIF IDOC_CONTRL-MESTYP <> 'Z_GDSRECPT'.
    RAISE WRONG_FUNCTION_CALLED.
  ENDIF.

    LOOP AT IDOC_CONTRL.
    REFRESH:GT_ITAB.
*   select segments belonging to one IDoc                              *
    REFRESH T_EDIDD.
    LOOP AT IDOC_DATA WHERE DOCNUM = IDOC_CONTRL-DOCNUM.
      APPEND IDOC_DATA TO T_EDIDD.
    ENDLOOP.
    REFRESH T_EDIDD1.
    APPEND LINES OF T_EDIDD TO T_EDIDD1.

  *   through all segments of this IDoc                                  *
    CATCH SYSTEM-EXCEPTIONS CONVERSION_ERRORS = 1.
      PERFORM GET_SEQ_NO USING IDOC_CONTRL-SNDPRN CHANGING P_SQL_NO.
      GDF_ERDAT = SY-DATUM.
      LOOP AT T_EDIDD INTO IDOC_DATA.
        CASE IDOC_DATA-SEGNAM.
          WHEN 'Z_EDI_SEG_GDSRECPT_BD'.
            E1BP_PTP02 = IDOC_DATA-SDATA.

      ******************

 *       返回消息.

        CLEAR IDOC_STATUS.
        IDOC_STATUS-DOCNUM   = IDOC_CONTRL-DOCNUM.
        IDOC_STATUS-MSGTY    = 'S'.
        IDOC_STATUS-MSGID    = 'ZHJS_EDI'.
        IDOC_STATUS-MSGNO    = '000'.
*        IDOC_STATUS-APPL_LOG = RETN_INFO-LOG_NO.
        IDOC_STATUS-MSGV1    = 'Table has been updated successfully'.
*        IDOC_STATUS-MSGV2    = RETN_INFO-MESSAGE_V2.
*        IDOC_STATUS-MSGV3    = RETN_INFO-MESSAGE_V3.
*        IDOC_STATUS-MSGV4    = RETN_INFO-MESSAGE_V4.
        IDOC_STATUS-REPID    = SY-REPID.
        IDOC_STATUS-STATUS   = '53'.
        APPEND IDOC_STATUS.

posted on 2011-07-28 17:53  冷合礼  阅读(1753)  评论(1编辑  收藏  举报

导航