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