segunda-feira, 2 de dezembro de 2013

Cursos ADempiere com 50% de desconto em Dezembro/2013

Na onda das promoções Black Friday, decidimos dar descontos em nossos cursos durante todo o mês de dezembro de 2013. Todos os cursos terão 50% de desconto para compras feitas durante o mês de dezembro/2013, podendo fazer o curso online na data que quiser. 

Ou seja, pode comprar agora e fazer o curso só em 2014. Aproveite a promoção pois em janeiro os preços voltam ao normal! Acesse http://www.aprendanaweb.com.br

 Acesse www.aprendanaweb.com.br

Pesquisa Serviços ADempiere

A pesquisa abaixo é direcionada para quem tem interesse em serviços de consultoria ADempiere.

domingo, 8 de setembro de 2013

Alterando versão web do ADempiere

Dica rápida:

Caso precise alterar alguma característica da versão web (browser) do ADempiere basta proceder da mesma forma que se usa para alterações de código da versão Desktop (na qual você coloca suas classes no arquivo customization.jar e roda a instalação)

Maneira Manual:

1) Coloque suas classes (novas e originais alteradas) em projeto separado no Eclipse
2) Depois que o Eclipse gerar os .class das suas classes, copie o arquivo zkcustomization.jar que está na raiz da pasta Adempiere para seu diretório de trabalho
3) Crie dentro desse arquivo exatamente a mesma estrutura de pacotes que existe no original (no caso da versão web, abra o arquivo webui.war para ver como é)
4) Copie suas classes alteradas e novas para as devidas pastas
5) Execute o RUN_setup novamente

Exemplo:

Eu precisava alterar a classe ZkJRViewer que fica no pacote org.adempiere.webui.window. Dessa forma criei dentro do zkcustomization.jar a seguinte estrutura:

zkcustomization.jar
      WEB-INF
         classes
            org
              adempiere
                webui
                  window

E coloquei a minha classe ZkJRViewer alterada dentro do diretório window. Depois gerei o .jar novamente e substituí na pasta lib/ da minha instalação do ADempiere.


Automatizando:

1) Use algum script para o ant para fazer os passos acima (3 e 4)

Obs 1: assim que puder indico o passo a passo de como fazer isso
Obs 2: se você não tem ideia do que é o ant, contrate um programador java

terça-feira, 27 de agosto de 2013

Livro sobre ADempiere: vai sair

Em resposta às várias perguntas sobre o livro, informo que ele sairá sem falta ainda esse ano. Não posso e nem vou informar uma data exata, pois tenho compromissos com meus clientes e esses sempre estão em primeiro lugar.

Devo disponibilizar a introdução nos próximos dias aqui nesse blog. Provavelmente também disponibilizarei, ao longo das semanas, trechos do livro.

Não disponibilizarei os capítulos inteiros antes de terminar, porque antes farei todo o processo de registro do mesmo.

Quando terminar aí sim disponibilizarei o livro para download aqui ou em site que indicar. E como já falei antes, a versão digital do livro será 100% gratuita.

Continuem acompanhando aqui  as notícias.  Essa semana posto a introdução do livro.

quarta-feira, 8 de maio de 2013

Configurando permissões de acesso no ADempiere - Parte 1

Todo sistema, independente do tipo, necessita ter controles de acesso. Isso impede, por exemplo, que usuários façam operações indevidas no sistema que possam comprometer o funcionamento do mesmo. Além disso é fundamental que possam ter meios de se controlar quem pode acessar o que. O ADempiere tem algumas maneiras de se controlar o acesso a registros, janelas e campos. Nesse artigo pretendo mostrar brevemente como é o controle de acesso no ADempiere.

O controle de acesso no ADempiere é baseado em dois aspectos principais:

  • Usuários
  • Perfis de Acesso: no ADempiere também chamado de Papel/Função

