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. 下面這種方式同樣可用於觸發其他方式的輸出類型,比如列印輸出。