我进行了一些修改,以促进利用PO和SO进行内部业务流程。该屏幕提供了在正常补货流程之外购买MRO备件的功能。该项目可能会或可能不会保留在库存中,因此可能需要订购该产品以进行补充或作为SO处理为PO标记。
在创建SO时,我能够将SO参考信息存储到DAC中以进行自定义。直接创建采购订单时,我还可以捕获采购订单参考信息。但是,当使用用于创建采购订单的标准Acumatica菜单操作从SO创建PO时,我无法捕获正确的事件以启用将SOLineSplit3中分配给我的自定义DAC的PO参考存储的功能。 (值得注意的是,我还需要能够使用存储在我的自定义DAC中的值覆盖PO行上的默认curyunitcost值,因为这些购买的每次购买价格都不是固定的。这是通过将SOLineSplit追溯到我的自定义DAC并覆盖POLine_CuryUnitCost_FieldDefaulting。)
在“销售订单输入”屏幕上调用的操作(“操作-创建采购订单”)调用POCreate.cs中的CreatePOOrders方法,该方法又创建POOrderEntry图的实例以创建实际的采购订单。
最终,到达以下代码,该代码似乎将PO参考信息作为soline附加到SOLineSplit3:
soline.POType = line.OrderType;
soline.PONbr = line.OrderNbr;
soline.POLineNbr = line.LineNbr;
soline.RefNoteID = docgraph.Document.Current.NoteID;
docgraph.UpdateSOLine(soline, docgraph.Document.Current.VendorID, true);
docgraph.FixedDemand.Cache.SetStatus(soline, PXEntryStatus.Updated);
我还不熟悉Cache.SetStatus,但是弹出描述似乎表明这是使用POOrderEntry中的FixedDemand选择来查找和设置(或插入)SOLineSplit3记录。对它上面的UpdateSOLine的调用是一个新的内部方法,该方法不在我以前的POCrete.cs版本中,因为整个方法最近似乎已经进行了一些重大的改进。在试图在POCreate和POOrderEntry中的SOLineSplit3上捕获事件时,似乎Cache.SetStatus不会引发任何我可以捕获的事件...或者我完全无法捕获/覆盖哪个事件。
在本节之后,立即出现以下内容以更新补货记录并保存整个POOrderEntry图。
if (docgraph.Transactions.Cache.IsInsertedUpdatedDeleted)
{
using (PXTransactionScope scope = new PXTransactionScope())
{
docgraph.Save.Press();
if (demand.PlanType == INPlanConstants.Plan90)
{
docgraph.Replenihment.Current = docgraph.Replenihment.Search<INReplenishmentOrder.noteID>(demand.RefNoteID);
if (docgraph.Replenihment.Current != null)
{
INReplenishmentLine rLine =
PXCache<INReplenishmentLine>.CreateCopy(docgraph.ReplenishmentLines.Insert(new INReplenishmentLine()));
rLine.InventoryID = line.InventoryID;
...
rLine.PlanID = demand.PlanID;
docgraph.ReplenishmentLines.Update(rLine);
docgraph.Caches[typeof(INItemPlan)].Delete(demand);
docgraph.Save.Press();
}
}
scope.Complete();
}
...
}
基本上,我需要在将PO信息分配给“ soline”和docgraph.Save.Press()之间插入我的代码。无需复制数十行代码即可修改此方法。我已经成功地克隆了基本方法并成功插入了代码,但是我更喜欢使用事件处理程序,而不必修改标准代码。但是问题是……在哪个事件中,哪个图形可以让我获取采购订单信息,并通过SOLineSplit将面包屑跟踪回到我的自定义DAC?
Acumatica内部版本18.212.0033
答案 0 :(得分:0)
扩展NSSearchPathDomain.All
图,因为它是实例化您感兴趣的POCreate
。
在POOrderEntry
创建的任何POOrderEntry
图上设置一个钩子,并在拦截的图上订阅您的事件。我测试了此解决方案,使用在分配窗口中具有分配行的销售订单,它将捕获POCreate
事件:
SOLineSplit3