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

JB9*_*B90 0 acumatica

所以我添加了使用当前BAccount.BAccountID创建新销售订单的操作,我收到此错误"值不能为空.参数名称:密钥".任何人都可以具体看到我做错了什么吗?我假设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");


    }
Run Code Online (Sandbox Code Playgroud)

小智 5

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

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

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

graph.Document.Current = graph.Document.Search<SOOrder.customerID(bacct.BAccountID);
Run Code Online (Sandbox Code Playgroud)

// 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);
Run Code Online (Sandbox Code Playgroud)

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