Com o lançamento do Ax 2009 no Brasil muitos desenvolvedores terão que trabalhar no upgrade das customizações feitas para seus clientes no Ax 4.0 para a 5.0. Deixo aqui a dica para verem o ultimo post no blog Palle Agermark on AX, principlamente se vocês planejam mudar aquele desenvolvimento feito para o cliente x na camada cus para a camada var, por exemplo, para reutilizar em outros clientes.
Abs
quinta-feira, 12 de fevereiro de 2009
Mais upgrade!
Postado por
Matiazo
às
07:45
0
comentários
Marcadores: Code upgrade
segunda-feira, 2 de fevereiro de 2009
Smart customizations pt. 2
Toda implantação de um ERP exige algum nivel de customização para o cliente: seja um novo processo um modificação de um processo existente ou um novo relatório, os desenvolvedores devem seguir alguns principios no desenvolimento de suas customizações para fazer isso de uma maneira mais eficaz, tanto na manutenção, quanto no upgrade, aqui vão algumas dicas:
- Mantanha a lógica do negócio e logica de interface separados - isto significa: não escreva lógica relacionada a funcionalidade que esta criando em forms, utilizar o máximo possível classes.
- Quando for utilizar tabelas, trabalhe com um registro por vez em table instance methods (custInvoiceJour.initFromSalesTable por exemplo), enquanto table static methods devem cuidar de um grupo de registros.
- Sempre tente utilizar field groups nos formulários. eles são automaticamente atualizados nos formulários quando um novo campo é inserido.
- Classes: lógicas que envolvam diferentes tabelas como processos de atualização (faturamento ou um cálculo de comissão) devem estar escritos em classes. Tente utilizar o princípio de "Single Responsibility (SRP)" em suas classes, esse principio diz que uma classe deve ser implementada tendo apenas um único e exclusivo objetivo, portanto não faça das suas novas classes um canivete suiço.
- Evite overlaying em suas classes e tabelas: caso você modifique um método que ja exista em uma camada abaixo da que esta trabalhando e depois acabe desistindo dessa modificação não esqueça de remover a modificação da camada que esta trabalhando, caso o método permaneça em uma camada acima mesmo sem nenhuma alteração, caso ele seja alterado em sua camada original, seja por uma nova versão ou fix, o Ax não vai executar essa nova alteração. O overlaying também pode acontecer quando se imposta um XPO, portanto, verifique sempre se os metodos alterados realmente contém alterações!
Um bom lugar para iniciar o estudo sobre desenvolvimento no Ax é a página do MSDN do Dynamics Ax, ele é aberto ao publico e e tem informações que vão desde a arquitetura do Ax, cutomizações basicas e desenvolvimento em X++.
Vale a pena dar uma revisada no meu post sobre upgrade.
Até a próxima.
Postado por
Matiazo
às
00:56
2
comentários
Marcadores: Arquitetura de software, Code upgrade
sexta-feira, 30 de janeiro de 2009
Query com range de valores
Olá!
Antes de mais nada, Feliz 2009 a todos!!!
Em posts anteriores, nos foi mostrado como se pode negar valores utilizando o objeto Query, hoje vamos ver como podemos fazer um range de valores com este objeto.
Do mesmo jeito que existe uma função queryValue(AnyType A), também existe a função queryRange(anyType _From, AnyType _To), que faz uma chamada a função SysQuery::range(_From,_To), que por sua vez, trata os valores passados como parâmetro. Por exemplo:
queryRange(1,10); //Retorna “1..10”
Com isso em mente podemos fazer um pequeno código que busca as NFs faturadas em um determinado range de datas:
static void RangeTest(Date _from, Date _to)
{
Query query = new query();
QueryRun queryRun;
QueryBuildDataSource qbds;
CustInvoiceJour custInvoiceJour;
;
qbds = query.addDataSource(TableNum(CustInvoiceJour));
qbds.addRange(FieldNum(CustInvoiceJour,InvoiceDate)).value(queryRange(_from,_to);
queryRun = new queryRun(query);
while(queryRun.next())
{
custInvoiceJour = queryRun.get(TableNum(CustInvoiceJour));
print (CustInvoiceJour.InvoiceDate);
}
pause;
}
Mas, num caso em que precisarmos buscar NFs faturadas a partir de/até uma determinada data, fazemos a chamada a queryRange utilizando outra função estática de SysQuery, a valueUnlimited(). No exemplo abaixo buscamos por NFs geradas a partir da data X passada como parâmetro.
static void RangeTest(Date X)
{
Query query = new query();
QueryRun queryRun;
QueryBuildDataSource qbds;
CustInvoiceJour custInvoiceJour;
;
qbds = query.addDataSource(TableNum(CustInvoiceJour));
qbds.addRange(FieldNum(CustInvoiceJour,InvoiceDate)).value(queryRange(X,SysQuery::valueUnlimited()));
queryRun = new queryRun(query);
while(queryRun.next())
{
custInvoiceJour = queryRun.get(TableNum(CustInvoiceJour));
print (CustInvoiceJour.InvoiceDate);
}
pause;
}
A classe SysQuery possui outras funções estáticas muito interessantes que ajudam, e muito, o desenvolvedor a montar suas Queries, como por exemplo:
- valueEmptyString();
- valueNot(AnyType A);
- valueNotEmptyString();
Espero que tenha ajudado!
Abs
Postado por
Anônimo
às
14:47
0
comentários
terça-feira, 2 de dezembro de 2008
MSBuild tasks for Dynamics Ax updated!!!
Fiz um upload de um projeto de exemplo hoje, ele limpa um AOS, pega a ultima versão do SourceSafe, gera um xpo, importa e compila, deixando o diretório com um aod pronto, porém falta completar o projeto para copiar o aod pronto para a pasta de build, alguem se habilita?
Coloquei o feed do projeto no nosso blog, assim so vou postar major updates no blog, o resto da atualizações podem ser conferidas pelo feed.
Abs,
Rodrigo
Postado por
Matiazo
às
22:48
0
comentários
Blog Dynamics Funcional
Pessoal,
Postado por
André dos R. Santos
às
15:57
1 comentários
Marcadores: http://dynamicsfuncional.blogspot.com/
domingo, 23 de novembro de 2008
MSBuild tasks for Dynamics Ax project released!
O objetivo do projeto é disponbilizar um conjunto de tasks para compilar, criar builds e fazer o deploy do Dynamics Ax.
O codigo fonte pode ser acessado na pagina do projeto: http://www.codeplex.com/daxMsBuild
Interessados em contribuir entrar em contato comigo através do site do projeto.
MSBuild é a ferramenta que o Visual Studio utiliza para construir (build) seus projetos através de arquivos XML que podem ser criados e adaptados para criar builds para qualquer tipo de projto não somente os de .net. Mais informações sobre o MSBuild em: http://msdn.microsoft.com/en-us/library/wea2sca5.aspx
Postado por
Matiazo
às
23:35
0
comentários
sexta-feira, 24 de outubro de 2008
Smart customizations Ax
Seguindo meu post sobre upgrade de versão, segue um link de um webcast feito por Michael Fruergaard, arquiteto do time de Ax da microsoft, que explica como customizar o Ax de uma maneira a simplicficar futuros upgrades.
Com o lançamento do Ax 2009, é muito importante todos os desenvolvedores de Ax pensarem também como lidar com o upgrade das customizaçòes feitas para seus clientes.
Dynamics AX 4.0 - Smart customizations
Rodrigo
Postado por
Matiazo
às
11:03
0
comentários
Marcadores: Code upgrade
segunda-feira, 20 de outubro de 2008
Removendo Dados de Utilização de Usuários
Boa tarde a todos,
Uma das funcionalidades mais impressionantes, por assim assim dizer, que o DAX possuí é a capacidade do usuário de realizar diferentes tipos de pesquisas, sejam quais forem os critérios. Muitas vezes você terá relacionamentos 1:n ou n:1 disponíveis e com isso o proprio operador do sistema tem em mãos pesquisas completamente personalizadas, valendo-se sempre a ressalva:"Desde de que saiba-se o que está fazendo".
Hoje, utilizando essas pesquisas , me deparei com um problema um tanto quanto inusitado. Quando são utilizadas as queries do sistema para filtrar-se as informações, se novas tabelas forem incluídas e a consulta seja salva, não é mais possível deleta-las de um modo simples e voltar para a funcionalidade standard.
fig.1 - Proposta de pagamento standard
Utilizando como base o filtro da proposta de pagamento do contas a receber, incluí uma nova tabela (linhas do diário). Na figura 2 vemos o exemplo do formulário assim que a tabela é incluida com a opção de exclusão habilitada. Já a figura 3 mesmo contando com as mesmas tabelas da figura 2 não tem mais disponível a opção de exclusão.
fig.2 - Opção de exclusão habilitada
fig.3 - Opção de exclusão inexistente
fig.4 - Visualização das configurações do usuário
Postado por
Daniel Zanni
às
15:51
0
comentários
Marcadores: MorphX, Query, SysLastValue
quarta-feira, 15 de outubro de 2008
Query negando valores
Pessoal,
No snippet abaixo, ele traz todos os clientes não iniciados pelo caractere '3'.
Obs: A utilização da function queryValue(anyType A) faz uma chamada estática a SysQuery::value(a), que por sua vez irá tratar os dados enviados no parâmetro A, como por exemplo, se eu envio um Enum, queryValue(MeuEnum) retorna o valor correspondente, e assim por diante.
static void exemploQueryRunNegativo(Args _args)
{
Query query = new query();
QueryRun queryRun;
QueryBuildDataSource qbds;
CustTable custTable;
;
qbds = query.addDataSource(TableNum(CustTable));
qbds.addRange(FieldNum(CustTable, AccountNum)).value("!" + queryValue("3") + "*");
queryRun = new queryRun(query);
while(queryRun.next())
{
custTable = queryRun.get(TableNum(CustTable));
print(custTable.AccountNum);
}
pause;
}
Postado por
André dos R. Santos
às
17:08
3
comentários
sexta-feira, 3 de outubro de 2008
Rejeitar sessões do AOS.
Postado por
André dos R. Santos
às
13:00
0
comentários
Marcadores: Administração, AOS, AX 4.0, sql