您的位置:首页 > 其它

IDOC step by step

2013-05-31 14:21 330 查看
Outbound in sourcing system                                                                                                                                         

1. WE31, Create Segment type



 

 


Release Segment



 

2. WE30, Create IDOC type





 光标放在ZERO_IDOC上, 按create.



 



 光标放在ZEROHEAD上, 按create



 这里可以选择增加segment作为同一level segment, 或作为子level的segment



 



 



 Set release IDOC



 

3. WE81, Create Message Type.

 


 

4. WE82, Mapping Message Type and IDOC type



 

5. SM59, Create RFC connection



 在Target Host输入IP



 点Conncetion Test可以测试连通情况(相当于ping), 点Remote Logon可以直接连到目标系统.



 6. WE21, Create Port



 这里可以选择自动生成port name或都自己命名port name.



 



 

7. SALE, Define Logical Sytem



 



 8. WE20, Create partner profile



 挂上message type





9. Outbound代码

DATA:
ls_pohead TYPE zerohead,
ls_poitem TYPE zeroitem,
ls_edidc  TYPE edidc,
lt_edidc  TYPE TABLE OF edidc,
lt_edidd  TYPE TABLE OF edidd WITH HEADER LINE.
CLEAR ls_edidc.

*系统根据下面4行即可与WE20设置关联起来
ls_edidc-mestyp = 'Z_ZERO_MSG'. "Message Type
ls_edidc-idoctp = 'ZERO_IDOC'.  "IDOC Type
ls_edidc-rcvprn = 'ZEROEC6'.    "Partner Number of Recipient接收方
ls_edidc-rcvprt = 'LS'.         "Partner Type of Receiver

*添加IDOC结点
CLEAR lt_edidd.
lt_edidd-segnam = 'ZEROHEAD'."结点名称
lt_edidd-dtint2 = 0.
CLEAR ls_pohead.
ls_pohead-ebeln = '4001122335'.
ls_pohead-bukrs = '0400'.
ls_pohead-bstyp = 'EC'.
lt_edidd-sdata = ls_pohead. "结点内容
APPEND lt_edidd.
CLEAR lt_edidd.
lt_edidd-segnam = 'ZEROITEM'.
lt_edidd-dtint2 = 0.
CLEAR ls_poitem.
ls_poitem-ebeln = '4001122335'.
ls_poitem-ebelp = '0001'.
ls_poitem-loekz = 'X'.
lt_edidd-sdata = ls_poitem.
APPEND lt_edidd.
CLEAR lt_edidd.
lt_edidd-segnam = 'ZEROITEM'.
lt_edidd-dtint2 = 0.
CLEAR ls_poitem.
ls_poitem-ebeln = '4001122335'.
ls_poitem-ebelp = '0002'.
ls_poitem-loekz = ''.
lt_edidd-sdata = ls_poitem.
APPEND lt_edidd.

CALL FUNCTION 'MASTER_IDOC_DISTRIBUTE'
EXPORTING
master_idoc_control            = ls_edidc "Export
TABLES
communication_idoc_control     = lt_edidc "Import
master_idoc_data               = lt_edidd "Export
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.
WRITE: 'Idoc sent:'.
LOOP AT lt_edidc INTO ls_edidc.
NEW-LINE.
WRITE: 'Idoc number is', ls_edidc-docnum,
'; receiver partner is', ls_edidc-rcvprn,
'; sender partner',ls_edidc-sndprn.
ENDLOOP.
ENDIF.

CALL FUNCTION 'DB_COMMIT'
.

CALL FUNCTION 'DEQUEUE_ALL'
* EXPORTING
*   _SYNCHRON       = ' '
.

COMMIT WORK.


Inbound in the destination system                                                                                                                                   

1. 创建和sourcing system相同的segment type, idoc type, message type.

2. Create tables, 用来存储从sourcing system传过来的idoc数据.



 



 

3. Create inbound FM

FUNCTION z_idoc_po_process.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     REFERENCE(INPUT_METHOD) LIKE  BDWFAP_PAR-INPUTMETHD
*"     REFERENCE(MASS_PROCESSING) LIKE  BDWFAP_PAR-MASS_PROC
*"  EXPORTING
*"     REFERENCE(WORKFLOW_RESULT) LIKE  BDWFAP_PAR-RESULT
*"     REFERENCE(APPLICATION_VARIABLE) LIKE  BDWF_PARAM-APPL_VAR
*"     REFERENCE(IN_UPDATE_TASK) LIKE  BDWFAP_PAR-UPDATETASK
*"     REFERENCE(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
*"  EXCEPTIONS
*"      WRONG_FUNCTION_CALLED
*"----------------------------------------------------------------------
DATA: lv_subrc TYPE sy-subrc,
lw_chead  TYPE zerohead,
lw_citem  TYPE zeroitem,
lw_pohead TYPE zeropohead,
lt_poitem TYPE TABLE OF zeropoitem WITH HEADER LINE.

CLEAR idoc_contrl.
READ TABLE idoc_contrl INDEX 1.
IF idoc_contrl-mestyp <> 'Z_ZERO_MSG'.
RAISE wrong_function_called.
ENDIF.
CLEAR: lw_pohead, lt_poitem[].
LOOP AT idoc_data.
CASE idoc_data-segnam.
WHEN 'ZEROHEAD'.
CLEAR: lw_chead, lw_pohead.
lw_chead = idoc_data-sdata.
MOVE-CORRESPONDING lw_chead TO lw_pohead.
WHEN 'ZEROITEM'.
CLEAR: lw_citem, lt_poitem.
lw_citem = idoc_data-sdata.
MOVE-CORRESPONDING lw_citem TO lt_poitem.
APPEND lt_poitem.
WHEN OTHERS.
ENDCASE.
ENDLOOP.
lv_subrc = 0.
INSERT zeropohead FROM lw_pohead.
IF sy-subrc = 0.
INSERT zeropoitem FROM TABLE lt_poitem.
lv_subrc = sy-subrc.
ELSE. "订单号已经存在
lv_subrc = sy-subrc.
ENDIF.
IF lv_subrc = 0.
COMMIT WORK.
CLEAR idoc_status.
idoc_status-docnum = idoc_contrl-docnum.
idoc_status-status = '53'. "IDOC处理成功
APPEND idoc_status.
ELSE.
ROLLBACK WORK.
CLEAR idoc_status.
idoc_status-docnum = idoc_contrl-docnum.
idoc_status-status = '51'. "IDOC不成功
idoc_status-msgty = 'E'. "错误信息
idoc_status-msgid = 'YMSG'.
idoc_status-msgno = '001'.
APPEND idoc_status.
ENDIF.

ENDFUNCTION.

 

4. BD51

 这个步骤完成了后, 步骤5的下拉框才可以选择FM: Z_IDOC_PO_PROCESS



 

5. WE42, Create Process Code



 



 

6. WE57



7. SALE, Define Logical System



 

8. WE20, Define Partner Profile, and Set Inbound Message



 



 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  IDOC ALE EDI