Acumatica-从采购订单更新销售订单
Acumatica- Update Sales Order from Purchase Order
我正在尝试在更改 POLine 承诺日期时更新 SOLine (UsrPOPromisedDate) 上的自定义字段。下面是我的图形扩展,但是 SOLine 始终为空。
当我将 BQL 转换为 T-SQL 时,我得到了预期的返回结果。为什么我的视图总是返回空值?
using PX.Data;
using PX.KWW.MyProject.DAC;
using PX.Objects.PO;
using PX.Objects.SO;
namespace MyProject.Graph
{
public class POOrderEntryExt : PXGraphExtension<POOrderEntry>
{
public PXSelectJoin<
SOLine,
InnerJoin<SOLineSplit,
On<SOLineSplit.orderType, Equal<SOLine.orderType>,
And<SOLineSplit.orderNbr, Equal<SOLine.orderNbr>,
And<SOLineSplit.lineNbr, Equal<SOLine.lineNbr>>>>>,
Where<SOLineSplit.pOType, Equal<Current<POLine.orderType>>,
And<SOLineSplit.pONbr, Equal<Current<POLine.orderNbr>>,
And<SOLineSplit.pOLineNbr, Equal<Current<POLine.lineNbr>>>>>>
SalesOrderLine;
protected virtual void _(Events.FieldUpdated<POLine, POLine.promisedDate> eventHandler, PXFieldUpdated baseHandler)
{
baseHandler?.Invoke(eventHandler.Cache, eventHandler.Args);
POLine pOLine = eventHandler.Row;
if (pOLine is null) return;
SOLine sOLine = SalesOrderLine.Current;
SOLineExtension sOLineExtension = sOLine.GetExtension<SOLineExtension>();
if (sOLine is null || sOLineExtension is null) return;
sOLineExtension.UsrPOPromisedDate = pOLine.PromisedDate;
SalesOrderLine.Update(sOLine);
}
}
}
您的代码中似乎有错误。
And<SOLineSplit.pONbr, Equal<Current<POLine.orderType>>,
如果您的意思是 SalesOrderLine.Current 为 null,我认为默认情况下不会填充当前字段,除非用户在视图中选择了特定记录(或者您手动设置它)。
如果您只是想获取视图中的记录,则需要使用 SalesOrderLine.Select()。
foreach(SOLine line in SalesOrderLine.Select()){
//Do Something Here
}
我正在尝试在更改 POLine 承诺日期时更新 SOLine (UsrPOPromisedDate) 上的自定义字段。下面是我的图形扩展,但是 SOLine 始终为空。 当我将 BQL 转换为 T-SQL 时,我得到了预期的返回结果。为什么我的视图总是返回空值?
using PX.Data;
using PX.KWW.MyProject.DAC;
using PX.Objects.PO;
using PX.Objects.SO;
namespace MyProject.Graph
{
public class POOrderEntryExt : PXGraphExtension<POOrderEntry>
{
public PXSelectJoin<
SOLine,
InnerJoin<SOLineSplit,
On<SOLineSplit.orderType, Equal<SOLine.orderType>,
And<SOLineSplit.orderNbr, Equal<SOLine.orderNbr>,
And<SOLineSplit.lineNbr, Equal<SOLine.lineNbr>>>>>,
Where<SOLineSplit.pOType, Equal<Current<POLine.orderType>>,
And<SOLineSplit.pONbr, Equal<Current<POLine.orderNbr>>,
And<SOLineSplit.pOLineNbr, Equal<Current<POLine.lineNbr>>>>>>
SalesOrderLine;
protected virtual void _(Events.FieldUpdated<POLine, POLine.promisedDate> eventHandler, PXFieldUpdated baseHandler)
{
baseHandler?.Invoke(eventHandler.Cache, eventHandler.Args);
POLine pOLine = eventHandler.Row;
if (pOLine is null) return;
SOLine sOLine = SalesOrderLine.Current;
SOLineExtension sOLineExtension = sOLine.GetExtension<SOLineExtension>();
if (sOLine is null || sOLineExtension is null) return;
sOLineExtension.UsrPOPromisedDate = pOLine.PromisedDate;
SalesOrderLine.Update(sOLine);
}
}
}
您的代码中似乎有错误。
And<SOLineSplit.pONbr, Equal<Current<POLine.orderType>>,
如果您的意思是 SalesOrderLine.Current 为 null,我认为默认情况下不会填充当前字段,除非用户在视图中选择了特定记录(或者您手动设置它)。
如果您只是想获取视图中的记录,则需要使用 SalesOrderLine.Select()。
foreach(SOLine line in SalesOrderLine.Select()){
//Do Something Here
}