Customização de Workflow


#1

Prezados,

Tenho algumas dúvidas e estou com dificuldade de achar material sobre o assunto. O cenário é o seguinte: Gostaria de customizar o workflow da Ordem de Venda de forma que a transição do (DocPrepare) fosse para (DocComplete) caso um valor de um campo igual x e que fosse para (MeuNó) caso um valor de campo diferente de x. Já entrei como System Administrator e criei o nó (MeuNó), as transições e as condições. Em MeuNó configurei a ação do documento como ‘Aprovar’. Depois de tudo isso feito, quando entro na Ordem de Venda e clico no botão de Processar continuam as mesmas opções (Preparar, Fechar, Completar e Anular). Não deveria aparecer mais uma opção, a de Aprovar?

Enfim, como disse estou realmente tateando no escuro por não ter achado algum material sobre o assunto, toda ajuda será bem vinda.

Abraços,

Marcio


#2

Isso eh pela permissão do papel. Mas mande aprovar que o fluxo vai suspender se a condição for atendida.


#3

Olá Marcio,

As opções da lista de “Ação de Documento” ficam no código e não são configuradas no Workflow. Você está tentando fazer um workflow de aprovação?
Se sim dê uma olhada no documento: adempiere.com/How_to_Activat … l_Workflow

Você não precisa colocar condições em todos os nós, desde que os mesmos sejam do tipo XOR. Ex:

    -----------------               -------------------
    |   DocPrepare  |   -------- >  |   DocComplete   |
    -----------------               -------------------
             |
             | 
             v
    -----------------
    |   MeuNó ZZZ   |
    -----------------

Em DocPrepare --> DocComplete deixe a sequência = 100 e sem condição. Já em DocPrepare --> MeuNó ZZZ coloque uma sequência menor, ex: 10 e coloque a condição. Caso a condição seja atendida o workflow seguirá por este nó, caso contrário irá completar o documento. Note que a ação será feita ao completar o documento, neste caso.

Att.


#4

Oi Ricardo/Edilson,

Obrigado pelas respostas.

Dei uma lida naquele documento e fiz exatamente o que estava lá, a única coisa a mais foi colocar uma condição em DocPrepare -> DocApprove que verifica se POReference=5000, ou seja, só deveria mudar para o nó de aprovação se o campo Referência do Pedido for igual a 5000. Fiz isso no workflow Process_Order que é o workflow da Ordem de Venda, depois loguei como Garden Admin e fiz uma Ordem de Venda, coloquei a Ref do Pedido=5000 e cliquei duas vezes no botão para processar, a primeira Preparar e a segunda Completar.

Agora minhas dúvidas:

  1. Como tinha a condição satisfeita, depois de entrar no status preparado o Adempiere não deveria aceitar somente a ação Aprovar (e talvez a fechar)?
  2. Isso está acontecendo por estar usando o Garden Admin? Não sei como limitar uma Ação de documento a um perfil.

Obs: Estou fazendo tudo isso em uma sandbox, por isso estou mudando o fluxo padrão sem dó nem piedade, estou fazendo mesmo para testar os conceitos.

Abraços,

Marcio


#5

As ações são fixas de acordo com o campo DocStatus, não importa o que você fez no workflow.

As regras vão influenciar apenas quando você tiver usando o nó de aprovação com a coluna IsApproved, pois existem limiares de aprovação por perfil, no caso de outro tipo de nó não importa o perfil.


#6

Oi Ricardo,

Ainda estou um pouco confuso mas algo me ocorreu que ainda não havia ocorrido antes, veja se estou certo: lá nas classes do Adempiere tem a MOrder, nesta classe tem todos os eventos de DocAction (PrepareIt, ApproveIt, CompleteIt, etc). Nesta classe é onde eu devo programar para que quando o documento seja “Preparado” eu setar o DocAction como Aprovar ou Completar? Ou seja, a próxima ação disponivel é feita com programação nesta classe (tipo setDocAction(xpto))?

Se for isto, qual a solução mais elegante para não mecher direto na MOrder do Adempiere?

Abraços,

Marcio


#7

Olá Marcio,

Se você mudar isso, provavelmente vai funcionar da maneira que você está descrevendo, porém é uma alteração muito intrusiva, pois não envolve somente a MOrder e sim DocAction, VDocAction, etc.

Vou te explicar como configurar para o seguinte cenário:

Caso o campo POReference seja igual a 500 o pedido deve seguir para aprovação, caso contrário deve completar diretamente.

Partindo de uma instalação limpa, crie uma nova coluna na tabela C_Order = ZZZ_FoiAprovado do tipo Sim/Não, valor padrão N, tamanho 1, obrigatório e atualizável.

Adicione 1 nó do tipo User Choice no Workflow do pedido. A coluna para este nó deve ser a ZZZ_FoiAprovado. Adicione uma transação do DocPrepare para “Seu novo nó” com sequência igual a 10. Adicione uma condição para esta condição POReference=500.

Adicione uma transição “Seu novo nó” para DocComplete. Neste nó adicione uma condição ZZZ_FoiAprovado = true.

Faça um pedido novo e complete, o pedido deve ser completado normalmente.

Reative o pedido e digite no campo Referencia do Pedido = 500. Agora complete o pedido novamente, neste caso o pedido deverá ficar em “Em Progresso”, volte para o menu principal do Adempiere na aba “Atividades de Fluxo de Trabalho” e o verifique o pedido está parado para aprovação. Escolha SIM e volte para o pedido, o mesmo deverá ter sido completado. Caso a escolha seja não, o pedido continuará ativo.

Att.


#8

Obrigado Ricardo! Vou seguir as instruções e dou um feedback. Valeu mesmo!


#9

Oi Ricardo,

Funcionou tudo certo! Realmente eu estava com uma visão errada da funcionalidade mas agora consegui ver funcionando e isso vai abrir mais alguns horizontes aqui na customização para refletir no nosso dia a dia.

Muito obrigado pela atenção e desculpe a demora em responder.

Abs,

Marcio


#10

Boa noite à todos os membros da comunidade LBR.

Estava estudando a opção de workflow no sistema, e segui os ensinamentos do Márcio Rebello (aeon) e do Ricardo Santana, e realmente consegui realizar de acordo com os dados fornecidos.

Estou agora estudando um cenário da seguinte forma:

Para um pedido de compra, com valor superior a 1.000,00 para qualquer produto, deverá ser feito um fluxo de aprovação.

Segui os dados de acordo com os exemplos de Márcio e Ricardo, e resolvi incrementar colocando uma transição no (DocComplete) no Nó que eu criei, (DocApprove) e uma condição nessa transição, E/Ou, eu escolhi a opção E, em Coluna eu escolhi GrandTotal, operação >, valor 1000 e tipo de entidade User maintained.

Porém ao completar o pedido de compra ele entra no workflow, independente do valor GrandTotal.

Eu gostaria que para valores acima de 1.000,00, entra-se neste workflow de aprovação e não da forma que está sendo feito, com todos os valores, acima e abaixo do estabelecido.

Grato pela atenção.

Abraço.