我有点迷失在SOLINEExt上从我的usr字段获取聚合值的方法。我的目标是用户字段的简单聚合,该聚合基于来自SOLine的这个值:
itemExt.UsrMinutes * (int)row.OrderQty;
在SOLineExt中,上面的值存储在UsrMultByQuant中,它得到的值很好,但我似乎无法聚合SOLineExt值以将UsrMultByQuant的总数加入到我的SOOrder字段中,称为UsrTotalWorkMinutes
[PXDBInt]
[PXUIField(DisplayName="TotalWorkMinutes")]
[PXFormula(null, typeof(SumCalc<SOLineExt.usrMultByQuant>))]
public virtual int? UsrTotalWorkMinutes{get;set;}
public abstract class usrTotalWorkMinutes : IBqlField{}
我正在引用T200第7课,我也试图实现一个字段选择(按照t300第11课中的说明)尝试从SOLINEExt表中获取我的总usr字段值但没有成功。
感谢任何建议,谢谢
编辑:
我从PXformula中删除了null,我现在收到此错误。
我还稍微修改了dac以使用PXParent属性来选择当前的SOLine
[PXDBInt]
[PXUIField(DisplayName="TotalWorkMinutes")]
[PXFormula(typeof(SumCalc<SOLineExt.usrMultByQuant>))]
[PXParent(typeof(Select<SOLine,
Where<SOLine.orderNbr, Equal<Current<SOOrder.orderNbr>>>>))]
public virtual int? UsrCuryWorkMinutes{get;set;}
public abstract class usrCuryWorkMinutes : IBqlField{}
仍然没有累计我的SOLINEExt值,并且在删除null时我收到了上述错误。
答案 0 :(得分:0)
下面的2个扩展类应该足以实现所请求的行为(通知,字段UsrCuryWorkMinutes和UsrMultByQuant是十进制类型):
public class SOOrderExt : PXCacheExtension<SOOrder>
{
public abstract class usrCuryWorkMinutes : IBqlField { }
[PXDBDecimal(2)]
[PXUIField(DisplayName = "Total Work Minutes")]
public virtual decimal? UsrCuryWorkMinutes { get; set; }
}
public class SOLineExt : PXCacheExtension<SOLine>
{
public abstract class usrMinutes : IBqlField { }
[PXDBInt]
[PXUIField(DisplayName = "Work Minutes")]
public virtual int? UsrMinutes { get; set; }
public abstract class usrMultByQuant : IBqlField { }
[PXDBDecimal(2)]
[PXUIField(DisplayName = "Total Work Minutes", Enabled = false)]
[PXFormula(typeof(Mult<IsNull<SOLine.orderQty, decimal0>, SOLineExt.usrMinutes>),
typeof(SumCalc<SOOrderExt.usrCuryWorkMinutes>))]
public virtual decimal? UsrMultByQuant { get; set; }
}
SOLINEExt中不需要PXParentAttribute,因为已经使用PXParentAttribute修饰的原始SOLine.OrderNbr字段聚合了从SOLine到SOOrder的其他值:
[System.SerializableAttribute()]
[PXCacheName(Messages.SOLine)]
public partial class SOLine : PX.Data.IBqlTable, ILSPrimary, IDiscountable, ISortOrder
{
...
#region OrderNbr
public abstract class orderNbr : PX.Data.IBqlField
{
}
protected String _OrderNbr;
[PXDBString(15, IsUnicode = true, IsKey = true, InputMask = "")]
[PXDBDefault(typeof(SOOrder.orderNbr), DefaultForUpdate = false)]
[PXParent(typeof(Select<SOOrder, Where<SOOrder.orderType, Equal<Current<SOLine.orderType>>, And<SOOrder.orderNbr, Equal<Current<SOLine.orderNbr>>>>>))]
[PXUIField(DisplayName = "Order Nbr.", Visible = false, Enabled = false)]
public virtual String OrderNbr
{
...
}
#endregion
...
}