我在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;
}
}
}
谢谢!
答案 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
}
}
}
这就是我的头顶。如果您想在其他地方执行此操作,则可以将要计算的字段传递给属性。