庫存物料(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”的屬性值,賦為主組織的屬性。