错误#153另一个进程添加了“注释”记录。您的更改将丢失(SalesOrderEntry)

时间:2016-02-20 00:24:12

标签: acumatica

在“销售订单”页面中,我创建了一个自定义按钮,用于保存和刷新页面。目前它保存得很好,并将新订单处理为订单号,但当我尝试在下拉菜单中添加项目/编辑或执行操作时,我收到错误消息。

这是我的代码:

public PXAction<SOOrder> SRefresh;
    [PXUIField(DisplayName = "S RefreshT")]
    [PXButton(CommitChanges = true)]
    protected virtual IEnumerable sRefresh(PXAdapter adapter)
    {
     SOOrderEntry graph = PXGraph.CreateInstance<SOOrderEntry>();
     Base.Actions.PressSave();

     SOLine sLine = PXSelect<SOLine, Where<SOLine.orderNbr, Equal<Required<SOLine.orderNbr>>>>.Select(graph, this.Base.Document.Current.OrderNbr);

     if (sLine != null && sLine.InventoryID.HasValue)
       {
        graph.Document.Current = graph.Document.Search<SOLine.orderNbr>(sLine.OrderNbr);
        throw new PXRedirectRequiredException(graph, null);

       }

       return adapter.Get();
    }

我也尝试过使用graph.Persist(),如手册中所说,而不是Action.PressSave();没有成功。

我感谢你们有任何意见,谢谢你们

1 个答案:

答案 0 :(得分:2)

由于您正在使用当前销售订单,因此无需创建销售订单entery图的新实例并重定向您的用户。您可以使用Base对象并在其上运行所有逻辑。

Base.Document.Current包含对当前SOOrder的引用,Base.Transactions包含此文档的SOLine列表。我在代码中发现的另一个问题是你正在调用Document.Search<SOline.orderNbr>;它应该是SOOrder.orerNbr,因为您在“文档”视图中搜索,该视图包含销售订单,而不是行。在这种情况下,甚至不需要搜索,Base.Document.Current已经设置为您正在查看的订单。

我强烈建议您完成标准的Acumatica开发人员培训 - T100,T200,T300;这些东西都被覆盖了,可以让你快速提高效率