Ola pessoal, Depois de apanhar um pouquinho para conseguir utilizar uma API para impressora fiscal BEMATECH, descobri pesquisando no próprio AX (Classe WinAPI) que é possível utilizar ponteiros para pegar o valor de uma variável passada por referencia. No Ax 2009 já existe o KeyWord byRef postado no Blog Dynamics AX
Segue o exemplo simplório a baixo:
static void Ponteiro_DynamicsAX(Args _args)
{
#define.TamanhoPonteiro(255)
str StringTeste;
binary Ponteiro = new Binary(#TamanhoPonteiro);
boolean funcPonteiro(Binary _ReturnPointer)
{
_ReturnPointer.string(0,'TESTE');
return true;
}
;
if (funcPonteiro(Ponteiro))
{
StringTeste = Ponteiro.string(0);
}
INFO(StringTeste);
}
terça-feira, 8 de setembro de 2009
Ponteiros no Dynamics AX
Postado por Marcos Kolbe às 11:49 0 comentários
Marcadores: x++
terça-feira, 1 de setembro de 2009
Tratamento de Exceção
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));
}
}
Postado por Anônimo às 20:09 3 comentários
Marcadores: x++