如何更新和保存记录一直保存在第一时间刚过一个记录?(How to update and save a

2019-10-28 13:30发布

我已经得到了OpportunityID领域这是一个编号序列,当它的保存我第一次希望UsrEBDR场与opportunityID值进行更新。

因此,在插入数据库,我想将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();
                }
            }
        }

但我觉得这是一个不正确的使用框架,这是不是真的“干净”的,如果有人有任何想法如何使它干净。

Answer 1:

把你的逻辑RowPersisting ,并让系统自行保存。 调用persist从坚持引出如果你只是它的坚持之前修改的记录,很容易避免很多问题。

void CROpportunity_RowPersisting(PXCache sender, PXRowPersistingEventArgs e, PXRowPersisting del)
{
   // Don't call save action or persist
   // Just modify data and let the system save
}


文章来源: How to update and save a record just after the record has been save for the first time?
标签: acumatica