所以我添加了使用当前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应打开"销售订单"屏幕,并将"客户"设置为您在"业务帐户"屏幕上看到的那个.