如何计算相关表中的记录并允许用户覆盖

时间:2019-01-30 23:25:10

标签: acumatica

我在CRActivity表上有一个自定义字段,需要在其中存储相关表中的记录数。我试图在屏幕CR306030打开时将该字段设置为该值。用户需要能够覆盖计算出的数字,因此,我认为我需要在计算时检查自定义字段是否大于0的逻辑,在这种情况下,请勿填充自定义字段并假定它已经组。

以前,我曾尝试在Field_Selecting事件中执行此操作,但是此操作不起作用。我在想也许可以使用PXFormula属性。有什么建议吗?

我尝试制作一个接近的自定义属性,但不会将值保存到数据库中。 “保存”按钮启用,我可以单击它,看起来好像已保存但没有骰子。我敢肯定,有些世俗的细节。

这是我的自定义属性:

public class CFCountIfZeroAttribute : PXIntAttribute
{
    public override void FieldSelecting(PXCache cache, PXFieldSelectingEventArgs e)
    {
        if (e.Row == null)
            return;

        CRActivity activity = (CRActivity)e.Row;
        CRActivityExt activityExt = activity.GetExtension<CRActivityExt>();
        if (activityExt.usrCustomField <= 0)
        {
                int aggregateValue = BQLToFind();
                e.ReturnValue = aggregateValue;
                cache.SetValue<CRActivityExt.usrCustomField>(e.Row, aggregateValue);
                cache.IsDirty = true;

        }
    }


}

谢谢!

1 个答案:

答案 0 :(得分:1)

我认为我从未在PXFormula中进行过计数,但是如果您创建了自定义属性会怎样?

[DBUIInt()]
[EditableCount()]
public virtual int? CountField

public class EditableCountAttribute
{
    public override void FieldSelecting(PXCache sender, PXFieldSelectingEventArgs e)
    {
        if (e.Row != null)
        {
            //if CountField is 0, lookup the count from another table
        }
    }
}

这就是我的头顶。如果您想在其他地方执行此操作,则可以将要计算的字段传递给属性。