我有一个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();
}
}
}
但是,我觉得这是对框架的不当使用,并且如果有人对如何使其变得干净有什么感觉,它并不是真正的“干净”。
答案 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