O http://www.doens.be publicou este artigo e vou traduzi-lo aqui, é bastante útil!

Quando você quiser implementar sequências numéricas nos seus formulários no AX para por exemplo criar um ID sequencial, você só precisar implementar ‘numberSeqFormHandler‘.

Passo a passo:

Defina um objeto do tipo ‘NumberSeqFormHandler’ no ClassDeclaration do formulário:

1
2
3
4
public class FormRun extends ObjectRun
{
    NumberSeqFormHandler            numberSeqFormHandler;
}

Crie um novo método no seu formulário que que instâncie seu objeto ou apenas retorne-o.

1
2
3
4
5
6
7
8
9
10
11
NumberSeqFormHandler numberSeqFormHandler()
{
    ;
    if (!numberSeqFormHandler)
        numberSeqFormHandler = NumberSeqFormHandler::newForm(TestParameters::numRefTEST().NumberSequence,
                                                             element,
                                                             TestTable_DS,
                                                             fieldnum(TestTable,TEST)
                                                            );
    return numberSeqFormHandler;
}

Siga os passos abaixo adicionando as duas linhas no método create do datasource:

1
2
3
4
5
6
7
public void create(boolean _append = false)
{
    ;
    element.numberSeqFormHandler().formMethodDataSourceCreatePre();
    super(_append);
    element.numberSeqFormHandler().formMethodDataSourceCreate();
}

Agora no método delete do datasource:

1
2
3
4
5
6
public void delete()
{
    ;
    element.numberSeqFormHandler().formMethodDataSourceDelete();
    super();
}

Agora no método write, que é quando o usuário insere um novo registro ou atualiza:

1
2
3
4
5
6
7
8
public void write()
{
    ;
    ttsbegin;
    super();
    element.numberSeqFormHandler().formMethodDataSourceWrite();
    ttscommit;
}

Agora no validatewrite, que é quando um registro está para ser inserido ou atualizado:

1
2
3
4
5
6
7
8
public boolean validateWrite()
{
    boolean ret;
    ;
    ret = super();
    ret = element.numberSeqFormHandler().formMethodDataSourceValidateWrite(ret) && ret;
    return ret;
}

Agora no linkactive que é quando o usuário seleciona um registro do datasource que está relacionado a outro registro de outro datasource.

1
2
3
4
5
6
public void linkActive()
{
    ;
    element.numberSeqFormHandler().formMethodDataSourceLinkActive();
    super();
}

E por último, no close, quando o formulário é fechado:

1
2
3
4
5
6
7
public void close()
{
    ;
    if (numberSeqFormHandler)
        numberSeqFormHandler.formMethodClose();
    super();
}

[]s
Pichler