我对 Acumatica 世界很陌生。我接到的任务是向 SOLine 添加一个字段,该字段将显示给定 SOLine 上相同库存项目在未来 30 天内要发货的数量总和。请求是在一般查询中提供该字段。
我已经创建了一个 DAC 扩展,并认为一个带有 PXDBScalar 的字段应该可以做到。
但是,当我将该字段添加到通用查询时,显示的所有记录的值都相同。就好像在尝试查询同一个表时,它只使用项目的聚合值之一,而不是为 GI 中显示的每个项目/行重新计算。
我在 PXDBScalar 公式中做错了什么吗?我是否缺少对当前记录的引用?
namespace PX.Objects.SO
{
public class SOLineExt : PXCacheExtension<PX.Objects.SO.SOLine>
{
#region DaysOf
public class int_DaysInFuture : PX.Data.BQL.BqlInt.Constant<int_DaysInFuture>
{
public int_DaysInFuture()
: base(30)
{
}
}
#endregion
#region UsrSalesInNextThirtyDays
public abstract class usrSalesInNextThirtyDays : PX.Data.IBqlField {}
[PXDecimal(2)]
[PXUIField(DisplayName="Sales in next 30 days")]
[PXDBScalar(typeof(Search4<SOLine.openQty,
Where<SOLine.inventoryID, Equal<SOLine.inventoryID>
,And< Where<DateDiff<SOLine.shipDate, Today, DateDiff.day>, LessEqual< int_DaysInFuture > >>
>
,Aggregate<GroupBy<SOLine.inventoryID, Sum<SOLine.openQty>>>
>))]
public virtual Decimal? UsrSalesInNextThirtyDays{ get; set; }
#endregion
}
}
因此,添加此字段表明与 InventoryItem 的链接按预期工作。
#region UsrSalesInNextThirtyDays2
public abstract class usrSalesInNextThirtyDaysTwo : PX.Data.IBqlField {}
[PXDecimal(2)]
[PXUIField(DisplayName="Base Price")]
[PXDBScalar(typeof(Search<InventoryItem.basePrice,
Where<InventoryItem.inventoryID, Equal<SOLine.inventoryID>>
>))]
public virtual Decimal? UsrSalesInNextThirtyDaysTwo{ get; set; }
#endregion
因此,我尝试添加一个内部联接以使用inventoryID 字段强制该行到 InventoryItem,但结果查询仍然返回最后一个项目的总和,作为结果集中所有记录的总和结果。
public abstract class usrSalesInNextThirtyDays : PX.Data.IBqlField {}
[PXDecimal(2)]
[PXUIField(DisplayName="Sales in next 30 days")]
[PXDBScalar(typeof(
Search5<SOLine.openQty,
InnerJoin<InventoryItem,
On<SOLine.inventoryID, Equal<InventoryItem.inventoryID>>>,
Where<DateDiff<SOLine.shipDate, Today, DateDiff.day>, LessEqual< int_DaysInFuture > >,
Aggregate<Sum<SOLine.openQty>>
>))]
public virtual Decimal? UsrSalesInNextThirtyDays{ get; set; }
我觉得我离强迫 DAC 生成正确的查询越来越近了,但我还没有到那里。
由于子查询的生成方式,您不能以这种方式以循环方式引用该表。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句