Todo acesso no ADempiere é baseado no conjunto desses dois aspectos. O acesso que o usuário vai ter no sistema vai depender do perfil de acesso que ele estiver utilizando. No processo de login no sistema, além de preencher os dados básicos de acesso (usuário e senha), o usuário tem de informar com qual perfil de acesso vai acessar. Isso quer dizer que para um mesmo usuário pode estar configurado mais de um tipo de acesso. Exemplo: imagine que um usuário pode acessar o sistema tanto com um perfil Comercial quanto com um perfil Financeiro. Assim ele poderia fazer funções destinadas a usuário do perfil Comercial bem como funções dos usuários do perfil Financeiro.

Um dado importante no ADempiere é que o usuário não vai usar dois perfis ao mesmo tempo. Ele define o acesso, como falado antes, no momento do login, como mostra a tela abaixo:


O tipo de acesso é indicado no campo Regra, que no exemplo acima está preenchido com o perfil GardenWorld Admin, que é um tipo de acesso configurado para a empresa de teste GardenWorld. Se já tem o ADempiere instalado, veja quais são as regras definidas para os usuários da instalação padrão do ADempiere (para lembrar sobre usuários padrões: http://adempierebr.blogspot.com.br/2012/02/adempiere-usuarios.html)

Uma vez escolhida o perfil de acesso, o ADempiere mostrará o menu de acordo com o perfil escolhido. Mas como são criados os perfis de acesso e são configuradas permissões? Ao fazer login com o perfil GardenWorld Admin, acesse a janela Papel (Função) que na instalação padrão do ADempiere fica no menu Administrador do Sistema -> Regras Gerais -> Segurança. 
Clique na imagem para ver em tamanho maior


É na janela mostrada na figura acima que se cadastra perfis de acesso bem como se configura as permissões que os perfis terão. Para explicação detalhada dessa janela seriam necessários alguns artigos,  então vou apenas me concentrar nos itens que uso mais.

A primeira aba, Papel (Função), contém os dados básicos do perfil. Recomendo tomar muito cuidado e não alterar o perfil Admin da empresa (no exemplo acima GardenWorld Admin) pois uma manutenção indevida pode fazer com que o próprio administrador fique sem acesso às configurações.

Na aba Acesso Org indicam-se as organizações as quais esse perfil terá acesso. Pode ser que em uma implantação precise se definir perfis diferentes para cada organização. Então nessa aba se faz o vínculo da Organização com o Perfil de Acesso. Caso o perfil tenha acesso a todas as organizações basta marcar o campo Acessar Todas Orgs da aba principal. Se não fizer uma coisa e nem outra o perfil não conseguirá acessar o sistema.

Em Designação de Usuário define-se quais usuários pode usar esse perfil de acesso. Como falado antes,   um usuário pode ter acesso a mais um perfil.

Por fim, temos as abas de permissões de acesso aos elementos do ADempiere: janelas, processos, formulários, fluxos e tarefas. Para cada aba se indica quais elementos o perfil pode acessar. Isso faz, por exemplo, que um usuário não veja a janela no menu ou tenha acesso de somente leitura em uma janela. Como exemplo, olhem como é a configuração de acesso a janelas:

Clique na imagem para ver em tamanho maior


Assim, pode-se configurar para o perfil quais janelas ele terá acesso e como ele acessará. No exemplo acima o perfil é o administrador da empresa que obviamente pode ter acesso a todas as janelas.

A mesma ideia vale para os outros elementos. Recomendo verificar a configuração para o perfil GardenWorld User. 

No próximo artigo continuaremos explicando o controle de acesso no ADempiere. Até lá!


segunda-feira, 29 de abril de 2013

ADempiere: Dicionário de aplicação

Se me perguntassem qual é a característica do ADempiere que mais gosto responderia sem dúvida: o dicionário de aplicação. Acho inclusive que essa seria a resposta da maior parte dos profissionais que trabalham com o ADempiere. Nos cursos que já ministrei os alunos também parecem se impressionar com os benefícios que o uso do dicionário de aplicação traz para o ADempiere.

Mas o que seria o dicionário de aplicação?

O dicionário de aplicação do ADempiere é o que garante a grande flexibilidade da aplicação. A maior parte das configurações do sistema são definidas no dicionário de aplicação. É no dicionário de aplicação que de indica, por exemplo, que a aba Parceiro de Negócios está vinculada a tabela C_BPartner no banco de dados.

O que se pode fazer dentro do dicionário de aplicação, basicamente:

  • Gerenciar as tabelas do banco de dados
  • Gerenciar as janelas, abas e campos do sistema
  • Criar relatórios
  • Criar processos (automáticos ou não) e vinculá-los a botões ou itens do menu
  • Manutenção das traduções
  • Criação de elementos de sistema
  • Manutenção de boa parte das mensagens
  • Manutenção das sequências de documentos
  • Criação de workflows

Existem outras tantas e a lista acima contempla talvez as principais.

Com o dicionário de aplicação, o trabalho de codificação em uma implantação fica bem menor do que seria em um desenvolvimento de sistema qualquer. Exemplo: um cliente solicita a criação de um campo em uma janela específica. Em um processo normal, o desenvolvedor tem que criar a alteração da base de dados correspondente, criar o elemento de interação (o campo), gerar o pacote de instalação e atualizar a aplicação (resumidamente).

Com o ADempiere esses passos não são muito diferentes, com uma pequena e importante diferença: não existe codificação. Ou seja, a criação de um campo em uma janela pode levar 5 minutos.

E como eu acesso o dicionário de aplicação? Simples, faça login com o usuário System (ou usuário SuperUser), escolha o perfil System Administrator e você estará no dicionário de aplicação. :-)

