加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

SAP IDoc 实例详解 【转】

(2015-08-30 19:24:03)
标签:

sap

idoc

we31

分类: SAP文章

转自 :http://jsfeiyu.blog.163.com/blog/static/1201848742010617112345661/

 

IDOC实例详解(阵全)

 

 

       IDOC是用于在不同的SAP系统之间或SAP系统与外部系统之间传输信息的一种文档表示形式。

本实例讲述从SAP客户端:SAPDEV 200传送自定义表中的内容至SAPPROD 700。

其中SAPPROD 700的在200中逻辑系统名称为:DEVCLNT700

       SAPDEV 200的在200中逻辑系统名称为:DEVCLNT200

传送的表结构如下:此表在DEV200和PRD700中均存在。

 

本实例中在讲述DEV200和PRD700之间的通讯设置中,如有不明白之处,还请参考本人的另一个文档“ALE配置及操作详解(阵全)”。

本实例讲述的是不通过消息控制的,处于不同物理地址的SAP系统间的数据传输。

 

一、使用TCODE:WE31创建一个段,该段须在DEV200和PRD700同时存在。

 

 

该段中只包含一个字段。

 

二、使用TCODE:WE30创建一个IDOC基本类型,该类型须在DEV200和PRD700同时

存在。

 

 

 

三、使用TCODE:WE81创建一个逻辑消息类型。只需在DEV200中创建。

 

 

四、TCODE:WE82在DEV200中指定逻辑消息类型和IDOC基本类型的对应关系。

 

 

五、使用TCODE:BD64在DEV200中添加消息类型ZMSGDEPARTMENT,并产生合作伙

伴文件及分配,详细操作请见“ALE配置及操作详解(阵全)”。如下图:

 

BD64界面。

 

 

在DEV200中产生的对应于PRD700的RFC端口。通过TCODE:WE21查看。

 

 

在DEV200中产生的对应于PRD700的合作伙伴参数,消息类型为

ZMSGDEPARTMENT,可使用TCODE:WE20查看。

 

 

六、TCODE:SE38在DEV200中写该IDOC的出站处理程序。代码如下:

*&---------------------------------------------------------------------*

*& Report  ZCREATEMATARIALIDOC

*&

*&---------------------------------------------------------------------*

REPORT  ZCREATEDEPARTMENTIDOC.

DATA: G_IDOC_CTL LIKE EDIDC,

      ZSEGDEPARTMENT LIKE ZSEGDEPARTMENT.

 

DATA: GI_RET_CTL LIKE EDIDC OCCURS 0,

      GI_IDOC_DATA LIKE EDIDD OCCURS 0 WITH HEADERLINE.

 

PERFORM BUILD_IDOC_CTL.

 

PERFORM BUILD_IDOC_SEG.

 

PERFORM CREATE_IDOC.

 

*&---------------------------------------------------------------------*

*&      Form  CREATE_IDOC

*&---------------------------------------------------------------------*

      text

FORM CREATE_IDOC.

 

  CALL FUNCTION 'MASTER_IDOC_DISTRIBUTE'

    EXPORTING

      MASTER_IDOC_CONTROL                  = G_IDOC_CTL

    TABLES

      COMMUNICATION_IDOC_CONTROL           = GI_RET_CTL

      MASTER_IDOC_DATA                     = GI_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

  G_IDOC_CTL-IDOCTP = 'ZTYPDEPARTMENT'.    "IDOC TYPE

  G_IDOC_CTL-MESTYP = 'ZMSGDEPARTMENT'.      "MESSAGE TYPE

* RECEIVER

  G_IDOC_CTL-RCVPRT = 'LS'.         "PARTNER TYPE

  G_IDOC_CTL-RCVPRN = 'DEVCLNT700'.  "PARTNER NO

  G_IDOC_CTL-RCVPOR = 'A000000017'.    "PORT

* SENDER

  G_IDOC_CTL-SNDPRT = 'LS'.          "PARTNER TYPE

  G_IDOC_CTL-SNDPRN = 'DEVCLNT200'.   "PARTNER NO

G_IDOC_CTL-SNDPOR = 'A000000017'.      "PORT

