【问题标题】:Acumatica: Getting value of field on header from grid change eventAcumatica:从网格更改事件中获取标题字段的值
【发布时间】:2019-02-15 03:21:21
【问题描述】:

我想我有一个相当简单的问题,但我是 Acumatica 的新手。我希望销售订单(SO.30.10.00)标题上的自定义字段对网格上项目的价格产生一些影响。因此,我需要两件事。

1) 我需要网格从标题中读取一个值。我查看了另一个类似的请求,但我似乎无法使其工作。在 SO 上,看起来这段代码应该读取当前订单号的值,但我得到“当前上下文中不存在名称‘文档’”

string TestString = Document.Current.OrderNbr;

2) 是否可以在该字段更改时重新计算所有行?我实际上认为这可能是最简单的部分,但既然我问的是第一部分,我想我也把它扔在这里了。

提前致谢!

【问题讨论】:

    标签: acumatica


    【解决方案1】:

    操作从标题字段流向网格行字段。当标题字段被修改时,然后更新行。那将是您问题中的#2。

    在 #1 中,您的问题是文档数据视图是 SOOrderEntry graph 的成员,而不是您创建的 SOOrderEntry graph extension 的成员。在 graph extension 上下文中,您使用Base 属性访问基本图属性,因此您将看到Base.Document

    为了实现,首先您希望标头字段在修改时引发事件。这是通过将 ASPX 控件的CommitChanges 属性设置为true 来实现的:

    接下来要声明一个FieldUpdated 事件处理程序来挂钩头字段修改并根据头字段修改详细信息行:

    using PX.Data;
    
    namespace PX.Objects.SO
    {
        public class SOOrderEntry_Extension : PXGraphExtension<SOOrderEntry>
        {
            public void SOOrder_OrderDesc_FieldUpdated(PXCache sender, PXFieldUpdatedEventArgs e)
            {
                SOOrder order = e.Row as SOOrder;
    
                if (order != null)
                {
                    foreach (SOLine line in Base.Transactions.Select())
                    {
                        line.TranDesc = order.OrderDesc;
                    }
                }
            }
        }
    }
    

    在修改 Header 字段之前:

    修改Header字段后:

    我使用简单的= 赋值来设置详细信息行的值。当您希望分配引发事件时,您可以使用SetValue 方法或SetValueExt。使用 SetValueExt 将引发 FieldUpdated 事件。

    【讨论】:

    • 如果你也需要初始化,你需要其他机制。 FieldDefaulting 可能是一个。
    • 太棒了。这正是我所需要的!
    • 第二部分很完美,实际上解决了另一个问题。不过,我对第一部分有点困惑。我确定这是我自己的无知,例如,我可以使用“Base.Document.Current.OrderNbr”,但是如何访问我添加的用户字段?例如,“Base.Document.Current.UsrDeburr”(我添加的用户字段)不起作用。我确定我没有正确地指代 ext,但我不太清楚如何使它工作。
    • 你的理解是正确的。 Base.Document.Current 保存 SOOrder 记录,您必须从中获取扩展名才能访问自定义字段。假设扩展名为 SOOrderExt,为简洁起见,以下是如何将其作为一个衬里访问:“(Base.Document.Current.GetExtension() as SOOrderExt).UsrDeburr”您希望在获取后添加空检查扩展和访问自定义字段之前。
    • 谢谢再次。感谢您的帮助,我是如此,如此接近。我在 FieldUpdatedEvents 中有代码,现在可以完美地从标题中读取。我可以强制标题更新行,但我真正想要的是单击“去毛刺”字段以强制它运行更新每条记录的行的函数。它当前是从几个 usr 字段调用的(标题类似于“UpdateLine(PXCache cache, PXFieldUpdatedEventArgs e)”)。我认为像 SetValueExt 这样的东西可能是我所追求的,但不太清楚我是如何从“line”循环中运行的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-28
    • 2013-12-10
    • 1970-01-01
    • 1970-01-01
    • 2019-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多