Virtualização das dimensões financeiras
Estou trabalhando em um projeto, onde surgiu a necessidade de virtualizarmos as dimensões financeiras. Depois de alguns problemas, chegamos ao conjunto de tabelas exatas para que seja realizada a virtualização desta funcionalidade no ax, veja abaixo:
Tabelas
- Dimensions
- DimensionActiveHierarchyBackup
- DimensionHierarchyCombination
- DimensionCollection
- DimensionPriorityTable
- DimensionSetCombination
- DimensionSetCombinationDuplicate
- DimensionSetCombinationTemp
- DimensionSetCombinationValidated
- DimensionSetHierarchyTable
- DimensionSetRuleTable
- DimensionSetRuleCollection
- DimensionSetTable
- LedgerRowDef
- LedgerRowDefErrorLog
- LedgerRowDefLine
- LedgerRowDefLineCalc
- LedgerTable
Importante
Criar uma “TableCollection” somente para esse conjunto de tabelas.
Espero ter ajudado.
Abraços.
[NFe 2.0] Solucionando problemas SEFAZ-PR
Bom dia pessoal,
Recentemente entrei em um novo projeto onde foi necessário realizar a comunicação com o SEFAZ-PR (o mais chato diga-se de passagem) para emissão da NF-e. Onde encontramos algumas dificuldades e gostaría de compartilhar com a solução.
O Problema
Quando enviamos o xml para o SEFAZ-PR validar recebemos o código de rejeição 215(Erro de validação no schema), mesmo que ele tenha sido validado contra o schema oficial.
Causa e explicação
De acordo com os comunicados que podem ser lidos aqui e aqui. A SEFAZ-PR explica que o xml está sendo rejeitado devido a falta de declaração do atributo namespace na tag NFe. Por exemplo:
XML enviado ao SEFAZ-PR:
<NFe>
<infNFe Id="NFe41110303126900000259550000000150531000244250" versao="2.00">
<ide>
...
</ide>
</infNFe>
</NFe>
XML esperado pelo SEFAZ-PR:
<NFe xmlns="www.portalfiscal.inf.br/nfe">
<infNFe Id="NFe41110303126900000259550000000150531000244250" versao="2.00">
<ide>
...
</ide>
</infNFe>
</NFe>
O que ocorre é que o WCF com a intenção de melhorar a performance da comunicação, retira as duplicidades do arquivo XML, consequentemente reduzindo o tamanho do arquivo. Sendo assim a namespace da tag NFe é retirada, pois a mesma namespace é declarada na tag enviNFe.
O problema é que somente a SEFAZ-PR faz a validação da namespace na tag NFe, ou seja, não se trata de um bug do AX e sim uma validação extra exclusiva do SEFAZ-PR.
Solução
Para solucionar este problema foi disponibilizada uma DLL para que o AX realize a comunicação com o SEFAZ-PR sem a otimização do XML, disponível para download aqui. Feito o download siga os seguintes passos:
- Copie a dll para pasta bin do client do AX, algo parecido com isso: C:\Program Files (x86)\Microsoft Dynamics AX\50\Client\Bin
- Copie a dll para a pasta bin do server do AX, algo parecido com isso: C:\Program Files\Microsoft Dynamics AX\50\Server\
\Bin - Abra o DAX, e adicione uma nova referência apontando para a dll do client. AOT > References > Botão direito > Add references > Browse.
- Abra o método “createBinding” da classe EFDocMsgTransport_WebServiceV4_BR, classe responsável pela comunicação entre AX x SEFAZ-PR e cole o código abaixo.
- Reinicie a AOS.
private System.ServiceModel.Channels.Binding createBinding()
{
System.ServiceModel.Channels.Binding binding;
System.ServiceModel.Channels.BindingElement[] bindingElementArray;
NFe.CustomTextMessageBindingElement customTextMessageBindingElement;
System.ServiceModel.Channels.HttpsTransportBindingElement transportBinding;
;
if (this.isHttps())
{
// BP Deviation Documented
customTextMessageBindingElement = new NFe.CustomTextMessageBindingElement('utf-8', "application/soap+xml", System.ServiceModel.Channels.MessageVersion::get_Soap12());
// BP Deviation Documented
transportBinding = new System.ServiceModel.Channels.HttpsTransportBindingElement();
transportBinding.set_RequireClientCertificate(true);
// BP Deviation Documented
bindingElementArray = new System.ServiceModel.Channels.BindingElement[2]();
bindingElementArray.SetValue(customTextMessageBindingElement, 0);
bindingElementArray.SetValue(transportBinding, 1);
// BP Deviation Documented
binding = new System.ServiceModel.Channels.CustomBinding(bindingElementArray);
}
else
{
// BP Deviation Documented
binding = new System.ServiceModel.BasicHttpBinding();
}
return binding;
}
Feito isso o AX não irá mais retirar o namespace e o código de rejeição 215 desaparece :D.
Outro erro encontrado, mas já explorado pelo Matiazzo em seu weblog, veja.
Abraços,
Peterson Ferreira
[DYNAMICS AX 2012] Boas Práticas para Testes
Está disponível o novo whitepaper falando sobre as boas práticas nos testes do DAX 2012! Segue alguns tópicos falados e o link:
- Práticas de condução de qualidade no início do ciclo de desenvolvimento.
- Recomendações para o teste e ferramentas de ALM.
- Ajudar a decidir sobre automação de teste.
- Exemplos de boas práticas que usamos no desenvolvimento Dynamics AX 2012.
Link para download.
Abraços,
Peterson Ferreira
Remover Tags HTML de uma String
Na semana passada um amigo me pediu ajuda em um problema pouco comum no DAX. Como remover tags HTML de uma String.
Como participei de um projeto em que o AX era o backoffice de um e-commerce, e precisávamos realizar toda a integração, eu já tinha a solução e resolvi compartilhar aqui no blog. Talvez você já tenha feito um método para resolver este problema, mas o AX já traz isso pronto pra você!
Solução
Dentro do AX temos um “Helper” para manipular elementos de uma página HTML, ou seja uma classe que possui uma série de métodos estáticos para ajudar a trabalhar com HTML. Vejamos como remover as tags html de uma string:
//Start
static void removeHtml(Args _args)
{
str html = "<title>Dynamics AX Brasil</title>"
;
html = Web::stripHTML(html);
info(html);
//=> Dynamics AX Brasil
}
//End
No exemplo acima o método stripHTML pode receber 3 parâmetros, são eles:
- String a ser retirada as tags HTML.
- Se deseja inserir quebra de linha após o elemento “p”.
- Se deseja inserir quebra de linha após o elemento “br”.
Conclusão
Além deste método a classe Web possui vários outros, que como já foi dito, pode lhe ajudar no trabalho com o HTML.
Abraços,
Peterson Ferreira
[NEWS] Certificações: Dynamics AX 2012
Os novos exames de certificação do DAX 2012 estão disponíveis para os que quiserem se certificar, segue dos links e tópicos abordados nos exames:
MB6-869: Microsoft Dynamics AX 2012 Development Introduction
- Understanding Dynamics AX 2012 Architecture
- Managing the Data Dictionary
- Managing the User Interface
- Managing Security
- Working with X++ Control Statements
- Managing Objects and Classes
- Accessing the Database
- Managing Exception Handling
MB6-872: Microsoft Dynamics AX 2012 Installation and Configuration
- Planning to Install Microsoft Dynamics AX 2012 and Understanding the Organizational Model
- Installing Microsoft Dynamics AX 2012
- Managing Users and Security
- Managing Services and Workflow
- Managing Analytics and Reporting
- Managing Enterprise Portals
- Managing Administration
MB6-871: Microsoft Dynamics AX 2012 Financials
- Managing Financials I
- Managing Financials II
- Managing Fixed Assets
MB6-870: Microsoft Dynamics AX 2012 Trade and Logistics
- Managing the Supply Chain Foundation
- Managing Distribution and Trade
- Managing Bills of Materials
A Microsoft também disponibiliza treinamentos on-line que podem ser encontrados aqui. E para quem tem acesso ao PartnerSource, pode baixar os novos manuais de estudo/preparação.
Abraços,
Peterson Ferreira


