ALE/IDOC介面技術
目錄
第一章ALE IDOC簡介 (2)
第一節簡介 (2)
第二節操作 (3)
change point01 (3)
change point02 (4)
Inbound Function (5)
Filter & Conversion (7)
IDoc Extension: (8)
Serialization (9)
Others (10)
第一章ALE IDOC簡介
第一節簡介
我在新環境中,學到的最多的東西就是介面技術,也是我覺得很有用的一些知識。
由於公司業務複雜,協力廠商系統很多,有很多業務系統在上面跑。SAP引入之後,就需要和協力廠商系統做介面,比如訂單、物流什麼的。不過有一個很好的趨勢,很多老系統在被淘汰,原來的一些核心業務正在向SAP移植,可見SAP還是不錯的,這口飯還有得吃我這邊的介面類別型有不少,比如ALE/IDoc,PI,FTP等。但是PI主要還是在某幾個模組上進行使用(感覺有點試驗的性質),FTP也是在特定的業務中使用,而ALE/IDoc已經廣泛使用了。ALE/IDoc廣泛使用的原因有很多,一方面是基於EDI標準,同時這個技術經過時間的考驗已經相當成熟。我接下來會主要講講ALE/IDoc,其間可能會提到一些EDI和PI。
IDoc(Intermediate Document),顧名思義,就是用作中間媒介的一種檔。是一種通用的標準格式,這樣可以方便協力廠商軟體對IDoc進行處理。
ALE(Application Link Enabling),主要用於同一個企業不同SAP系統之間的資料交換。一個企業比較
大的話,會設有多個SAP系統,光R/3可能就要好幾台伺服器,再加上BI,PI啊,多的去了,這個就是ALE的用武之地。國外這樣的情況很多,你可以上上國外的一些SAP論壇,ALE/IDoc的問題天天有人問。
EDI(Electronic Data Interchange),名字上來看就是電子資料交換,用於不同企業間的電子資料的交換。比如,你要用DHL進行發貨,那麼就可以直接通過EDI來通知DHL,並且進行回饋。這裡的IDoc是符合EDI標準的,需要用EDI子系統進行轉換。
這裡我要說一下分散式,聽起來很玄乎的一個詞。簡單點來說就是,由於伺服器性能和地域的限制,一個公司不可能把所有的業務都在一台機器上做,那麼就要分開來。分開來之後,就有了幾台,幾十台,甚至幾百台的伺服器中。不同機器存儲著相關的主資料,也就是說牽一發,而動全身,改動一台中的資料,就要使其他伺服器上的資料也要做相應改動。如果人工來幹這件事情的話,可想而知這個工作量和風險了,這是我們就引入了ALE/IDoc。有了這個技術,可以做到分散式主資料自動修改,只要有一台機器改動了,就會自動向其他相關伺服器發出消息,說‘Hi, Let’s update together!’,結合SAP的Job技術,所有的一切都是自動的。這個對於跨區域的大型公司來說是很有用的!
PALE/IDoc的實踐性很強的技術,也就是說你做得越多,碰到的問題越多,提高也就越多,光是理論是沒什麽用得。
所以先把一般配置一套ALE/IDoc的流程總結一下,以後再把經驗性、總結性的東西慢慢添加進去。
有兩個比較有用的Menu T-code:WEDI, SALE。分別用來配置IDoc/EDI, 和ALE的。
自定義IDoc流程:
Create Segment: WE316
Create IDoc Type: WE30
Create IDoc Message Type: WE81
Assign Message Type to IDoc Type: WE82
ALE配置:
T-code SALE Define Logical System
Assign Logical System to Client
T-code : SM59 Create RFC connections
T-code : WE21 Port definition
T-code : BD64 Create Distribution Model
T-code : WE20 Partner profile.
IDoc的測試
T-code : WE19
IDoc的顯示
T-code: WE02
Outbound Processing:
T-code : WE41 Outbound process code
Inbound Processing:
T-code: BD51 ALE Attributes
T-code: WE57 Message/application object
T-code: WE42 Inbound process code
第二節操作
change point01
SAP中實現分散式的一個機制就是ALE/IDoc,而在具體一點就是change point。
Change point是用來分發主數據的。主要有兩種實現方式,一種是直接方式,另外一種是通過SMD tool(shared data master tool)來實現。
我們先來講一下直接方式。所謂的直接方式,就是運行一個爲一個主數據專門的Repoort程式,填入相關參數,就可以對此主數據進行分發。
一般這樣的報表的名字是這樣的:RBDSE***,***是message type的前三位,比如物料主數據MATMAS,它的程式就是RBDSEMAT。
這些程式的邏輯都是固定的,其中總有一個名字形如:MASTERIDOC_CREATE_REQ_*****
的Function,*****是message type,接上個例子,就是MATMAS。這個程式就是執行change point和生成IDoc的主要Function。
CALL FUNCTION 'MASTERIDOC_CREATE_REQ_MATMAS'
這個Function中有幾點大家要注意的:
1.DATA: C_MSGFN_R LIKE BDIMARAKEY-MSGFN VALUE '005'. 生成的IDoc中MSGFN欄位都是’005’
2.CALL FUNCTION 'MASTERIDOC_CREATE_MATMAS
上面的Function中 CALL FUNCTION 'MASTER_IDOC_DISTRIBUTE'就是把IDoc傳到ALE,進行分發。
3.最後才是提交和解鎖;
COMMIT WORK.
CALL FUNCTION 'DEQUEUE_ALL'.
change point02
Change point的第二種方法就是SMD,通過一系列的配置和Job,你就可以做到,讓不同的Message type自動分發。這裏所謂的自動分發,就是當一個系統中的主數據發生修改,創建,刪除時,其他相關聯的系統也會自動更新。我這邊主要用的就是這個技術。
下面來具體講一下:
有幾張表大家需要熟悉:
BDCP : change point
BDCPS: Change pointer: Status
BDCP2: Aggregated Change Pointers (BDCP, BDCPS)
T-code:BD52 change document item for message type
Table : TBD62.
T-code:BD61 Activate change pointers-generally0 M. m7 A3 G, J [0 d
T-code:BD50 Activate change pointers for message type
Table : TBDA2'
T-code:BD60 Additional Data for Message Type (這裏要配Function,所以之前需要定義好相關的Function)
Table :TBDME
關於BD60中的Function,標準的是MASTERIDOC_CREATE_SMD_*****,*****是Message type;
同樣這個Function是用以執行change point和生成IDoc的
其中要注意的幾點:
CALL FUNCTION 'CHANGE_POINTERS_READ'
2.MSGFN的幾種狀態:009(新建主數據),004(修改過的數據),003(刪除的數據),018(沒
有改動,但是附屬於它的gment需要分發)
3. CALL FUNCTION 'MASTERIDOC_CREATE_MATMAS
上面的Function中 CALL FUNCTION 'MASTER_IDOC_DISTRIBUTE'
就是把IDoc傳到ALE,進行分發。
4. write staus of all procesd pointers
CALL FUNCTION 'CHANGE_POINTERS_STATUS_WRITE'
T-code :BD64 change distribution model,把message type
T-code :BD21 它對應的是程式 RBDMIDOC,它會根據BD60中的配置,找到相應的
Function進行分發。在實際應用中,會設置batch job,使這一切都成爲自動化。Inbound Function
ALE/IDoc 在Outbound的時候,需要有程式來生成IDoc,在Inbound的時候需要有程式來解析IDoc,從而在R/3中生成主數據。4 R) Q0 c3 @9 \
由於Outbound有:Message Control, Change Point, Stand-Alone三種方式,所以就衍生出三種不同Outbound程式。但是概念上,總體是一緻的,隻是實現是一些參數和功能不一樣。相比而言,Inbound就比較單一,就隻有一種方式,而且格式固定。
下面就放一個Inbound Function的例子,參數的話和標準的都一樣的。