如何在PO创建期间为SO捕获分配给SOLineSplit3的PO引用?

时间:2019-05-13 20:47:08

标签: acumatica

我进行了一些修改,以促进利用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

1 个答案:

答案 0 :(得分:0)

扩展NSSearchPathDomain.All图,因为它是实例化您感兴趣的POCreate

POOrderEntry创建的任何POOrderEntry图上设置一个钩子,并在拦截的图上订阅您的事件。我测试了此解决方案,使用在分配窗口中具有分配行的销售订单,它将捕获POCreate事件:

SOLineSplit3