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

在Acumatica 2019 R1中设置自定义字段的值,acumatica,Acumatica,我正在从Acumatica 2018 R2升级到2019 R1。在我的许多自定义设置中,我都有代码,由按钮单击或事件处理程序触发,用于设置/更改自定义字段的值。这在2018年如预期般奏效。但是,在2019 R1中,自定义字段上的值不会更新。这里有一个简单的例子 public class SOOrderEntry_SOOpenPOsGILink_Extension : PXGraphExtension<SOOrderEntry> { protected virtual void

我正在从Acumatica 2018 R2升级到2019 R1。在我的许多自定义设置中,我都有代码,由按钮单击或事件处理程序触发,用于设置/更改自定义字段的值。这在2018年如预期般奏效。但是,在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;
        }
    }
}
在本例中,当在SO订单输入屏幕上选择SOLine时,
solinext.UsrEnableOpenPOs
的值应设置为
isEmpty
。该代码适用于2018 R2,并正确更新了
UsrEnableOpenPOs
。但是,在2019 R1中,代码被正确触发并运行,但屏幕上的值未更新

正如我所提到的,我们有相当多的例子遇到这个问题。在某些情况下,代码由按钮单击触发,在其他情况下由不同的事件触发,如RowSelected、RowInserting、FieldUpdated和RowUpdated


我希望能够深入了解此代码不再工作的原因以及我可以做些什么来修复它。

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

例:

sender.SetValueExt(行,isempty);

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

您可以通过缓存设置值,而不只是设置row对象。例如sender.SetValueExt(行,IsEmpty)@布兰登,谢谢!真管用!但是,当我将其用于RowSelected事件时,我会收到一个Acuminator警告“传递给RowSelected事件处理程序的DAC实例不能在此事件处理程序中修改”。我应该担心这个问题吗?还是可以?未绑定的字段应该在RowSelecting事件或FieldSelecting事件中设置
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
}
sender.SetValueExt<SOLineExt.usrEnableOpenPOs>(row, isEmptry);