RowPersisted在两个不同的DAC上是无限循环的

时间:2018-01-22 20:55:56

标签: acumatica

我目前在Acumatica的SOLine和POLine上有自定义的RowPersisted事件。基本上,当用户将它们保存在Acumatica中时,我需要确保PO中的自定义供应商成本字段和PO中的单价字段相互更新所有链接的PO和SO。所以我在POLine_RowPersisted中有这样的东西:

        soRecExt.UsrVendorCost = line.CuryUnitCost;

        SOOrderEntry graph = PXGraph.CreateInstance<SOOrderEntry>();

        graph.CurrentDocument.Current = soOrd;
        var result = graph.Transactions.Select();

        graph.Transactions.Update(soRec);
        graph.Actions.PressSave();

在SOLine_RowPersisted中有类似的东西:

        poRec.CuryUnitCost = lineExt.UsrVendorCost;

        POOrderEntry graph = PXGraph.CreateInstance<POOrderEntry>();

        graph.CurrentDocument.Current = poOrd;
        var result = graph.Transactions.Select();

        graph.Transactions.Update(poRec);
        graph.Actions.PressSave();

所以很遗憾,当一个人更新时,整个事情就会进入无限循环。我尝试过这样的事情:

        POOrderEntry_Extension graphExt = graph.GetExtension<POOrderEntry_Extension>();
        graphExt.RowPersisted.RemoveHandler<SOOrderEntry_Extension>(graphExt.POLine_RowPersisted);

但是,图表扩展上没有RowPersisted。我的活动是公开的。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

事件由Base图注册并触发,因此您必须在基本图上删除它们。

我相信你想要完成的事情更多的是:

POOrderEntry_Extension graphExt = graph.GetExtension<POOrderEntry_Extension>();
graphExt.Base.RowPersisted.RemoveHandler<POOrderEntry>(graphExt.POLine_RowPersisted);

在哪里&#39;图表&#39;是POOrderEntry类型然后使用&#39; graph&#39;相当于&#39; graphExt.Base&#39;。