来自BAccount的PXRedirect - >新的SOOrder,收到错误

时间:2016-05-13 22:37:18

标签: acumatica

所以我添加了使用当前BAccount.BAccountID创建新销售订单的操作,并且我收到此错误"值不能为空。参数名称:key"。任何人都可以具体看到我做错了什么吗?我假设customerID和BAccountID是等价的,因为它们对ID保持相同的值。

 public PXAction<BAccount> KSSOOrderPush;
    [PXUIField(DisplayName = "Create New Sales Order", MapEnableRights = PXCacheRights.Select, MapViewRights = PXCacheRights.Select)]
    [PXButton(CommitChanges = true)]
    protected virtual void kSSOOrderPush()
    {
        //Must use Base.BAccount.Current INSTEAD of BAccount.Current
        BAccount bacct = Base.BAccount.Current;
        if (bacct == null || bacct.BAccountID == null) return;

        //Create instance of graph
        SO.SOOrderEntry graph = PXGraph.CreateInstance<SO.SOOrderEntry>();


        graph.Document.Current = graph.Document.Search<SOOrder.customerID>(bacct.BAccountID);


        throw new PXRedirectRequiredException(graph, "Sales Order");


    }

1 个答案:

答案 0 :(得分:5)

首先,您向右 - SOOrder.CustomerID采用与BAccount.BAccountID相同的值。这里有一个重要的注意事项:企业客户不仅代表客户,还代表供应商,员工等,同时可以仅为客户创建销售订单(以及AR文档) - 请记住并确保检查您在此操作中是否正在与客户打交道(BAccount类上有一个类型字段 - 检查它就足够了。)

您的代码存在的问题是,您实际上并未为所选客户创建销售订单,而是尝试找到属于该客户的销售订单并导航到该客户。

要创建订单,您应该更改以下行

graph.Document.Current = graph.Document.Search<SOOrder.customerID(bacct.BAccountID);

// insert an SOOrder with default type
SOOrder newOrder = graph.Document.Insert();
// set appropriate CustomerID and update the order
newOrder.CustomerID = bacct.BAccountID;
graph.Document.Update(newOrder);

通过这些修改PXRedirectionException应打开销售订单屏幕,并将客户设置为您在业务帐户屏幕上看到的那个。