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++
 
 
 