24 Jun 2013
Posted by: Ricardo Pichler in: X++
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.
Espere o processo terminar, e no final sua classe ficará assim:
Considerações:
Abração,
Pichler
3 Responses
Lucas Clemente
25|Jun|2013 1Sensacional Pichler, com ctza economiza muitoooo o tempo de desenvolvimento e criação de parms.
Abs
Diego Araujo
04|Aug|2013 2Muito bom!
todas as vezes que criava Parms manualmete, sempre pensava em automatizar essa tarefa, mas nunca investi tempo nisso, obrigado pela ótima contribuição a comunidade!
Leave a reply