Experimente! Obviamente não faça esses experimentos em uma base de produção. Uma manutenção errada tem o poder de fazer a aplicação não funcionar mais. A dica que eu sempre dou é: antes de alterar veja como foi feito em outras tabelas e janelas. A boa e velha engenharia reversa ainda é uma ótima fonte de aprendizado.



sexta-feira, 26 de abril de 2013

ADempiere: colunas obrigatórias em uma tabela

Se deseja criar uma tabela nova no ADempiere é importante saber que existem colunas que são obrigatórias. Sem eles, características básicas do ADempiere não funcionarão, como controle de acesso, separação de dados empresa/organização, entre outras. Mas quais são essas colunas:


  • AD_Client_ID: coluna que indica o id da empresa que detém o registro. É através dessa coluna que o ADempiere sabe a qual empresa pertence um determinado registro. 
  • AD_Org_ID: coluna que indica o id da organização que detém o registro. É através dessa coluna que o ADempiere sabe a qual organização pertence um determinado registro. Se olhar o banco de dados e ver que essa coluna tem o valor 0, então isso indica ao ADempiere que o determinado registro pertence a todas as organizações. 
  • CreatedBy: contém o ID do usuário que criou o registro. Essa coluna é alimentada automaticamente pelo ADempiere. 
  • Created: data em que o registro foi criado. 
  • UpdatedBy: contém o ID do usuário que atualizou o registro pela última vez. Essa coluna é alimentada automaticamente pelo ADempiere. 
  • Updated: data em que o registro foi atualizado pela última vez. 
  • IsActive: indica se o registro está ativo ou não. 
  • NOMEDATABELA_ID: caso seja uma tabela de uma chave única, serve como ID do registro na tabela. Se a tabela chama-se Z_TipoFornecedor, então a coluna ID dessa tabela deverá ser chamada de Z_TipoFornecedor_ID. 


 Abaixo segue um script exemplo simples para criação de tabela com essas colunas obrigatórias:
CREATE TABLE z_tipofornecedor ( z_tipofornecedor_id numeric(10,0) NOT NULL, ad_client_id numeric(10,0) NOT NULL, ad_org_id numeric(10,0) NOT NULL, isactive character(1) NOT NULL DEFAULT 'Y'::bpchar, created timestamp without time zone NOT NULL DEFAULT now(), createdby numeric(10,0) NOT NULL, updated timestamp without time zone NOT NULL DEFAULT now(), updatedby numeric(10,0) NOT NULL, CONSTRAINT z_tipofornecedor_pkey PRIMARY KEY (z_tipofornecedor_id), CONSTRAINT z_tipofornecedor_isactive_check CHECK (isactive = ANY (ARRAY['Y'::bpchar, 'N'::bpchar])) ) WITH ( OIDS=FALSE );