Dynamics AXBR

Blog destinado a usuários do Dynamics AX no Brasil.
Options:

Dynamics AX 2009 - Liberado Service Pack 1

Ontem, dia 19/11, a MS liberou o SP1 para o DAX 2009.

Para verificar, acesso link: Você precisa ter acesso ao PartnerSource

Overview
Microsoft Dynamics® AX 2009 Service Pack 1 (SP1) contains the complete set of updates that Microsoft has issued since the June 2008 RTM release of Microsoft Dynamics® AX 2009, as well as a number of enhancements and new features to improve the product’s functionality and user experience.

NOTE: The majority of these fixes are specific to individual modules or workflows, and as such should not require a full re-evaluation cycle of Dynamics® AX 2009 SP1 at sites where the RTM version of the product is already under evaluation. Only incremental testing in the relevant areas may be required.

Other key highlights in this service pack release include:

SP1 includes enhancements to support future GLS releases and targeted releases, such as the Environmental Sustainability module, which will require an SP1 environment for installation.
Beginning with SP1, Microsoft Dynamics® AX 2009 also provides support for Microsoft SQL Server® 2008.
The SP1 installer updates both the SYS and GLS layers of the product. This means, for example, that if you already have GLS-TR installed on your system, SP1 will update this layer during the installation process.
Please refer to the What’s New Guide and Readme documents in the downloads section for additional important information regarding this Microsoft Dynamics® AX 2009 SP1 release.

O mais interessante é que o como a localização para o Brasil ainda não saiu, isto vai nos poupar trabalho, espero que a Microsoft libere a localização já atualizada e que não demorem mais por conta disso.

[]s



1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading ... Loading ...


Remover o “Ir para tabela principal”

Se por algum motivo quiser desabilitar o “Ir para o formulário principal” de um campo, basta comentar o super dentro do método jumpRef().

1
2
3
{ 
// super(); 
}

[]s



1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading ... Loading ...


Esconder o Painel de Conteúdo - DAX2009

As vezes aquele painel é um tanto quanto inconveniente, para esconde-lo, basta rodar o job abaixo:

1
2
3
4
5
6
7
8
9
10
11
12
13
 static void TEST_HideContentFrame(Args _args)
{
    #WinApi
    HWND contentPane =  WinApi::findWindowEx(
          WinAPI::findWindowEx(infolog.hWnd(), 0, 'MDIClient', ''), 
          0, 
          'ContentFrame',
          ''
    );
;
    if (contentPane)
        WinApi::ShowWindow(contentPane, #SW_HIDE);
}

[]s



1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading ... Loading ...


Comentando o código

Caros,
Uma coisa que vejo que cada vez mais precisamos é comentar as alterações no código, por conta disso, fui atrás de uma maneira fácil de comentar, de preferencia usando apenas o mouse ou sei lá, e foi ai que encontrei uma solução que já havia visto há algum tempo atrás, ela consiste em escrever métodos prefixados com um prefixo qualquer, seguido de um underline “_” e ai o nome do objeto comentário, vamos ver o exemplo abaixo:

1
2
3
4
5
6
7
8
9
10
11
12
13
void DAXBR_Checkin(Editor e)
{
    int startLine = e.selectionStartLine();
    int endLine   = e.selectionEndLine();
    ;
 
    e.gotoCol(1);
    e.unmark();
    e.gotoLine(startline);
    e.insertLines('// '+strUpr(enum2str(currentAOLayer()))+'-Modificação feita em ' + date2str(today(),123,2,1,3,1,4 ) + ' por ' + curUserId() + ' - Começo\n');
    e.gotoLine(endline+2);
    e.insertLines('// '+strUpr(enum2str(currentAOLayer()))+'-Modificação feita em ' + date2str(today(),123,2,1,3,1,4 ) + ' por ' + curUserId() + ' - Fim\n');
}

Esse método deverá ser adicionado na classe EditorScripts e para usar você pode fazer de duas formas, a primeira e que eu mais uso é:
Faço o que tenho que fazer, seleciono tudo que fiz e clico com o botão direito, navego até o item Scripts, localizo o DAXBR e ai escolho o Checkin.

A outra forma é simplesmente acessando o mesmo lugar só que antes de começar o código! ;)

Hugs from Österreich!
Umarmt aus Österreich! kkkkk

[]s



1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading ... Loading ...


“Máscara” no FormControl Date

Outro dia me perguntaram como criar máscaras nos campos das forms.

Não sei ao certo até onde o AX cria máscaras no formcontrol. Minha resposta ontem seria - não existe propriedade de máscaras para formcontrol. Mas, estava muito enganado - existem parâmetros de “máscara” no formcontrol do tipo date.

Acessando as propriedades via MorphX:


Para acessar essas propriedades via X++:

...
//classdeclaration do form
FormDateControl datecontrol;
...
//no método init do form
datecontrol = this.Form().design().addControl(FormControlType::Date,'datecontrol');
 
//aqui começam as propriedades.
datecontrol.dateFormat(5);
datecontrol.dateSeparator(2);
datecontrol.dateYear(5);
datecontrol.dateMonth(5);
datecontrol.dateDay(4);
 
super();
...

Exemplo da aplicação dessas propriedades:

