在 Acumatica 中如何更新、修改與刪除資料庫資料

在 Acumatica 中,更新資料庫方式主要為兩種:

  1. 透過Graph中的Cache去做更新、修改與刪除
  2. 透過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 系統完整且龐大,有時其他關聯功能會較容易被忽略,在開發前更要多方評估,需求是不是合理,後續是否會影響到其他功能,如果不清楚,則建議採用貼近 原生的方式 去實作。

分享至:

Share on facebook
Share on twitter
Share on linkedin