Olá a todos, No X++, a exemplo de outras linguagens, também utiliza blocos try e catch para tratar exceções, ou seja, para tratar uma situação que normalmente não ocorre e representa algo de estranho ou inesperado no sistema. Por isso observe o código abaixo e tente visualizar o que eh exibido no final de sua execução. No infolog aparece a mensagem Compra. Com isso em mente podemos expandir o exemplo para algo mais representativo, algo que atenda as necessidades de nossas customizações. Por exemplo: Onde IOException é um novo Enum Type e FileOpenException é um de seus Elements. Lembrando que o bloco catch poderia muito bem estar em um escopo superior. Para dar continuidade a este desenvolvimento de exceções, também se poderia criar classes especialistas para cuidar da exception, assim como a classe Error que está na AOT. Dessa forma teríamos uma classe IOException com um método FileOpenException que se responsabilizará por finalizar o processamento de forma segura para a aplicação.
Por default o Ax traz a enum Exception com os tipos fixos de exceção que poderiam ocorrer. Mas ela pode ser considerada insuficiente para determinados casos ou determinadas customizações.
public static void ErrorTest(Args _args)
{;
Try
{
throw SalesPurch_BR::Purch;
info("Sem exception");
}
catch(Salespurch_BR::Sales)
{
info(enum2value(SalesPurch_BR::Sales));
}
catch(Salespurch_BR::Purch)
{
info(enum2value(SalesPurch_BR::Purch));
}
}Public void open(FileName _fileName)
{
container openRecord;
;
Try{
file = CustVendOutPaym::newFile(_filename, 'w', 'CommaIO');
if (!file || file.status() != IO_Status::Ok)
{
throw IOException::FileOpenException;
}
openRecord = conins(openRecord,1,'Open Statement');
}
catch(IOException::FileOpenException)
{
error(strfmt("@SYS75767",_filename));
}
}
terça-feira, 1 de setembro de 2009
Tratamento de Exceção
Assinar:
Postar comentários (Atom)
3 comentários:
my hero!
take a look:
http://www.daxbr.com.br/?p=1093
Oq rege as exceptions no AX são os numeros inteiros, assim como no C++.
Então não se limita a enums, e sim aos inteiros em geral. Com certeza tem gente que consegue achar utilidade para isso hehe.
Testa isso e veja o output:
static void Job1(Args _args)
{
;
try
{
throw 1.3;
}
catch(0)
{
info('erro 0');
}
catch(1)
{
info('erro 1');
}
catch(1.3)
{
info('erro 1.3');
}
catch
{
info('erro generico');
}
}
Postar um comentário