在 Acumatica 中,更新資料庫方式主要為兩種:
- 透過Graph中的Cache去做更新、修改與刪除
- 透過Acuamatica的語法,此方式與直接下SQL commend 雷同
然而要如何決定使用哪種方式,建議可以從以下去判斷:
此資料表是否為原生?
如果是,強烈建議用第一種方式實作,因Acumatica系統較為完整且龐大,若是透過方法二,可能會在其他關聯功能中無法正常使用。
舉例來說,欲更新Stock Item中Price/Cost的標準成本,固然可以直接透過第二種方式去更新,其方式如下
Graph.ProviderUpdate<DAC>(
new PXDataFieldAssign(“ColumnName”, Value),
new PXDataFieldRestrict(“ColumnName “, Value));
透過ProviderUpdate去指定該資料表的DAC名稱,然後PXDataFieldAssign由此宣告帶入欄位名稱與值,最後PXDataFieldRestrict設定欄位條件。
上述此方式固然可以達到更新的目的,也可以在Stock Item中Price/Cost的標準成本中看到新的成本,但是卻無法讓原生功能Update Standard Costs 正常批次處理,篩選會找不到該物料,如下圖
如果透過Stock Item中去修改新標準成本,則可以正常被此批次處理篩選到。
此時,如果使用第一種方式,作法如下:
InventoryItemMaint inventoryItemMaint = PXGraph.CreateInstance<InventoryItemMaint>();
InventoryItem inventoryItem = SelectFrom<InventoryItem>.Where<InventoryItem.inventoryID.IsEqual<@P.AsInt>>.View.Select(Graph, InventoryID);
inventoryItem.PendingStdCost = (New STD Cost);
inventoryItem.PendingStdCostDate = (New STD Cost Date);
inventoryItemMaint.Item.Cache.Update(inventoryItem);
inventoryItemMaint.Actions.PressSave();
上述方式依舊可以達到與第二種的結果,唯一差別 在於可以正常使用原生功能Update Standard Costs 正常批次處理,雖然使用者無法知道背後其中差異,但方法一讓使用者後續更為方便,也在操作流程上更顯出與系統的一致性。
Acuamtica 系統完整且龐大,有時其他關聯功能會較容易被忽略,在開發前更要多方評估,需求是不是合理,後續是否會影響到其他功能,如果不清楚,則建議採用貼近 原生的方式 去實作。