terça-feira, 18 de junho de 2019

Prefix não é respeitado quando chamado por AxClasses

Precisei desenvolver uma integração que gera Ordens de Vendas no AX. Para isto utilizei a classe AxSalesTable, chamando o constructValidateInput. O validateInput valida as informações passadas para a classe, no momento em que for tentado executar o save na salesTable.

Abaixo, a maneira a qual o objeto foi instanciado:

axSalesTable = AxSalesTable::constructValidateInput(salesTable);

O meu problema ocorreu no momento em que os dados eram validados, na árvore do Infolog, com a execução em CIL habilitada:

Percebam que o resultado do validateFieldValue da SalesTable, ficou fora do nível correto na árvore. 

Quando executado em X++, a árvore era montada corretamente:


Como neste caso eu não tinha acesso ao validateFieldValue da classe xRecord, sobrescrevi o método na SalesTable, da seguinte forma:

public server boolean validateFieldValue(FieldName _fieldName, int _arrayIndex = 1)
{
    boolean ret;
    str infoOld;
    str infoNew;
    boolean isCLRSession;
    isCLRSession = xSession::isCLRSession();
    if (isCLRSession)
    {
        infoOld = infolog.text(Global::infologLine());
    }
    ret = super(_fieldName, _arrayIndex);

    if (isCLRSession)
    {
        infoNew = infolog.text(Global::infologLine());
        if(infoOld != infoNew)
        {
            infolog.cut(Global::infologLine(),Global::infologLine());
            Global::warning(infoNew);
        }
    }
   
    return ret;
}

Com isso o prefix voltou a ser respeitado no validateFieldValue, quando executado em CIL!