IDOC实例, Outbound IDOC
生活随笔
收集整理的這篇文章主要介紹了
IDOC实例, Outbound IDOC
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
最近群里的兄弟對IDOC的學習熱情高漲,所以我在這里做個最簡單的IDOC例子,供大家分享。
簡而言之,IDOC是類似XML的一種SAP系統(tǒng)與其他系統(tǒng)的一種集成工具。
假設I04和I02是同一個集團下兩個不同子公司的SAP系統(tǒng),I04需要將其采購訂單信息及時發(fā)送給I02。下面簡單介紹IDOC的設置步驟,為了避免混淆,我的命名都比較特別。
1,設置IDOC Type.
(1) WE31,創(chuàng)建segment,類似于創(chuàng)建XML的結點及結點屬性。
這里先輸入YPOHEAD,點擊創(chuàng)建,在接下來的屏幕中,錄入EBELN, BUKRS, BEDAT等字段及他們對應的data element;接著創(chuàng)建YPOITEM,輸入EBELN, EBELP, MATNR, MENGE, MEINS等字段及他們對應的data element。
保存后用SE12查看你將發(fā)現(xiàn),系統(tǒng)自動添加了YPOHEAD和YPOITEM兩個結構,每個字段都成了CHAR類型,長度就是WE31中的EXPORT LENG。
(2) WE30, 創(chuàng)建IDOC Type,定義結點間的相互邏輯關系.
先輸入YPOIDOC,然后點擊創(chuàng)建,緊跟著點擊create new進入。在主界面中,先點擊創(chuàng)建按鈕,將YPOHEAD添加,設置Mandatory seg打勾,min = 1, max = 1,代表我們每個IDOC僅包含一張采購訂單。然后在YPOHEAD下添加YPOITEM,同樣的Mandatory seg打勾,min = 1, max = 99999.
2,創(chuàng)建Message Type.
(1) WE81,創(chuàng)建Message Type.
先切換到編輯狀態(tài),然后點擊New Entries,輸入YPO即可。
(2) WE82,,關聯(lián)Message Type和IDOC Type.
3,創(chuàng)建到I02的端口.
首先確保系統(tǒng)內已經有到I02的R/3 Connection(SM59),如果沒有則先創(chuàng)建一個名為I02001。
接著WE21創(chuàng)建Port,類型TRANSACTIONAL RFC,名為I02PORT,RFC destination則填寫I02001。
4,SALE,創(chuàng)建Logical System.
SALE, Sending and Receiving Systems,Logical Systems, define logical systems,新增一個logical system,名為I02LS,這將作為下一步的Partner。
Define logical systems下方,有Assign Client to logical system,這里可針對本系統(tǒng)(I04)定義logical system,作為發(fā)送IDOC時的發(fā)送方標識,我對Client 001的定義是I04LS.
5,WE20,定義我們的Partner profile.
在PARTNER TYPE為logical system下,創(chuàng)建一個patner no為I02LS的partner,type填寫LS。
下面的Permitted agent,填寫US(User),Agent為你自己的用戶名或某basis人員用戶名。
然后,點擊outbound下方的加號,創(chuàng)建一個outbound parameter。Message Type為YPO,receiver port為I02PORT,output mode選擇transfer idoc immed.,Basic Type填寫YPOIDOC,保存即可。
6,編程發(fā)送IDOC
設置了這么多,真累啊,總算可以寫程序了,是不是很開心呢?
程序的思路就是,把每個IDOC結點按字符串形式逐個添加,而字符串的添加次序自然也體現(xiàn)了IDOC結點間的邏輯關系。代碼如下,
DATA: ls_pohead TYPE ypohead,
????? ls_poitem TYPE ypoitem,
????? ls_edidc TYPE edidc,
????? lt_edidc TYPE TABLE OF edidc,
????? lt_edidd TYPE TABLE OF edidd WITH HEADER LINE. CLEAR ls_edidc. *系統(tǒng)根據下面4行即可與WE20設置關聯(lián)起來
ls_edidc-mestyp = 'YPO'. "Message Type
ls_edidc-idoctp = 'YPOIDOC'. "IDOC Type ls_edidc-rcvprn = 'I02LS'. "Partner Number of Recipient
ls_edidc-rcvprt = 'LS'. "Partner Type of Receiver *添加IDOC結點 CLEAR lt_edidd.
lt_edidd-segnam = 'YPOHEAD'."結點名稱
lt_edidd-dtint2 = 0.
CLEAR ls_pohead.
ls_pohead-ebeln = '4001122334'.
ls_pohead-bukrs = '0400'.
ls_pohead-bedat = '20090630'.
lt_edidd-sdata = ls_pohead. "結點內容
APPEND lt_edidd. CLEAR lt_edidd.
lt_edidd-segnam = 'YPOITEM'.
lt_edidd-dtint2 = 0.
CLEAR ls_poitem.
ls_poitem-ebeln = '4001122334'.
ls_poitem-ebelp = '0001'.
ls_poitem-matnr = '000000000000004527'.
ls_poitem-menge = '3'.
ls_poitem-meins = 'ST'.
lt_edidd-sdata = ls_poitem.
APPEND lt_edidd. CLEAR lt_edidd.
lt_edidd-segnam = 'YPOITEM'.
lt_edidd-dtint2 = 0.
CLEAR ls_poitem.
ls_poitem-ebeln = '4001122334'.
ls_poitem-ebelp = '0002'.
ls_poitem-matnr = '000000000000009289'.
ls_poitem-menge = '5'.
ls_poitem-meins = 'M'.
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. 7,查看IDOC. WE05可以查看我們剛剛發(fā)送的IDOC, BD87還可對IDOC進行一些處理。
????? ls_poitem TYPE ypoitem,
????? ls_edidc TYPE edidc,
????? lt_edidc TYPE TABLE OF edidc,
????? lt_edidd TYPE TABLE OF edidd WITH HEADER LINE. CLEAR ls_edidc. *系統(tǒng)根據下面4行即可與WE20設置關聯(lián)起來
ls_edidc-mestyp = 'YPO'. "Message Type
ls_edidc-idoctp = 'YPOIDOC'. "IDOC Type ls_edidc-rcvprn = 'I02LS'. "Partner Number of Recipient
ls_edidc-rcvprt = 'LS'. "Partner Type of Receiver *添加IDOC結點 CLEAR lt_edidd.
lt_edidd-segnam = 'YPOHEAD'."結點名稱
lt_edidd-dtint2 = 0.
CLEAR ls_pohead.
ls_pohead-ebeln = '4001122334'.
ls_pohead-bukrs = '0400'.
ls_pohead-bedat = '20090630'.
lt_edidd-sdata = ls_pohead. "結點內容
APPEND lt_edidd. CLEAR lt_edidd.
lt_edidd-segnam = 'YPOITEM'.
lt_edidd-dtint2 = 0.
CLEAR ls_poitem.
ls_poitem-ebeln = '4001122334'.
ls_poitem-ebelp = '0001'.
ls_poitem-matnr = '000000000000004527'.
ls_poitem-menge = '3'.
ls_poitem-meins = 'ST'.
lt_edidd-sdata = ls_poitem.
APPEND lt_edidd. CLEAR lt_edidd.
lt_edidd-segnam = 'YPOITEM'.
lt_edidd-dtint2 = 0.
CLEAR ls_poitem.
ls_poitem-ebeln = '4001122334'.
ls_poitem-ebelp = '0002'.
ls_poitem-matnr = '000000000000009289'.
ls_poitem-menge = '5'.
ls_poitem-meins = 'M'.
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. 7,查看IDOC. WE05可以查看我們剛剛發(fā)送的IDOC, BD87還可對IDOC進行一些處理。
總結
以上是生活随笔為你收集整理的IDOC实例, Outbound IDOC的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sap转换成基本订单单位
- 下一篇: PP几个表关系