庫存物料(Inventory Item)導入
物料導入/導出主要的目的是在不同系統之間的數據的導入/導出,以某一種數據信息格式和某一種傳輸方式獲取數據。在不同系統間的數據導入/導出必須解決的最重要的問題是數據校驗,以滿足數據在不同系統間的可用性。根據這兩周的學習,總結一下Item導入遇到的一些問題和解決的方法。
數據導入在處理流程上大致分為三個部分:
(1)是處理數據文件,插入客戶化接口表;
(2)是處理客戶化接口表數據,插入標准接口表;
(3)是提交標准請求,導入標准表。
在導入的類型上來說,有三種情況:
(1)創建物料
(2)更新物料
(3)組織分配
API中主要涉及的都是客戶化和標准系統的銜接問題,所以熟悉標准系統表,接口表,客戶化表是一個非常重要的過程,在API中還會調用系統的標准導入請求,標准導入的數據必須是符合系統的數據,所以API中一個重要步驟就是驗證數據,處理數據。用一個Master Item 的導入作例子。
1. API被調用及輸出關系
庫存Master Item 導入API的起點是客戶化接口表,終點是標准表,而客戶化接口表的數據來源可以是多種,取決於接口程序(平台)的整體架構,無論是文件還是信息流的形式,經過適當處理之后,導入客戶化接口表,並且有必有提供數據批次的唯一標識和數據行級別的唯一標識。導入程序所定義的並發程序應該在數據處理之后被調用,必要參數是數據的批次標識,並發程序應該返回數據導入處理的狀態和必要的錯誤/警告信息(如果有)。
2. API偽代碼
Begin
獲取參數;
根據數據批次號,從客戶化接口表獲取數據;
FOR EACH Record
驗證數據;
判斷數據創建/更新/分配標識位;
導入系統接口表;
END FOR;
提交系統導入系統標准請求;
打印錯誤報告;
End
3. Master Item 導入涉及到的主要的表/視圖及描述
Table Name |
Select |
Insert |
Update |
Delete |
Description |
|
|
|
|
|
|
org_organization_definitions |
X |
|
|
|
系統組織定義 |
mtl_system_items_b |
X |
X |
X |
|
系統標准物料基表 |
mtl_system_items_b_kfv |
|
|
|
|
系統標准物料關鍵性彈性域視圖 |
mtl_item_revisions_b |
X |
X |
X |
|
系統標准物料修訂基表 |
mtl_item_categories_v |
X |
|
|
|
系統標准物料類別視圖 |
mtl_item_categories |
X |
X |
X |
|
系統標准物料類別表 |
mtl_system_items_interface |
X |
X |
|
X |
系統標准物料接口表 |
mtl_item_revisions_interface |
X |
X |
|
X |
系統標准物料修訂表 |
mtl_item_categories_interface |
X |
X |
|
X |
系統標准物料類別表 |
xxinv_item_int |
X |
|
X |
|
客戶化接口表 |
mtl_interface_errors |
X |
X |
|
|
系統標准接口錯誤表 |
mtl_units_of_measure_vl |
X |
|
|
|
系統標准物料度量單位多語言視圖 |
mtl_parameters |
X |
|
|
|
系統標准組織參數表 |
mtl_default_category_sets_fk_v |
X |
|
|
|
系統標准類別集視圖 |
mtl_category_sets |
X |
|
|
|
系統標准類別集表 |
mtl_categories_b_kfv |
X |
|
|
|
系統標准類別集視圖 |
mtl_categories_kfv |
X |
|
|
|
系統標准類別集關鍵性彈性域視圖 |
4. 特殊邏輯
(1) 驗證客戶化接口表數據
Item導入API是根據數據的批次號,從客戶化接口表獲取相應數據,驗證過程主要依據大致和標准物料的標准是一致的,雖說在提交標准請求時,系統也會驗證數據,但是標准請求只有輸入輸出,過程不可見,所以在客戶化接口表這個階段驗證可以保證數據錯誤的可控制性;另一方面,系統請求一般請款比較慢,特別是計划的周期請求,多個批次也容易混淆,所以在客戶化表中驗證,如果不符合要求,直接返回,省去標准請求所耗費的資源。
主要驗證有:非空驗證,組織驗證,單位驗證,修訂號驗證,類別驗證等,涉及到的表或視圖之前列過了。
(2) 是否是新物料(創建物料/更新物料/組織分配)
這里的判斷決定了導入程序需要往標准接口表里插入幾次,主要原因是,如果是一個新物料,系統中不存在,則需要往這個物料所對應的組織的主組織中也插入一條數據,即標准接口表里有兩條組織不一樣的相同物料信息。
- 創建物料:系統標准物料表中不存在,且標准接口表中不存在(這里需要判斷標准接口表這個中間表的原因是,如果同一批數據是同一個物料不同的組織,而且是新物料,如果不判斷系統接口表,就會有多個主組織數據存在於系統接口表中,提交標准請求時,就會出現重復記錄的錯誤)
- 更新物料:同一個物料,同一個組織存在
- 組織分配:統一個物料,主組織物料存在,子組織物料不存在
(3) 標准請求
物料導入請求:Item Import(包括item和revision信息)
類別分配請求:Item Category Assignment Open Interface(category信息)
(4) Revision處理
客戶化接口表的記錄有revision信息存在,則要處理revision。新/舊/分配 的判斷和(2)中基本一致。在做這一部分的時候,發現了一個問題,Revision在標准系統中是字符串類型的,所以在比較舊的修訂號和新的修訂號的時候,特別要注意數字的位數問題,例如 :‘9’ 這個字符串是比 ’10’ 這個字符串“大”,但 ’09’ 這個字符串比 ’10’ 這個字符串“小”。驗證通過之后直接往標准接口表里導入,修訂號取最“大”的一個。
Revision的標准請求合並在物料信息導入的標准請求(Item Import)。
(5) Category處理
Category處理存的標准請求時單獨的,叫Item Category Assignment Open Interface,這里的特殊邏輯總結為如下幾種:
- 新物料,無category信息:分配當前category set 下得默認category
- 新物料,有category信息:分配這個category 給主組織物料和當前子組織物料
- 更新,無category信息:不處理
- 更新,有category信息:更新當前組織category信息
- 組織分配,有category信息,分配這個category信息給這個子組織
- 組織分配,無category信息,不處理
在處理Category標准請求的時候,與物料信息不同的是,這個標准請求沒有“1”或者“2”的標識參數標識創建或者更新操作模式,提交標准請求的順序是先提交物料信息請求(item import),再提交類別請求(category assignment),多次測試這個標准請求和物料信息的標准請求后發現,在物料信息的標准請求完成之后,已經有這category信息在標准類別表視圖(mtl_item_categories_v)中了,category信息是默認的category,所以此時提交category assignment的標准請求,只能去update(以上a—f的6中情況都是這樣處理),而update操作必須有”old_category”這個信息,所以在update之前需要獲得這個物料老的category;如果是新物料,則更新default category。(default category就是當前category set 下的default category)
(6) 組織分配屬性沖突
導入程序常見的錯誤是,在物料組織分配的時候,有可能出現“master child conflict”。在標准Item的屬性控制中,有“master level”和“org level”兩種,如果某一屬性設置成了“master level”,則在導入時,要么不導入這個屬性信息,要么導入的必須和主組織的屬性信息一致,否則就會報這個錯誤(系統標准功能)。導入程序API中有必要判斷,在組織分配的情況下,從客戶化接口表到標准接口表導入的時候,並且把一些客戶化接口表里面沒有,但是屬性控制中為“master level”的屬性值,賦為主組織的屬性。