1

在 Dynamics Ax 2009 中,我们需要根据同一个表中的另一个字段计算的字段。

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

为了锦上添花,他们希望它能够以两种方式发挥作用:

如果我们有 FieldA,计算并存储 FieldB。如果我们有 FieldB,计算并存储 FieldA。如果我们两者都有或没有,什么都不做。

Dynamics AX 中是否有任何内置功能可以帮助我?

4

2 回答 2

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();
}

这些只是示例,请使用您自己的判断方法应该如何被覆盖。最后, 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()

于 2011-05-03T10:35:44.100 回答
1

在此处查看另一个相关答案: 根据 Axapta 中修改的主表字段更改自动字段值

于 2011-05-03T06:58:46.657 回答