Acumatica 更新POOrderEntry中的缓存时发生异常
创建采购订单后添加SOLine时,SOLineSplit中“POType”、“PONbr”、“POLineNbr”、“RefNoteID”的值存储为空值 当我在创建的采购订单中添加相同的SOLine时,我试图用POLine值更新SOLineSplit NULL值,但在弹出窗口中出现错误,提示“订单日期不能为空”。下面是我在一个事件中编写的代码,用于更新缓存中的值,但在graph.Actions.PressSave()中出现异常;有人能帮我吗Acumatica 更新POOrderEntry中的缓存时发生异常,acumatica,Acumatica,创建采购订单后添加SOLine时,SOLineSplit中“POType”、“PONbr”、“POLineNbr”、“RefNoteID”的值存储为空值 当我在创建的采购订单中添加相同的SOLine时,我试图用POLine值更新SOLineSplit NULL值,但在弹出窗口中出现错误,提示“订单日期不能为空”。下面是我在一个事件中编写的代码,用于更新缓存中的值,但在graph.Actions.PressSave()中出现异常;有人能帮我吗 public PXSelectJoin<
public PXSelectJoin<SOLineSplit, InnerJoin<POOrder, On<SOLineSplit.orderType, Equal<POOrder.sOOrderType>,
And<SOLineSplit.orderNbr, Equal<POOrder.sOOrderNbr>>>>,
Where<SOLineSplit.pOType, IsNull, And<SOLineSplit.pONbr, IsNull>>> UnmappedSoLine;
protected void POOrder_RowPersisted(PXCache sender, PXRowPersistedEventArgs e, PXRowPersisted BaseEvent)
{
POOrder row = e.Row as POOrder;
if (row != null && e.TranStatus == PXTranStatus.Completed)
{
SOLinePartial graph = PXGraph.CreateInstance<SOLinePartial>();
foreach (POLine poline in Base.Transactions.Select())
{
foreach (SOLineSplit sosplititem in UnmappedSoLine.Search<SOLineSplit.inventoryID>(poline.InventoryID))
{
sosplititem.POType = poline.OrderType;
sosplititem.PONbr = poline.OrderNbr;
sosplititem.POLineNbr = poline.LineNbr;
sosplititem.OrderDate = poline.OrderDate;
SOLineSplit sp = PXSelectJoin<SOLineSplit,
InnerJoin<POLine, On<
SOLineSplit.pOType, Equal<POLine.orderType>,
And<SOLineSplit.pONbr, Equal<POLine.orderNbr>, And<SOLineSplit.pOLineNbr, Equal<POLine.lineNbr>>>>>,
Where<POLine.orderNbr, Equal<Required<POOrder.orderNbr>>>>.Select(Base, row.OrderNbr);
if (sp != null)
sosplititem.RefNoteID = sp.RefNoteID;
graph.soLineSplit.Cache.Update(sosplititem);
}
}
graph.Actions.PressSave();
}
}
public PXSelectJoin unappedsoline;
受保护的void POOrder_RowPersisted(PXCache发送方、PXRowPersistedEventArgs e、PXRowPersisted BaseEvent)
{
POOrder行=e。行作为POOrder;
if(行!=null&&e.TranStatus==PXTranStatus.Completed)
{
SOLinePartial graph=PXGraph.CreateInstance();
foreach(POLine POLine在Base.Transactions.Select()中)
{
foreach(unappedsoline.Search(poline.InventoryID)中的SOLineSplit sosplititem)
{
sosplititem.POType=poline.OrderType;
sosplititem.PONbr=poline.OrderNbr;
sosplititem.POLineNbr=poline.LineNbr;
sosplititem.OrderDate=poline.OrderDate;
SOLineSplit sp=PXSelectJoin,
其中>.Select(Base,row.OrderNbr);
如果(sp!=null)
sosplititem.RefNoteID=sp.RefNoteID;
graph.soLineSplit.Cache.Update(sosplititem);
}
}
graph.Actions.PressSave();
}
}
销售到采购链接逻辑不是自动填入这些值吗?(从销售订单添加到现有或新采购订单时)。可能与您正在使用的图形有关,并且当前SOOrder为null(基于SOLineSplit.OrderDate[PXDBDefault(typeof(SOOrder.OrderDate)))@Brendan此逻辑不同,因此这是在启用“标记为PO”的SOLine创建salesorder后,创建采购订单操作将创建采购订单的场景。在此之后,我将在Salesorder中添加一个新的SOLine,它在SOLineSplit中创建空值。当采购订单中创建了与POLine相同的SOLine时,也就是当我尝试更新空值七时,如果您将销售行添加到现有PO中?或者您是否有一个自定义流程,将一个新行添加到采购订单并将其自动链接到销售行?没有自定义流程。Acumatica为现有采购订单添加了新的PoLine。但添加新SOLine时,SoLineSplit值为空。我猜SOLinePartial graph没有SOOrder的当前值,或者您的OrderDate值为空。理想情况下,您希望在PO上使用rowserted,然后在POGraph缓存上使用SOLinesplit更改vs使用新的图形。