在 Dynamics Ax 2009 中,我们需要根据同一个表中的另一个字段计算的字段。
尽管使用显示方法或其他东西可能很好,但我们必须实际存储值(管理害怕动态计算,因为以前的产品使用它们并且速度很慢(就像 AX 中的任何东西都很快!))。
为了锦上添花,他们希望它能够以两种方式发挥作用:
如果我们有 FieldA,计算并存储 FieldB。如果我们有 FieldB,计算并存储 FieldA。如果我们两者都有或没有,什么都不做。
Dynamics AX 中是否有任何内置功能可以帮助我?
在 Dynamics Ax 2009 中,我们需要根据同一个表中的另一个字段计算的字段。
尽管使用显示方法或其他东西可能很好,但我们必须实际存储值(管理害怕动态计算,因为以前的产品使用它们并且速度很慢(就像 AX 中的任何东西都很快!))。
为了锦上添花,他们希望它能够以两种方式发挥作用:
如果我们有 FieldA,计算并存储 FieldB。如果我们有 FieldB,计算并存储 FieldA。如果我们两者都有或没有,什么都不做。
Dynamics AX 中是否有任何内置功能可以帮助我?
首先,覆盖表的方法insert()
,例如:
public void insert()
{
;
this.FieldB = this.FieldA * 2;
super();
}
然后覆盖update()
,例如:
public void update()
{
if (this.FieldA == this.orig().FieldA && this.FieldB != this.orig().FieldB)
{
this.FieldA = this.FieldB / 2;
}
else
{
this.FieldB = this.FieldA * 2;
}
super();
}
这些只是示例,请使用您自己的判断方法应该如何被覆盖。最后, override modifiedField()
,仅在表单中手动修改字段时使用:
public void modifiedField(fieldId _fieldId)
{
;
super(_fieldId);
switch (_fieldId)
{
case fieldnum(MyTable, FieldA) :
this.FieldB = this.FieldA * 2;
break;
case fieldnum(MyTable, FieldB) :
this.FieldA = this.FieldB / 2;
break;
}
if (this.isFormDataSource())
this.dataSource().refresh();
}
PS 请记住,当您使用,或时不会调用insert()
and 。update()
doinsert()
doupdate()
skipDataMethods()
在此处查看另一个相关答案: 根据 Axapta 中修改的主表字段更改自动字段值