Можно ли рассчитать поле на основе другого поля? - PullRequest
1 голос
/ 03 мая 2011

В Dynamics Axe 2009 нам нужно поле, которое будет рассчитываться на основе другого поля в той же таблице.

Хотя было бы неплохо использовать метод отображения или что-то еще, нам нужно на самом деле сохранитьvalue (руководство боится динамических вычислений, потому что предыдущий продукт использовал их и работал медленно (как в AX все быстро!)).

Чтобы положить глазурь на торт, они хотят, чтобы он работал в двух направлениях:

Если у нас есть FieldA, рассчитать и сохранить FieldB.Если у нас есть FieldB, рассчитайте и сохраните FieldA.Если у нас есть оба или нет, ничего не делать.

Есть ли что-то встроенное в Dynamics AX, которое может мне помочь?

Ответы [ 2 ]

3 голосов
/ 03 мая 2011

Сначала переопределите метод таблицы 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(), который будет использоваться только тогда, когда поля изменяются вручную в формах:

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() и update() не вызываются при использовании doinsert(), doupdate() или skipDataMethods().

1 голос
/ 03 мая 2011
...