可以根据另一个字段计算字段吗?

时间:2011-05-03 03:05:52

标签: dynamics-ax-2009 axapta

在Dynamics Ax 2009中,我们想要一个基于同一个表中另一个字段计算的字段。

虽然使用显示方法或其他东西可能会很好,但我们必须实际存储值(管理是害怕动态计算,因为以前的产品使用它们并且速度很慢(就像AX中的任何东西都快!))。

为了把锦上添花,他们希望双向工作:

如果我们有FieldA,请计算并存储FieldB。 如果我们有FieldB,计算并存储FieldA。 如果我们同时拥有两者,则不执行任何操作。

Dynamics AX中是否有任何内容可以帮助我?

2 个答案:

答案 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)