usrField SOLine的聚合值不起作用

时间:2017-06-19 16:28:34

标签: acumatica

我有点迷失在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,我现在收到此错误。 enter image description here 我还稍微修改了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时我收到了上述错误。

1 个答案:

答案 0 :(得分:0)

下面的2个扩展类应该足以实现所请求的行为(通知,字段UsrCuryWorkMinutes和UsrMultByQuant是十进制类型):

enter image description here

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
    ...
}