首次保存记录后,如何更新和保存记录?

时间:2018-11-29 13:04:37

标签: acumatica

我有一个OpportunityID字段,它是一个编号序列,当第一次保存它时,我希望UsrEBDR字段更新为契机ID值。

因此,在插入数据库时​​,我想将OpportunityID字段复制到UsrEBDR字段。

OpportunityID字段是一个自动编号序列,因此在RowPersistingEvent中,框架尚未对其进行计算。

所以我尝试覆盖RowPersisted事件,但在MoveNext上遇到异常,它不保存我的记录。

您有个主意吗?

protected virtual void CROpportunity_RowPersisted(PXCache sender, PXRowPersistedEventArgs e, PXRowPersisted del)
        {
            if (del != null) del(sender, e);
            CROpportunity row = e.Row as CROpportunity;
            if(row == null) return;
            if(e.Operation == PXDBOperation.Insert && string.IsNullOrWhiteSpace(row.GetExtension<CROpportunityExt>().UsrEBDR) && e.TranStatus == PXTranStatus.Open)
            {
                Base.Opportunity.Current.GetExtension<CROpportunityExt>().UsrEBDR = row.OpportunityID;
                Base.Persist();
            }
        }

编辑: 到目前为止,我通过执行以下操作使其正常工作:

 protected virtual void CROpportunity_RowPersisted(PXCache sender, PXRowPersistedEventArgs e, PXRowPersisted del)
        {
            if (del != null) del(sender, e);
            CROpportunity row = e.Row as CROpportunity;
            if(row == null) return;
            if(e.Operation == PXDBOperation.Insert && string.IsNullOrWhiteSpace(row.GetExtension<CROpportunityExt>().UsrEBDR) && e.TranStatus == PXTranStatus.Completed)
            {
                row.GetExtension<CROpportunityExt>().UsrEBDR = row.OpportunityID;
                using(PXTransactionScope ts = new PXTransactionScope())
                {
                    var restrictOpportunityId = new PXDataFieldRestrict<CROpportunity.opportunityID>(row.OpportunityID);
                    var assignEBDR = new PXDataFieldAssign<CROpportunityExt.usrEBDR>(row.OpportunityID);
                    PXDatabase.Update<CROpportunity>(assignEBDR, restrictOpportunityId);
                    ts.Complete();
                }
            }
        }

但是,我觉得这是对框架的不当使用,并且如果有人对如何使其变得干净有什么感觉,它并不是真正的“干净”。

1 个答案:

答案 0 :(得分:0)

将逻辑放入<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <input type="text" value="test">中,让系统自己保存。如果您仅在记录保留之前对其进行修改,那么从Persist调用Persist会导致很多问题,这些问题很容易避免。

RowPersisting