Acumatica 将数据插入自定义DAC仅在用户与DAC中的字段交互后出现

Acumatica 将数据插入自定义DAC仅在用户与DAC中的字段交互后出现,acumatica,Acumatica,当我从SOOrderEntry->Shipping->invoice创建新发票或准备发票时,SOInvoiceEntry.cs上出现问题。在用户单击与该DAC关联的另一个字段之前,不会输入发票编号 在按下与DAC相关的字段之前 按下与DAC关联的字段后 我创建了一个名为UsrKSFSCCom的新DAC 它在dac上的许多字段中有一个是关键字段 [PXDBString(50, IsKey = true, IsUnicode = true, InputMask = "")] [PXDBDefau

当我从SOOrderEntry->Shipping->invoice创建新发票或准备发票时,SOInvoiceEntry.cs上出现问题。在用户单击与该DAC关联的另一个字段之前,不会输入发票编号

在按下与DAC相关的字段之前

按下与DAC关联的字段后

我创建了一个名为UsrKSFSCCom的新DAC

它在dac上的许多字段中有一个是关键字段

[PXDBString(50, IsKey = true, IsUnicode = true, InputMask = "")]
[PXDBDefault(typeof(ARInvoice.refNbr))]
[PXUIField(DisplayName = "InvoiceNbr")]
    public string UsrInvoiceNbr { get; set; }

    public class usrInvoiceNbr : IBqlField{}
我有一个ARInvoice\u行选择事件处理程序,设置如下

    protected virtual void ARInvoice_RowSelecting(PXCache sender, PXRowSelectingEventArgs e, PXRowSelecting InvokeBaseHandler)
    {
        if (InvokeBaseHandler != null)
            InvokeBaseHandler(sender, e);
        ARRegister row = (ARRegister)e.Row;
        if (row == null) return;
        ARRegisterExt rowExt = PXCache<ARRegister>.GetExtension<ARRegisterExt>(row);

        ARTran invoiceCust = PXSelect<ARTran,
                                        Where<ARTran.refNbr,
                                        Equal<Required<ARTran.refNbr>>>>.Select(Base, row.RefNbr);
        if (invoiceCust == null)
            return;
        SOOrder salesOrd = PXSelect<SOOrder,
                                    Where<SOOrder.orderNbr,
                                    Equal<Required<SOOrder.orderNbr>>>>.Select(Base, invoiceCust.SOOrderNbr);

        UsrKSFSCCom fscComDef = PXSelect<UsrKSFSCCom,
                                Where<UsrKSFSCCom.usrInvoiceNbr,
                                Equal<Current<ARInvoice.refNbr>>>>.Select(Base, row.RefNbr);

        if (salesOrd == null)
            return;

        SOOrderExt saleOrdExt = PXCache<SOOrder>.GetExtension<SOOrderExt>(salesOrd);
        fscComDef.UsrInRep = saleOrdExt.UsrInRep;
        fscComDef.UsrInCom = saleOrdExt.UsrInCom;
        fscComDef.UsrManRep = saleOrdExt.UsrManRep;
        fscComDef.UsrManCom = saleOrdExt.UsrManCom;
        fscComDef.UsrMiscRep = saleOrdExt.UsrMiscRep;
        fscComDef.UsrMiscCom = saleOrdExt.UsrMiscCom;
        fscComDef.UsrOutRep = saleOrdExt.UsrOutRep;
        fscComDef.UsrOutCom = saleOrdExt.UsrOutCom;
        fscComDef.UsrIndirectCust = saleOrdExt.UsrIndirectCust;
        fscComDef.UsrOverBool = saleOrdExt.UsrOverBool;
        fscComDef.UsrOverAmt = saleOrdExt.UsrOverAmt;
        fscComDef.UsrOverageCom = saleOrdExt.UsrOverageCom;
    }
protected virtual void\u RowSelecting(PXCache发送方、PXRowSelectingEventArgs e、PXRowSelecting InvokeBaseHandler)
{
if(InvokeBaseHandler!=null)
InvokeBaseHandler(发送方,e);
ARRegister行=(ARRegister)e.row;
if(row==null)返回;
ARRegisterExt rowExt=PXCache.GetExtension(行);
ARTran invoiceCust=PXSelect.Select(基,行.RefNbr);
if(invoiceCust==null)
返回;
SOOrder salesOrd=PXSelect.Select(Base,invoiceCust.SOOrderNbr);
UsrKSFSCCom fscComDef=PXSelect.Select(Base,row.RefNbr);
if(salesOrd==null)
返回;
SOOrderExt saleOrdExt=PXCache.GetExtension(salesOrd);
fscComDef.UsrInRep=saleOrdExt.UsrInRep;
fscComDef.UsrInCom=saleOrdExt.UsrInCom;
fscComDef.UsrManRep=saleOrdExt.UsrManRep;
fscComDef.UsrManCom=saleOrdExt.UsrManCom;
fscComDef.UsrMiscRep=salerdext.UsrMiscRep;
fscComDef.UsrMiscCom=salerdext.UsrMiscCom;
fscComDef.UsrOutRep=salerdext.UsrOutRep;
fscComDef.UsrOutCom=saleOrdExt.UsrOutCom;
fscComDef.UsrIndirectCust=salerdext.UsrIndirectCust;
fscComDef.UsrOverBool=salerdext.UsrOverBool;
fscComDef.UsrOverAmt=salerdext.UsrOverAmt;
fscComDef.UsrOverageCom=saleOrdExt.UsrOverageCom;
}

问题在于行选择事件处理程序在一个条件下工作,用户必须单击其中一个相关字段,然后记录从所选行显示。我是否通过PXDefault错误地定义了默认值?非常感谢您的任何意见。

根据Dmitry建议,在此基础上添加。缓存[typeof(UsrKSFSCCom)]。更新(fscComDef)行结束时,选择事件处理程序工作。

我调试了该页面,它似乎按照预期获取了所有适当的信息,但直到我选择UsrKSFSCCom DAC的其中一个字段部分后,它才显示出来。我不确定它为什么会这样工作。但是你能试试这个。在你为记录设置了所有字段之后缓存[typeof(UsrKSFSCCom)].Update(fscComDef)吗?我现在就试试,我会让你知道结果的。嗯,我不得不稍微修改代码以使用Base而不是这个。当rowselection方法为ranUpdate:Dimitry时,它似乎没有效果,更新缓存实际上起作用了。我错误地为初始fscComDef选择了一条空记录,这是在初始行选择调用中传递的。最后,我创建了第二个新的UsrKSFSCCom,将其设置为row.RefNbr,重新指定fscComDef.UsrInvoiceNbr=fscComDefNew.UsrInvoiceNbr,并在将其他字段分配给Base.Caches后,按预期更新了dac。再次感谢你,那是我丢失的最后一块了!我马上就给这个问题写一个正式的答案