IDOC執行個體,訊息方式的IDOC

來源:互聯網
上載者:User
在系統中,我們經常可以看到EDI方式的輸出,與列印輸出類似。下面我們基於文章"IDOC執行個體,Outbound IDOC"的基礎上,簡單講解這種方式的IDOC輸出。 1,建立一個function:Y_IDOC_PO_SEND.這是我們的Outbound Funtion Module,用來建立IDOC的內容。同樣的,該函數的介面都是標準的。下面將要介紹的tcode WE41中可以查看系統已有的同類函數,可以參照設定我們的函數介面。然後寫入如下代碼:   DATA: ls_pohead TYPE ypohead,
        ls_poitem TYPE ypoitem,
        ls_ekko TYPE ekko,
        lt_ekpo TYPE TABLE OF ekpo WITH HEADER LINE. * control_record_out
  CLEAR control_record_out.
  MOVE control_record_in TO control_record_out.
* control_record_out-mestyp = 'YPO'. "Message Type
* control_record_out-idoctp = 'YPOIDOC'. "IDOC Type
  control_record_out-direct = '1'.
  control_record_out-serial = sy-datum.
  control_record_out-serial+8 = sy-uzeit. * Read from ekko/ekpo
  CLEAR ls_ekko.
  SELECT SINGLE *
    INTO ls_ekko
    FROM ekko
    WHERE ebeln = object-objky(10) "採購單號
    AND   loekz = space.
  IF sy-subrc <> 0.
    RAISE error_message_received.
  ENDIF.  REFRESH lt_ekpo.
  SELECT *
    INTO TABLE lt_ekpo
    FROM ekpo
    WHERE ebeln = ls_ekko-ebeln
    AND   loekz = space. * INT_EDIDD
  CLEAR int_edidd.
  int_edidd-docnum = control_record_out-docnum.
  int_edidd-segnam = 'YPOHEAD'."結點名稱
  int_edidd-dtint2 = 0.
  CLEAR ls_pohead.
  ls_pohead-ebeln = ls_ekko-ebeln.
  ls_pohead-bukrs = ls_ekko-bukrs.
  ls_pohead-bedat = ls_ekko-bedat.
  int_edidd-sdata = ls_pohead. "結點內容
  APPEND int_edidd.  LOOP AT lt_ekpo.
    CLEAR int_edidd.
    int_edidd-docnum = control_record_out-docnum.
    int_edidd-segnam = 'YPOITEM'.
    int_edidd-dtint2 = 0.
    CLEAR ls_poitem.
    ls_poitem-ebeln = lt_ekpo-ebeln.
    ls_poitem-ebelp = lt_ekpo-ebelp.
    ls_poitem-matnr = lt_ekpo-matnr.
    ls_poitem-menge = lt_ekpo-menge.
    ls_poitem-meins = lt_ekpo-meins.
    int_edidd-sdata = ls_poitem.
    APPEND int_edidd.
  ENDLOOP. 2,WE41, 建立Outbound Process Code進入編輯狀態後,選擇“添加新條目”按鈕,建立YPOSEND,對應於建立的Y_IDOC_PO_SEND。選中下面的Process with ALE Service,代表建立Outbound IDOC後自動發送給接收方。 3,NACE/NACO,建立我們的輸出類型建立一個EDI類型的輸出,Program填寫RSNASTED,Form Routine填寫EDI_PROCESSING。當然我們也可以在這裡找一個已有的EDI輸出類型做測試,比如Application EF下的XX01。 4,WE20設定Partner Profile.前兩篇文章中,我們並沒有要求填寫Partner function,不過這次必須填寫了。Partner function是從屬於partner type下面的,這個邏輯關係在表TPAR中體現。假設我們選中partner type=LS,Partner function=LS。其維護與之前的類似,點擊加號添加一個Outbound Parameter,步驟與之前類似,不過必須記得在Message Control中添加一行,Application=EF,Message Type=XX01,Process code為YPOSEND。這裡EF和XX01與上面NACO中的定義對應。 5,發送IDOC事實上,我們已經定義完畢了,可以維護某採購訂單的輸出類型來發送IDOC了。為了大家能更好的理解,我們來模仿這個輸出過程。建立新程式,寫入: TABLES: nast.
DATA: rcode TYPE i.CLEAR nast.
nast-kappl = 'EF'.
nast-objky = '4014000182'. "採購單號
nast-kschl = 'XX01'.
nast-parnr = 'I02LS'. "Partner number
nast-parvw = 'LS'. "Partner function
PERFORM edi_processing(rsnasted) USING rcode 'X'.IF rcode IS INITIAL.
  COMMIT WORK. "發送IDOC到接收方ENDIF. 上面的方法並不會在NAST留下輸出記錄。如果您希望能在NAST中留下一條記錄,則應該這樣:TABLES: nast.
DATA: rcode TYPE i.CLEAR nast.
nast-kappl = 'EF'.
nast-objky = '4014000182'.
nast-kschl = 'XX01'.
nast-parnr = 'I02LS'.
nast-parvw = 'LS'.
nast-spras = sy-langu.
nast-erdat = sy-datum.
nast-eruhr = sy-uzeit.
nast-nacha = '6'. "EDI
nast-anzal = 0.
nast-usnam = sy-uname.
PERFORM einzelnachricht(rsnast00) USING rcode.IF rcode IS INITIAL.
  COMMIT WORK. "發送IDOC到接收方ENDIF. 下面這種方式同樣可用於觸發其他方式的輸出類型,比如列印輸出。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.