IDOC实例,消息方式的IDOC
生活随笔
收集整理的這篇文章主要介紹了
IDOC实例,消息方式的IDOC
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在系統中,我們經常可以看到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. 下面這種方式同樣可用于觸發其他方式的輸出類型,比如打印輸出。
??????? 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. 下面這種方式同樣可用于觸發其他方式的輸出類型,比如打印輸出。
總結
以上是生活随笔為你收集整理的IDOC实例,消息方式的IDOC的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IDOC实例, Inbound IDOC
- 下一篇: 优秀博文推荐