天天看點

IDoc是個什麼玩意兒

作者:​​SD子產品那些事兒​​

還是說IDoc吧。部落客從剛入行沒多久,就聽說過這個東西,因為聽說了很久,一直沒機會見到,是以感覺那是超級神秘。直到部落客在項目上見到了IDoc,然後從相識、到相知、然後……額,扯遠了。

IDoc是Intermediate Document的縮寫,這個去谷姐度娘一下就知道了,但是即便知道了它名字的意思,仍然沒法了解它是幹什麼的。是以幹脆也不要去研究它的名字,就認為它的名字就是這4個字母就好了。

想必大家都接觸過一個用來比喻ERP的例子,就是買菜做飯那個(什麼,你沒聽說過?度娘一下)。部落客也不能免俗,也舉個吃的例子,比如一家面包房。

如何得到一塊蛋糕呢?

首先采購員要采購原材料,水、面粉、奶油、雞蛋、鹽、糖……

配料師要準備本次需要用到的原材料,水、面粉、奶油、雞蛋……

然後做面點師用這些材料做了一個蛋糕出來。

嗯,IDoc就是這樣。謝謝大家。

好吧其實部落客還沒說完。

采購員一次采購可能采購很多東西,因為面包房的産品有很多種,面包、蛋糕、餅幹甚至還有咖啡,采購員一次或者幾次要把他們都采購回來。

配料師首先要确定做什麼,然後根據要做的東西從原材料裡面選擇本次需要的東西以及數量。

面點師拿到這些原材料,首先也得知道要做什麼,然後他開始使用這些材料做他要做的東西。

嗯,這才是IDoc。

内個……咱們繼續說哈。

IDoc的流程跟面包房做面包的流程十分相似。它分為出站Outbound和入站Inbound兩種。如果在SAP裡面完整的做一個出站+入站的話是這麼處理的:

首先通過單據中的Output Type,配合Partner Profile裡面配置的Partner裡面Outbound Parameter裡面的Outbound Process Code,使用對應的Message Type往對應的Port裡面發送一個IDoc Basic Type結構類型的資料。

然後入站将根據這個Message Type,找到Partner Profile裡面配置的Partner裡面Inbound Parameter裡面的Inbound Process Code,處理這個收到的IDoc Basic Type結構裡面的資料。

繞暈了沒?沒事,反正也沒打算讓人看懂上面那段

IDoc是個什麼玩意兒

。主要是為了引出這麼幾個概念。

Outbound/Inbound:出站和入站。出站是為了處理資料并發出消息,入站是為了接收消息并處理。對于面包房,我們把從采購到配料認為是出站,面點師加工面包、蛋糕出來認為是入站。

Partner: 就是跟你對口的合作夥伴,在SAP裡面,主要用到KU-客戶,LI-供應商,LS-邏輯系統。對于面包房,配料師就是一個出站用的Partner、面點師是入站用的一個Partner。當然一個Partner可以既做出站也做入站。就好比配料師跟面點師是同一個人。

Partner Profile:就是Partner的一些參數,分為Outbound Parameter和Inbound Parameter。它們是為了讓系統知道怎麼去處理Outbound/Inbound的事件。對于面包房來說,就是采購員、配料師、面點師的操作流程和操作方法(當然對于實際的他們而言,這些隻要在腦子裡面展現就好了,但是系統需要一個邏輯,這個邏輯就是Partner Profile)

Port:端口,指定這個IDoc的接收方,可以是任何其他系統,也可以發到目前的SAP目前的Client。對于面包房來說,每個面點師就是一個端口。當然他們也作為入站的Partner存在。

Output Type: 這個其實如果做過标準的憑證列印都應該知道,這個是從憑證擷取一些資訊并通過某種途徑發出。對于IDoc,可以使用EDI方式發出,也可以使用其它方式,比如Special Function方式發出。系統标準的IDoc都是通過EDI方式發出的。Output Type僅用于Outbound Process,目的是提供IDoc所需的資料。在面包房裡面,它相當于一次采購拿回來的東西,如:5斤面粉、2桶花生油等。

IDoc Basic Type: 是承載資料的一個類型,可以認為是一個資料結構。Basic Type由Segment構成,有點類似于XML的格式。每個Segment指定了一些字段,在這些字段裡面可以輸入一些限定的資料。對于面包房來說,這個就是需要的材料清單:比如面粉+黃油+奶油+糖,是一種組合,面粉+奶酪+鹽是另外一種組合等。每種組合都可以了解成是一個IDoc Basic Type。而每種組合的一個具體的值,就是一個IDoc了。也就是說5斤面粉+20克黃油+50克奶油+50克糖,這就是一個IDoc了。但是這種組合是用來做什麼,并不能通過IDoc Basic Type來确定。這需要Message Type.

Message Type:就是告訴Inbound一方,我這個IDoc是用來做什麼的。隻告訴對方幹什麼,卻不給資料,或者隻給了資料,卻不告訴對方做什麼,對方都沒法進行處理。在面包房,Message Type就是告訴面點師,給你這些原料(IDoc)你是應該做蛋撻,還是老婆餅,還是法式面包等等。

Outbound Process Code:出站的處理代碼。其實就是具體的一個操作流程。在得到了Output Type,确定了IDoc Basic Type以後,需要從Output Type提供的所有資料裡面,按IDoc Basic Type組合出IDoc來,即給IDoc Basic Type指派。在面包房,這就是配料師根據要做的面包,從所有原材料裡面選出本次使用的原材料的過程。

Inbound Process Code:進站的處理代碼。這個就是接收到一個IDoc以後,根據Message Type來确定要怎麼處理這個IDoc。對于面包房,這就是面點師拿到配料師提供的原材料以後,根據要做的東西來進行面點制作的過程。

這樣說下來好像就明白一些了?我們把做面包的過程放進SAP看看。

1.首先采購員采購到了一些原材料,并提供給了配料師 - 相當于Output Type要做的事情,提供原始資料

3.配料師配好料後(産生了IDoc),找到能做這個産品的面點師(這時仍屬于Outbound Process,面點師在這對應Port),把配好的料發給他,并告訴他這個料是用來做什麼(Message Type)。

4.面點師(這時就是相當于Inbound Partner了)收到這些料(IDoc)以及産品需求(Message Type),他就開始和面、發酵、烘烤……最後把這個産品做出來了。這個處理過程,就是Inbound Process Code。

應該大概有點頭緒了吧?看下WE20的截圖進一步了解下:

​​

IDoc是個什麼玩意兒

​​

​​

IDoc是個什麼玩意兒

​​

​​

IDoc是個什麼玩意兒

​​

​​

IDoc是個什麼玩意兒

​​

​​

IDoc是個什麼玩意兒

​​

差不多就是這樣了。部落客再有時間的話,寫一個IDoc的樣例看一下,相信大家就有些概念了。

最後說幾句。

IDoc可以有很多應用,Inbound/Outbound都是可以單獨使用的,不要認為他們隻能搭對出現。比如有外圍系統審批,可以通過訂單儲存後觸發Outbound IDoc,将訂單資訊發到審批系統。審批結束後,審批系統可以觸發SAP的Inbound IDoc來解鎖訂單。

IDoc的一個特點是異步處理。也就是說,如果你想在訂單儲存以後,再根據訂單裡面的資料計算一下什麼東西回頭修改這張訂單,是可以通過IDoc來實作的。如果你用使用者出口來處理,會發生訂單鎖定沒法修改的情況。如果是不需要實時同步校驗或者實時傳回結果的需求,都可以通過IDoc來處理。一旦是需要實時回報的,那就需要用RFC等方式來做了。