在Dynamics Ax 2009中,我们想要一个基于同一个表中另一个字段计算的字段。
虽然使用显示方法或其他东西可能会很好,但我们必须实际存储值(管理是害怕动态计算,因为以前的产品使用它们并且速度很慢(就像AX中的任何东西都快!))。
为了把锦上添花,他们希望双向工作:
如果我们有FieldA,请计算并存储FieldB。 如果我们有FieldB,计算并存储FieldA。 如果我们同时拥有两者,则不执行任何操作。
Dynamics AX中是否有任何内容可以帮助我?
答案 0 :(得分:3)
首先,覆盖表的方法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();
}
这些只是示例,使用您自己的判断如何覆盖方法。最后,覆盖modifiedField()
,仅在表单中手动修改字段时使用{<1}}:
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();
}
P.S。请注意,当您使用insert()
,update()
或doinsert()
时,系统不会调用doupdate()
和skipDataMethods()
。
答案 1 :(得分:1)