自定義IDOC配置


目錄

 

1需求場景    4

2配置發送端IDOC    4

2.1定義段(WE31    4

2.2定義基本類型(WE30    4

2.3定義消息類型(WE81    5

2.4定義傳輸結構    5

2.5創建RFC目標(SM59    6

2.6創建接收端端口(WE21    6

2.7配置發送端邏輯系統(SALE    7

2.8分配邏輯系統    7

2.9維護分布模型和視圖    8

2.10發送端程序    12

3配置接收端IDOC    14

3.1創建接收端RFC目標(SM59    14

3.2創建接收端的端口(WE21    14

3.3定義邏輯系統並分配集團(SALE    14

3.4創建接收端程序    14

3.5注冊入站處理函數(BD51    16

3.6將入站函數與基本類型/消息類型關聯(WE57    16

3.7創建進站處理代碼(WE42    16

3.8創建發送端合作伙伴配置文件(WE20    16

4測試IDOC    17

 1需求場景

可以通過配置IDOC,在相同系統不同客戶端之間傳輸數據,也可以在不同SAP系統中傳輸數據。

2配置發送端IDOC

2.1定義段(WE31)

1.定義段類型,包含需要傳輸的字段

2.創建成功后設置批准

2.2定義基本類型(WE30)

1.創建開發對象

2.將段維護到基本類型

2.3定義消息類型(WE81)

1. 定義消息類型

2.WE82把基本類型分配給消息類型

2.4定義傳輸結構

1.定義一個表類型

2.定義行類型

2.5創建RFC目標(SM59)

1. 創建RFC目標連接

 

 

2輸入目標系統賬戶名密碼

2.6創建接收端端口(WE21)

2.7配置發送端邏輯系統(SALE)

1. 定義邏輯系統

2.8分配邏輯系統

1. 將邏輯系統分配到集團

在發送端不需要分配300邏輯系統到集團,但是300邏輯系統需要在接收端配置時分配

輸入城市、邏輯系統、貨幣保存

2.9維護分布模型和視圖

創建模型視圖

雙擊檢查該維護系統是否正確

添加消息類型

點擊生成合作伙伴參數文件

生成成功

點擊更改參數文件

2.10發送端程序

1. 創建一個接口,用於程序調用,發送IDOC數據到目標系統

2.源代碼

FUNCTION zmakt_idoc_send.

*"----------------------------------------------------------------------
*"*"本地接口:
*"  TABLES
*"      ZTMAKT TYPE  ZTMAKT OPTIONAL
*"  EXCEPTIONS
*"      NO_IDOC
*"      NO_MODEL
*"----------------------------------------------------------------------
*常規變量
  DATA:
*IDoc的控制記錄
        idoc_control LIKE edidc,
*IDoc的數據記錄
        t_idoc_data LIKE edidd OCCURS 0 WITH HEADER LINE,
*MASTER_IDOC_CONTROL創建的IDoc的表
        t_comm_control LIKE edidc OCCURS 0 WITH HEADER LINE,
*邏輯系統的伙伴類型
        c_partner_type_logical_system LIKE edidc-rcvprt,
*幫助變量檢查是否必須創建IDoc
        h_create_idoc.
* 特定的變量
  DATA:
*       IDoc段結構
        zsmakt TYPE zsmakt,
*       要輸入控制記錄的數據
        c_message_type LIKE edidc-mestyp VALUE 'ZMAKTMAS',
        c_base_idoc_type LIKE edidc-idoctp VALUE 'ZMAKT_TYPE',
*       段類型
        c_header_segtyp LIKE edidd-segnam VALUE 'ZMAKT'.

  CLEAR:zsmakt.
  zsmakt-matnr = '000000000123456789'.
  zsmakt-maktx = '測試物料描述'.
  APPEND zsmakt TO ztmakt.

* 檢查這個IDOC是否被創建,讀取組件
  CALL FUNCTION 'ALE_MODEL_DETERMINE_IF_TO_SEND'
  EXPORTING
    message_type           = c_message_type
*         SENDING_SYSTEM         = ' '
*         RECEIVING_SYSTEM       = ' '
*         VALIDDATE              = SY-DATUM
  IMPORTING
    idoc_must_be_sent      = h_create_idoc.
*    exceptions
*         own_system_not_defined = 1
*         others                 = 2.
  IF h_create_idoc IS INITIAL.
    RAISE no_model.
*   no message flow maintained in the model, nothing to do
    EXIT.
  ENDIF.
*  將表頭放入IDOC
  LOOP AT ztmakt.
    MOVE-CORRESPONDING ztmakt TO zsmakt.
* 將記錄添加到IDOC數據表
    t_idoc_data-segnam = c_header_segtyp.
    t_idoc_data-sdata = zsmakt.
    APPEND t_idoc_data.
  ENDLOOP.
  idoc_control-mestyp = c_message_type.
  idoc_control-idoctp = c_base_idoc_type.
  CALL FUNCTION 'MASTER_IDOC_DISTRIBUTE'
* 在更新任務中"如果應用程序文檔在更新任務中發布
  EXPORTING
    master_idoc_control            = idoc_control
  TABLES
    communication_idoc_control     = t_comm_control
    master_idoc_data               = t_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.
  COMMIT WORK.
  READ TABLE t_comm_control INDEX 1.
  IF sy-subrc <> 0.
    RAISE no_idoc.
* no IDoc was created, you can react here, if neccessary
  ENDIF.
ENDFUNCTION.

 

3配置接收端IDOC

以上配置都是在200系統(源系統)中配置,以下配置都是在300系統(目標系統)中配置

該文檔記錄的是在同一服務器的不通客戶端傳輸數據,又由於段類型、基本類型、消息類型都是跨Client的,所以2.1 、2.2 、2.3不需要在300系統再次配置了(但如果不是在同一服務器上,則需要像上面那樣進行配置)

3.1創建接收端RFC目標(SM59)

與發送端一致,可參考上邊操作,關聯上發送端的目標地址和實例號

3.2創建接收端的端口(WE21)

參照2.6

3.3定義邏輯系統並分配集團(SALE)

參照2.7 、2.8

3.4創建接收端程序

這個函數的參數接口是有規范的,可以從IDOC_INPUT_BBP_IV這些標准函數拷貝參數接口部分

源代碼部分:

FUNCTION ZIDOC_PO_PROCESS.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     VALUE(INPUT_METHOD) LIKE  BDWFAP_PAR-INPUTMETHD
*"     VALUE(MASS_PROCESSING) LIKE  BDWFAP_PAR-MASS_PROC
*"  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
*"  EXCEPTIONS
*"      WRONG_FUNCTION_CALLED
*"      OTHERS
*"----------------------------------------------------------------------
  DATA: zsmakt TYPE zsmakt.

  CLEAR idoc_contrl.
  READ TABLE idoc_contrl INDEX 1.
  IF idoc_contrl-mestyp <> 'ZMAKTMAS'.
    RAISE wrong_function_called.
  ENDIF.
  LOOP AT idoc_contrl.
    LOOP AT idoc_data WHERE docnum = idoc_contrl-docnum.
      "直接將字符賦值給結構,貶值過程中會按照結構中的字段長度來划分各字段
      zsmakt = idoc_data-sdata.
      WRITE: / 'Head',zsmakt. "此處直接把收到的數據打印出來
    ENDLOOP.
    "根據數據處理情況設置當前IDoc處理的狀態
    IF 1 = 0.
      CLEAR idoc_status.
      idoc_status-docnum = idoc_contrl-docnum."當前正處理的IDoc
      idoc_status-status = '53'. "IDOC處理成功
      APPEND idoc_status.
    ELSE.
      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.
  ENDLOOP.
ENDFUNCTION.

3.5注冊入站處理函數(BD51)

3.6將入站函數與基本類型/消息類型關聯(WE57)

3.7創建進站處理代碼(WE42)

3.8創建發送端合作伙伴配置文件(WE20)

1. 創建合作伙伴類型,添加進站消息類型

雙擊消息類型

4測試IDOC

1.運行程序,調用發送端接口,執行成功之后,運行事務代碼BD87查看結果。如果未黃燈,可以點擊處理,再次執行。

2.在接收程序里面打上斷點,處理接收的IDOC,發現進入斷點,數據也傳輸過去了

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM