2015-05-25 32 views
1

我在Acumatica中遇到問題。我在InventoryItem表上創建了一個觸發器,將插入的記錄插入到我的自定義表中。刷新庫存物品屏幕

問題是,每當我嘗試在Acumatica中保存新的庫存商品時,它都不會反映庫存商品的最後保存的正確數據。常規設置選項卡中的詳細信息不正確。我需要關閉屏幕並重新打開才能看到正確的數據。

有人可以幫我關於如何在保存後立即獲得刷新的庫存項目屏幕。或者當有定製的觸發器時,Acumatica中是否有錯誤?

回答

1

我沒有檢查你提到不刷新信息的問題,但如果你需要強制保存記錄後刷新屏幕

  • 覆蓋堅持
  • 調用基行動
  • 創建圖表
  • 搜索T的新實例他記錄設置爲當前頭緩存
  • 拋出新的重定向需要例外

,這樣的代碼可能如下[可能需要修改]

[PXOverride] 
public void Persist(Action persit) 
{ 
persit();// this will call base Persist(); 
InventoryItemMaint grp = PXGraph.CreateInstance<InventoryItemMaint>(); 
InventoryItem inv = PXSelect<InventoryItem, Where<InventoryItem.inventoryCD, Equal<Required<InventoryItem.inventoryCD>>>>.Select(grp, this.Base.Item.Current.InventoryCD.Trim()); 
if (inv != null && inv.InventoryID.HasValue) 
{ 
    grp.Item.Current = grp.Item.Search<InventoryItem.inventoryID>(inv.InventoryID); 
    throw new PXRedirectRequiredException(grp, "Reloading Item"); 
} 
} 

如果你不希望整個屏幕要刷新,而不是拋出異常,您可以刷新其他用戶(Yura Zaletskyy)建議的必需視圖方法。

+1

謝謝,這解決了我的問題。 –

0

您可以嘗試select方法。 例如:這是在項目中Acumatica源代碼設定數據視圖(可以使用探索源代碼頁)

[PXViewName(Messages.InventoryItem)] 
public PXSelect<InventoryItem, Where<InventoryItem.inventoryID, Equal<Current<InventoryItem.inventoryID>>>> ItemSettings; 

通過自定義(I假設你使用AEF),添加選擇方法,用於該數據視圖

[PXViewName(Messages.InventoryItem)] 
public PXSelect<InventoryItem, Where<InventoryItem.inventoryID, Equal<Current<InventoryItem.inventoryID>>>> ItemSettings; 

protected virtual IEnumerable itemSettings() 
{ 
    return new PXSelect<InventoryItem, Where<InventoryItem.inventoryID, Equal<Current<InventoryItem.inventoryID>>>>(Base).Select(); 
} 

有時我使用sql存儲過程將數據插入到我的表中,select方法有助於重新載入帶有插入數據的屏幕。

+0

嗨HDanh, 即時得到下面的錯誤使用代碼 「錯誤發佈時:無法隱式轉換類型‘PX.Data.PXSelect >>>’到‘System.Collections.IEnumerable’的顯式轉換存在(是)在文件中:代碼#InventoryItemMaint(36「 –

+0

我已經成功發佈了該項目,但不幸的是,它並沒有解決問題,我仍然需要重新加載頁面來查看已保存的庫存項目 –

+0

嗯,基本上Acumatica建議使用緩存,我會根據你的觸發器嘗試另一種方式,但你可以試試這個替代解決方案: – HDanh

1

比方說,您的網格綁定到查看PayRollsDetails。然後你可以用下面的代碼刷新網格:

PayRollsDetails.View.Cache.Clear(); 
PayRollsDetails.View.Cache.ClearQueryCache();