2015-05-25 31 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();