[AX 2012] FactBoxes e Preview Panels

Caros,
Eu montei um AX 2012 para meus estudos e estava incomodado com a demora para abrir formulários, e pesquisando vi que podemos desabilitar os factboxes e também os previews, que são bastante uteis no entanto ‘custam caro’ quando o assunto é performance. Eu particularmente passei a trabalhar com eles desativados e ai cabe a cada um escolher a melhor forma.

A forma para desativar e testar é só ir em System Administration -> Setup -> System -> Client Performance Options e desmarcar o que não quiser mais visualizar.

Obs.: O Francisco escreveu uma série de artigos de performance, pesquisando eu até encontrei um post dele que fala disso com mais detalhes, e pode ser acessado aqui: Dicas para melhorar a performance do AX2012 R2!

Abração,
Pichler





Caros,
Mexendo no artigo anterior eu achei duas novas implementações que são os métodos strCapital e strCapitalWord, vejam o funcionamento de ambos:

1
2
3
4
5
6
static void Job1(Args _args)
{
    ;
    info(str2Capital("la lala lalala"));      //produz La lala lalala
    info(str2CapitalWord("la lala lalala"));  //produz La Lala Lalala
}

Abraço,
Pichler





[AX 2012] Criando propriedades a partir de um texto selecionado

Caros,
Frequentemente temos que criar métodos do tipo ‘parm’ no DAX via X++ e toda vez é sempre a mesma coisa, criamos a classe, as variáveis e etc… O próximo passo é criar os métodos para que essas propriedades possam ser atribuídas / lidas, e hoje, ao presenciar essa situação novamente eu resolvi criar um script que gera pra mim os métodos dentro da minha classe a partir do Class Declaration. Vamos ao exemplo.

A primeira coisa a se fazer é criar o método que irá tratar o meu texto selecionado, para isso:

Na classe EditorScripts crie um novo método com a estrutura:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
public void template_method_createAllParms(Editor editor)
{
    Source          template = "public %1 parm%3(%1 _%2 = %2)\r\n{\r\n    ;\r\n    %2 = _%2;\r\n    return %2;\r\n}";
    str             parmOne, parmTwo;
    int             spacePosition;
    List            linesToCreate = new List(Types::String);
    List            parmsToCreate = new List(Types::String);
    ListEnumerator  listEnum;
    str             currentLine;
 
    ClassBuild      obj;
    TreeNode        parent = TreeNode::findNode(SysTreeNode::pathParent(editor.path()));
    ;
 
    linesToCreate = strSplit(EditorScripts::getSelectedText(editor), '\r\n');
 
 
    if(linesToCreate)
    {
        listEnum = linesToCreate.getEnumerator();
        while(listEnum.moveNext())
        {
            currentLine = strLTrim(listEnum.current());
            if(currentLine)
            {
                spacePosition = strScan(currentLine, " ", 1, strLen(currentLine));
                parmOne = subStr(currentLine, 0, (spacePosition - 1));
                parmTwo = strLTrim(strRTrim(subStr(currentLine, spacePosition, strLen(currentLine))));
                parmTwo = subStr(parmTwo, 0, strLen(parmTwo) -1);
                parmsToCreate.addEnd(strFmt(template, parmOne, parmTwo, str2Capital(parmTwo)));
            }
        }
    }
 
    if(parmsToCreate)
    {
        listEnum = parmsToCreate.getEnumerator();
        obj = new ClassBuild(parent.AOTname(), true);
        while(listEnum.moveNext())
        {
            currentLine = strLTrim(listEnum.current());
            obj.addMethod('name', listEnum.current());
            obj.classNode().AOTcompile();
        }
    }
}

O segundo passo é criar a classe com as variáveis:

1
2
3
4
5
6
7
8
class Class1
{
    str             StringOne;
    int             IntOne;
    real            RealOne;
    date            DateOne;
    NoYes           NoYesEnum;
}

Agora que já temos tudo o que precisávamos, vamos ao funcionamento!

1 -> Abra o ClassDeclaration da classe criada acima;
2 -> Selecione as variáveis que quer criar as propriedades;
3 -> Clique com o botão direito e seguir o caminho: Scripts -> Template -> Method -> CreateAllParms.

Capture

Espere o processo terminar, e no final sua classe ficará assim:

fdsaf

Considerações:

  • Eu não fiz essa classe me preocupando com o que há de mais ‘bonito’ a ser feito, foi algo que me atendeu bem e acredito que atenderá a maioria dos desenvolvedores;
  • Foi feita já em AX 2012 e pode ser usada em qualquer outra versão;
  • Se quiser melhorá-la, fique a vontade, se puder me enviar depois é melhor ainda.

Abração,
Pichler





Caros,
Estava com problemas para trabalhar / apresentar soluções na VPC fornecida pela Microsoft, a mensagem “Failed to create a session; confirm that the user has the proper privileges to log on to Microsoft Dynamics” era exibida e eu não conseguia mais seguir em frente.

Pesquisando, achei diversas propostas para resolver, umas bem complexas e outras simples, e foi uma super simples que funcionou. Para este caso específico, basta desabilitar a opção: Execute business operations in CIL, que fica em: Tools > Options > Development > Execute business operations in CIL.

Essa opção faz com que código que tipicamente seria executado pelo CIL volte a ser interpretado, vejam:
Durante o desenvolvimento quando você frequentemente irá fazer modificações e retestar, algumas vezes é mais conveniente debugar código X++ no modo interpretado! Fonte: http://msdn.microsoft.com/en-us/library/hh528509.aspx

Pasmem vocês, eu achei utilizando a super ferramenta de buscas chamada Bing! Que meu amigo André Hociko insiste em tentar convencer meu outro amigo Daniel Zanni a usar!

Abraço,
Pichler





[AX 2012] Database Entity Relationship Diagrams

Caros,
Mais uma dica no nosso amigo Humberto Santiago! Façam bom proveito!

Microsoft Dynamics AX 2012 R2 Database Entity Relationship Diagrams

[]s
Pichler





Tags / Categorias

RSS



Arquivo

Dynamics Community