在Acumatica 2019 R1中设置自定义字段的值

问题描述 投票:0回答:1

我正在从Acumatica 2018 R2升级到2019 R1的过程中。在我的许多自定义设置中,我都有通过单击按钮或事件处理程序触发的代码,这些代码可以设置/更改自定义字段的值。这在2018 R2中按预期工作。但是,在2019 R1中,自定义字段上的值未更新。这是一个简单的例子。

public class SOOrderEntry_SOOpenPOsGILink_Extension : PXGraphExtension<SOOrderEntry>
{
    protected virtual void SOLine_RowSelected(PXCache sender, PXRowSelectedEventArgs e)
    {
        SOLine row = (SOLine)e.Row;
        if (row != null)
        {
            bool isEmpty = true;
            SOLineExt ext = row.GetExtension<SOLineExt>();

            // logic determining value of isEmpty

            ext.UsrEnableOpenPOs = isEmpty;
        }
    }
}

[UsrEnableOpenPOs定义为以下内容。

public class SOLineExt : PXCacheExtension<PX.Objects.SO.SOLine>
{
    #region UsrEnableOpenPOs
    [PXBool]
    [PXUIField(DisplayName="EnableOpenPOs", Enabled = false, Visible=false)]
    [PXUnboundDefault(false, PersistingCheck = PXPersistingCheck.Nothing)]

    public virtual bool? UsrEnableOpenPOs { get; set; }
    public abstract class usrEnableOpenPOs : PX.Data.BQL.BqlBool.Field<usrEnableOpenPOs> { }
    #endregion
}

在此示例中,当在SO订单输入屏幕上选择SOLine时,SOLineExt.UsrEnableOpenPOs的值应设置为isEmpty的值。此代码在2018 R2中有效,并且可以正确更新UsrEnableOpenPOs。但是,在2019 R1中,代码已正确触发并运行,但屏幕上的值未更新。

正如我所提到的,我们有很多实例正在遇到此问题。在某些情况下,代码是通过单击按钮触发的,而在其他情况下,是通过不同的事件(如RowSelected,RowInserting,FieldUpdated和RowUpdated)触发的。

我将对为什么此代码不再起作用以及如何解决此问题提供一些见解。

acumatica
1个回答
0
投票

应始终尝试在缓存与行实例中设置值。

ex:

sender.SetValueExt<SOLineExt.usrEnableOpenPOs>(row, isEmptry);

未绑定字段应在RowSelecting或FieldSelecting事件中设置。 RowSelected事件应用于UI更改,例如禁用,可见等字段。

© www.soinside.com 2019 - 2024. All rights reserved.