usrField SOLine 的聚合值不起作用
Aggregate value of usrField SOLine not working
我对从 SOLineExt 上的 usr 字段获取聚合值的方法有点迷茫。我的目标是基于 SOLine 中的此值对用户字段进行简单聚合:
itemExt.UsrMinutes * (int)row.OrderQty;
在 SOLineExt 中,上面的值存储在 UsrMultByQuant 中,它可以很好地获取值,但我似乎无法聚合 SOLineExt 值以将 UsrMultByQuant 的总和放入我名为 UsrTotalWorkMinutes 的 SOOrder 字段中
[PXDBInt]
[PXUIField(DisplayName="TotalWorkMinutes")]
[PXFormula(null, typeof(SumCalc<SOLineExt.usrMultByQuant>))]
public virtual int? UsrTotalWorkMinutes{get;set;}
public abstract class usrTotalWorkMinutes : IBqlField{}
我参考了 T200 第 7 课,我还尝试实现一个字段selecting(按照 t300 中第 11.8 课的说明)尝试使用该方法从 SOLineExt table 没有成功。
欢迎任何建议,谢谢
编辑:
我从 PXformula 中删除了空值,现在收到此错误。
我还稍微修改了 dac,使 PXParent 属性为 select 当前 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 后我收到了上述错误。
下面的 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,因为原始的 SOLine.OrderNbr 字段已经用 PXParentAttribute 修饰以聚合从 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
...
}
我对从 SOLineExt 上的 usr 字段获取聚合值的方法有点迷茫。我的目标是基于 SOLine 中的此值对用户字段进行简单聚合:
itemExt.UsrMinutes * (int)row.OrderQty;
在 SOLineExt 中,上面的值存储在 UsrMultByQuant 中,它可以很好地获取值,但我似乎无法聚合 SOLineExt 值以将 UsrMultByQuant 的总和放入我名为 UsrTotalWorkMinutes 的 SOOrder 字段中
[PXDBInt]
[PXUIField(DisplayName="TotalWorkMinutes")]
[PXFormula(null, typeof(SumCalc<SOLineExt.usrMultByQuant>))]
public virtual int? UsrTotalWorkMinutes{get;set;}
public abstract class usrTotalWorkMinutes : IBqlField{}
我参考了 T200 第 7 课,我还尝试实现一个字段selecting(按照 t300 中第 11.8 课的说明)尝试使用该方法从 SOLineExt table 没有成功。
欢迎任何建议,谢谢
编辑:
我从 PXformula 中删除了空值,现在收到此错误。
[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 后我收到了上述错误。
下面的 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,因为原始的 SOLine.OrderNbr 字段已经用 PXParentAttribute 修饰以聚合从 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
...
}