在自定义产品网格中,自定义字段在自定义网站的一行向下移动。
背景:
我们有一个自定义,它在标题中提供单位边距和%。 PXFormula用于DAC,用于任何依赖于计算。
Opportunity Products有4个附加字段:
机会增加了2个字段:
问题:
自定义机会存在问题,当从现有商机复制记录或导入Excel文件时,行会移动一行。
现有记录
复制/粘贴或从Excel
导入后代码:
我目前的代码:
public PXSelect<INItemCost,
Where<INItemCost.inventoryID,
Equal<Current<CROpportunityProducts.inventoryID>>>> Cost;
protected void CROpportunityProducts_RowInserting(PXCache cache,
PXRowInsertingEventArgs e, PXRowInserting InvokeBaseHandler)
{
if(InvokeBaseHandler != null)
InvokeBaseHandler(cache, e);
var row = (CROpportunityProducts)e.Row;
if (row == null) return;
var rowExt = cache.GetExtension<CROpportunityProductsExt>(row);
if (rowExt == null) return;
var cost = Cost.SelectSingle();
if (cache.GetValue(row, "usrManCost") == null) return;
if (cost != null && (bool)cache.GetValue(row, "usrManCost") == false)
{
cache.SetValueExt<CROpportunityProductsExt.usrLastCost>(row, cost.LastCost);
}
}
可能导致这种情况的原因是什么?我想,自从PXSelect&lt;&gt;以来,RowInserting事件为第一行返回0语句返回0,因为在下一行之前,InventoryItem不在缓存中。
我提出的一个可能的解决方案是使用RowInserted。这解决了使用复制/粘贴时的问题。但是,它会导致从Excel导入错误计算总保证金。
答案 0 :(得分:1)
您视图中的Current<>
可能不是您当前所需要的吗?
如果您只是将以下var cost = Cost.SelectSingle()
行替换为使用Required<>
作为广告资源ID中的传递,会发生什么?
INItemCost cost = PXSelect<INItemCost,
Where<INItemCost.inventoryID, Equal<Required<CROpportunityProducts.inventoryID>>>>
.Select(Base, row.inventoryID);
答案 1 :(得分:0)
答案是因为这种情况下的事件必须在RowSelecting事件处理程序中与PXConnectionScope()一起完成。
Brendan在正确的轨道上将PXSelect移动到处理程序中。我在问题中的代码如下。另外,请注意使用Required&lt;&gt;与当前&lt;&gt;。
public void CROpportunityProducts_RowSelecting(PXCache cache,
PXRowSelectingEventArgs e)
{
var row = (CROpportunityProducts)e.Row;
if (row == null) return;
using (new PXConnectionScope())
{
INItemCost cost = PXSelect<INItemCost,
Where<INItemCost.inventoryID,
Equal<Required<INItemCost.inventoryID>>>>.Select(Base, row.InventoryID);
if (cost != null && (bool)cache.GetValue(row, "usrManCost") == false)
{
//decimal dbLastCost = (decimal)cost.LastCost;
var lstCost = cache.GetValue(row, "usrLastCost");
if ((decimal)cost.LastCost == (decimal)0.00)
{
cache.SetValueExt<CROpportunityProductsExt.usrLastCost>(row,
cost.LastCost);
}
}
}
}