Até a próxima =)

Abraços



1 Star2 Stars3 Stars4 Stars5 Stars (1 votes, average: 5 out of 5)
Loading ... Loading ...


Adicionar Campo em uma Tabela via X++

Caros,
Navegando por ai, encontrei como adicionar um campo à uma tabela, para isso, segue o pequeno job abaixo que adicionará o campo string a tabela _tbTeste já existente.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
static void createFieldFromCode(Args _args)
{
    #AOT
    TreeNode                tableNode;
    AotTableFieldList       myAOTTablefieldList;
    SysDictTable            sysDictTable    = new SysDictTable(tablenum(_tbTeste));
    ;
 
    if (! hasSecuritykeyAccess(securitykeynum(SysDevelopment), AccessType::View))
        return;
 
    myAOTTablefieldList = new AotTableFieldList();
    tableNode = TreeNode::findNode(#TablesPath+'\\'+sysDictTable.name());
    myAOTTablefieldList = TreeNode::findNode(#TablesPath+'\\'+sysDictTable.name() + "\\Fields");
 
    if(!myAOTTablefieldList.AOTfindChild("daxbr"))
        myAOTTablefieldList.addString("daxbr");
 
    tableNode.AOTsave();
}

Fonte.

[]s
Ricardo Pichler



1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading ... Loading ...


Importar Ceps

Caros,
Este artigo é na verdade apenas para publicar uma ferramenta que faz a leitura da base de ceps mdb e puxa para dentro do AX, para rodá-la, basta abrir a classe e executar (F5). Dependendo do servidor / maquina pode levar mais de uma hora o processo todo! No meu notebook eu fiz e levou algo em torno de 40 minutos.

Caso queiram alterar o fonte, fiquem tranquilos, o ideal seria que a medida que forem melhorando o mesmo, nos avisem para que possamos melhorar o arquivo que temos aqui no site.

Gostaria de agradecer ao amigo Luiz Fernando Ramos que fez uma versão e me mandou pra dar uma olhada e também ao meu amigo Rodrigo Fraga que impulsinou a criação do script, se não fosse ele eu não teria feito nada ainda! kkkkkk

Clique aqui para fazer o download da classe.

Abraços,
Ricardo Pichler



1 Star2 Stars3 Stars4 Stars5 Stars (1 votes, average: 5 out of 5)
Loading ... Loading ...


Inserir múltiplos registros em uma tabela

Hoje eu estava trabalhando em um job para importação da base de dados de ceps e me deparei com o problema de cada .insert() ou .doIsert() o kernel do AX faz uma requisição ao banco de dados, o que torna o processo muito lento.

Conversando com o meu ‘cumpadi’ Fraga, ele me perguntou porque eu não testava um tal de RecordInsertList, que talvez o tempo baixasse!

Pois bem, fiz um teste lendo um access e inserindo 10.000 registros em uma tabela do ax, vejam vocês mesmos a diferença:

Usando RecordInsertList:
Início: 05:10:12 pm
Fim: 05:11:45 pm
Tempo total: 1 minuto e 37 segundos
Inseridos 13.967 registros.

Método convenciona (.insert()):
Início: 16:50:53
Fim: 16:53:01
Tempo total: 2 minutos e 8 segundos
Inseridos 13.967 registros.

Mais estatisticas:
Início: 05:43:47 pm
Fim: 06:50:22 pm
Tempo total: 1 hora 6 minutos e 25 segundos
Inseridos 633.464 registros.

Código:

1
2
3
4
5
6
7
8
9
10
11
12
13
{
  RecordInsertList recordList; 
  CustTable custtable;
  ;  
  recordList= new RecordInsertList(tableNum(custtable));
  while select .......
  {
    custTable.nome = ".....";
    custTable.address = ".....";
    recordList.add(custTable);
  }  
  recordList.insertDatabase();
}

Créditos:
Ricardo Pichler
Rodrigo Fraga



1 Star2 Stars3 Stars4 Stars5 Stars (1 votes, average: 5 out of 5)
Loading ... Loading ...


Base de ceps para download

Caros,
Disponibilizei no endereço http://pichler.4shared.com 4 arquivos que compõe a base de dados de CEPs.

Estamos pensando (eu e o Rodrigo Fraga) em fazer uma aplicação em X++ que leia a base e importe para o AX, mas o grande problema é o tempo que esse processo levaria.

Vamos continuar lapidando a idéia e ai voltamos a postar caso dê certo!

[]s
Ricardo Pichler



1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading ... Loading ...


Sharepoint e Windows Vista

Eu ainda não testei, mas o pessoal da bamboosolutions diz que consegue instalar o SharePoint em um Vista pra não termos mais que ficar usando VMs ou fazendo testes em servidores.

Vou testar essa semana no meu Vista x64, mas quem quiser adiantar, ta ai o link!

http://community.bamboosolutions.com/blogs/bambooteamblog/archive/2008/05/21/how-to-install-windows-sharepoint-services-3-0-sp1-on-vista-x64-x86.aspx

Abração,
Ricardo Pichler



1 Star2 Stars3 Stars4 Stars5 Stars (2 votes, average: 4.5 out of 5)
Loading ... Loading ...