У меня есть поле OpportunityID, которое представляет собой последовательность нумерации, и когда оно будет сохранено в первый раз, я хочу, чтобы поле UsrEBDR обновлялось значением optionID.
Итак, при ВСТАВКЕ в базу данных,Я хочу скопировать поле 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();
}
}
}
И все же я чувствую, что это неправильное использование фреймворка, и оно не совсем "чистое", еслиу кого-то есть идеи, как сделать его чистым.