Acumatica CROpportunityExt 数据未保存
Acumatica CROpportunityExt data not saving
美好的一天
我在 CROpportunity Extenstion 中有一个名为 usrGrossProfit 的新字段。
在 CROpportunity 的 RowSelected 期间,它会根据需要计算出值。我遇到的问题是用户正在使用表单上的创建报价按钮,因为这从不使用保存按钮保存,系统会为他们做这件事。我发现 usrGrossProfit 值因此没有保存。
有没有办法在 RowSelected 函数中强制使用 save/Persist?
protected void CROpportunity_RowSelected(PXCache cache, PXRowSelectedEventArgs e)
{
try
{
var row = (CROpportunity)e.Row;
if (row == null) return;
CROpportunityExt SOE = PXCache<CROpportunity>.GetExtension<CROpportunityExt>(row);
int total = 0;
decimal TotalSales = 0;
decimal TotalCost = 0;
foreach (CROpportunityProducts item in this.Base.Products.Select())
{
total++;
CROpportunityProductsExt2 itemExt = PXCache<CROpportunityProducts>.GetExtension<CROpportunityProductsExt2>(item);
TotalCost += (decimal)itemExt.UsrCostPrice.Value * item.Qty.Value;
TotalSales += (decimal)itemExt.UsrSellingprice * item.Qty.Value;
}
SOE.UsrGrossProfit = TotalSales - TotalCost;
// I added this just to try and see if it helps
cache.SetValueExt<CROpportunityExt.usrGrossProfit>(row, (decimal)(TotalSales - TotalCost));
// we are not allowed to press the save button in the event Handler
//this.Base.Save.Press();
}
catch (Exception ex)
{
PXTrace.WriteError(ex);
}
}
我也尝试过覆盖 CreateQuote 函数,但这不起作用
public delegate IEnumerable CreateQuoteDelegate(PXAdapter adapter);
[PXOverride]
public IEnumerable CreateQuote(PXAdapter adapter, CreateQuoteDelegate baseMethod)
{
this.Base.Persist();
return baseMethod(adapter);
}
我也做了一个商业活动来打开和保存机会,但运气不好。
不,即使允许,您也不应该保存在选定的行上。这是因为行选择事件被多次触发,您不希望每次都保存。
如果您想节省您的 CreateQuote 覆盖,试试这个:
Base.Save.PressButton(adapter)
也许更好的选择是强制用户自己保存。例如,您可以检查状态并在覆盖中抛出错误而不是保存。
if (Opportunity.Current != null && Opportunity.Cache.GetStatus(Opportunity.Current) == PXEntryStatus.Inserted)
{
throw new PXException("Please save before proceeding");
}
美好的一天
我在 CROpportunity Extenstion 中有一个名为 usrGrossProfit 的新字段。 在 CROpportunity 的 RowSelected 期间,它会根据需要计算出值。我遇到的问题是用户正在使用表单上的创建报价按钮,因为这从不使用保存按钮保存,系统会为他们做这件事。我发现 usrGrossProfit 值因此没有保存。
有没有办法在 RowSelected 函数中强制使用 save/Persist?
protected void CROpportunity_RowSelected(PXCache cache, PXRowSelectedEventArgs e)
{
try
{
var row = (CROpportunity)e.Row;
if (row == null) return;
CROpportunityExt SOE = PXCache<CROpportunity>.GetExtension<CROpportunityExt>(row);
int total = 0;
decimal TotalSales = 0;
decimal TotalCost = 0;
foreach (CROpportunityProducts item in this.Base.Products.Select())
{
total++;
CROpportunityProductsExt2 itemExt = PXCache<CROpportunityProducts>.GetExtension<CROpportunityProductsExt2>(item);
TotalCost += (decimal)itemExt.UsrCostPrice.Value * item.Qty.Value;
TotalSales += (decimal)itemExt.UsrSellingprice * item.Qty.Value;
}
SOE.UsrGrossProfit = TotalSales - TotalCost;
// I added this just to try and see if it helps
cache.SetValueExt<CROpportunityExt.usrGrossProfit>(row, (decimal)(TotalSales - TotalCost));
// we are not allowed to press the save button in the event Handler
//this.Base.Save.Press();
}
catch (Exception ex)
{
PXTrace.WriteError(ex);
}
}
我也尝试过覆盖 CreateQuote 函数,但这不起作用
public delegate IEnumerable CreateQuoteDelegate(PXAdapter adapter);
[PXOverride]
public IEnumerable CreateQuote(PXAdapter adapter, CreateQuoteDelegate baseMethod)
{
this.Base.Persist();
return baseMethod(adapter);
}
我也做了一个商业活动来打开和保存机会,但运气不好。
不,即使允许,您也不应该保存在选定的行上。这是因为行选择事件被多次触发,您不希望每次都保存。
如果您想节省您的 CreateQuote 覆盖,试试这个:
Base.Save.PressButton(adapter)
也许更好的选择是强制用户自己保存。例如,您可以检查状态并在覆盖中抛出错误而不是保存。
if (Opportunity.Current != null && Opportunity.Cache.GetStatus(Opportunity.Current) == PXEntryStatus.Inserted)
{
throw new PXException("Please save before proceeding");
}