ENDFORM.                    " BUILD_IDOC_CTL

 

*&---------------------------------------------------------------------*

*&      Form  BUILD_IDOC_SEG

*&---------------------------------------------------------------------*

FORM BUILD_IDOC_SEG.

* HEAD DATA

  GI_IDOC_DATA-SEGNAM = 'ZSEGDEPARTMENT'. "SEGMENT NAME

  GI_IDOC_DATA-SEGNUM = 1.             "SEGMENT NO

 

  ZSEGDEPARTMENT-DEPT_NAME = '资讯部'.    "部门名称

  MOVE ZSEGDEPARTMENT TO GI_IDOC_DATA-SDATA.

  APPEND GI_IDOC_DATA.

 

ENDFORM.                    " BUILD_IDOC_SEG

 

七、PRD700中,使用BD64查看在本文档中第五步产生的分配模型。

   

   

       BD64所见图

 

      

       WE21所见图

      

八、              PRD700中使用TCODE:SE37创建一个函数,代码如下:可通过复制系统标准的入站处理函数代码,再更改!

       FUNCTION ZIDOC_INPUT_DEPARTMENT.

*"----------------------------------------------------------------------

*"*"Local interface:

*"  IMPORTING

*"     VALUE(INPUT_METHOD) LIKE  BDWFAP_PAR-INPUTMETHD

*"     VALUE(MASS_PROCESSING) LIKE  BDWFAP_PAR-MASS_PROC

*"     VALUE(NO_APPLICATION_LOG) LIKE  SY-DATAR OPTIONAL

*"     VALUE(MASSSAVEINFOS) LIKE  MASSSAVINF STRUCTURE  MASSSAVINF

*"       OPTIONAL

*"  EXPORTING

*"     VALUE(WORKFLOW_RESULT) LIKE  BDWF_PARAM-RESULT

*"     VALUE(APPLICATION_VARIABLE) LIKE  BDWF_PARAM-APPL_VAR

*"     VALUE(IN_UPDATE_TASK) LIKE  BDWFAP_PAR-UPDATETASK

*"     VALUE(CALL_TRANSACTION_DONE) LIKE  BDWFAP_PAR-CALLTRANS

*"  TABLES

*"      IDOC_CONTRL STRUCTURE  EDIDC

*"      IDOC_DATA STRUCTURE  EDIDD

*"      IDOC_STATUS STRUCTURE  BDIDOCSTAT

*"      RETURN_VARIABLES STRUCTURE  BDWFRETVAR

*"      SERIALIZATION_INFO STRUCTURE  BDI_SER

*"----------------------------------------------------------------------

* SET RETURN_VARIABLES VALUE

  READ TABLE IDOC_CONTRL INDEX 1.

  RETURN_VARIABLES-DOC_NUMBER = IDOC_CONTRL-DOCNUM.

  RETURN_VARIABLES-WF_PARAM = 'Processed_IDOCs'.

  APPEND RETURN_VARIABLES.

 

* SET IDOC_STATUS VALUE.

  CLEAR IDOC_STATUS.

  IDOC_STATUS-STATUS = '53'.

  IDOC_STATUS-DOCNUM = IDOC_CONTRL-DOCNUM.

  IDOC_STATUS-REPID  = SY-REPID.

  APPEND IDOC_STATUS.

****以下代码为测试,可通过IDOC_DATA取得

  DATA:ZD  TYPE  ZDEPARTMENT.

  ZD-DEPT_NAME  'ABC'.

  INSERT INTO ZDEPARTMENT VALUES ZD.

 

ENDFUNCTION.

 

九、在PRD700中使用TCODE:WE42创建该IDOC的入站处理代码.

   

   

   

   

    可复制其它标准的。

   

 

十、在PRD700中,TCODE:WE20创建DEV200的参数合作伙伴。

      

      

 

十一、在DEV200中执行相关出站处理程序,第六步所写的。并用WE02查看出站IDOC

状态。

 

 

十二、在PRD700使用WE02查看进站IDOC状态。

      

 

十三、在PRD700是,查看表ZDEPARTMENT,部门“ABC”已加入。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有