【问题标题】:Refresh Stock Items Screen刷新库存项目屏幕
【发布时间】:2015-05-27 14:07:56
【问题描述】:

我在 Acumatica 中遇到问题。我在 InventoryItem 表上创建了一个触发器,以将插入的记录插入到我的自定义表中。

问题是,每当我尝试在 Acumatica 中保存新的库存项目时,它都不会反映库存项目的正确上次保存数据。常规设置选项卡中的详细信息不正确。我需要关闭屏幕并重新打开才能看到正确的数据。

有人可以帮助我了解如何在保存后立即获得刷新的库存项目屏幕。或者当有自定义触发器时,Acumatica 中是否存在错误?

【问题讨论】:

    标签: acumatica


    【解决方案1】:

    你提到的不刷新信息的问题我没查过,但是如果你保存记录后需要强制刷新屏幕

    • 覆盖持久
    • 调用基本动作
    • 创建一个新的图实例
    • 搜索设置为当前头部缓存的记录
    • 抛出新的重定向所需异常

    所以代码可能如下所示[可能需要修改]

    [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)在这篇文章中建议的所需视图方法。

    【讨论】:

      【解决方案2】:

      假设您的网格已绑定到查看 PayRollsDetails。然后您可以使用以下代码来刷新您的网格:

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

      【讨论】:

        【解决方案3】:

        你可以试试select方法。 例如:这是Acumatica源码中的item设置数据视图(可以使用explor source code page)

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

        通过自定义(我假设您使用 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 方法有助于使用插入的数据重新加载屏幕。

        【讨论】:

        • 嗨 HDanh,使用您的代码发布时出现以下错误“错误:无法将类型 'PX.Data.PXSelect>>>' 隐式转换为 'System.Collections.IEnumerable'。存在显式转换(您是否缺少演员表?)在文件中: Code#InventoryItemMaint(36"
        • 我已经成功发布了项目,但不幸的是它没有解决问题,我仍然需要重新加载页面才能查看保存的库存项目。
        • 嗯,基本上 Acumatica 建议使用缓存。我会根据您的触发器尝试另一种方法,但您可以尝试这种替代解决方案:
        • 你需要我的触发脚本吗?
        • 好吧,也许我在这里遗漏了一些东西,让我们澄清一下:您创建了一个新表,然后通过某种方式将其映射到库存项目屏幕(常规设置选项卡)上的新数据视图,然后创建触发器插入数据?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-19
        • 2010-10-28
        • 1970-01-01
        相关资源
        最近更新 更多