Introdução
Nesse vigésimo terceiro post vou continuar com a implementação para interação com o BPM projetado nos posts anteriores.
Ajustando Configuração Wildfly
Antes de continuar eu preciso verificar se o seguinte property está configurado dentro do standalone-full.xml. Se não existir será necessário adicionar:
<system-properties>
<property name="com.arjuna.ats.arjuna.allowMultipleLastResources" value="true"/>
</system-properties>
Acionando BPM
Nossa aplicação nesse momento já consegue visualizar as tarefas que foram adicionadas com lançamentos do Operador. Ainda não fiz a implementação da chamada da tela de lançamento através da Task, mas já podemos visualizar como está a lista de tarefa. Então vou compilar, publicar e executar os seguintes passos:
- Acessar a aplicação como DSF http://dsf.gcpr.com.br:8080/contas
- Acessar o Menu Parâmetro => Lançamento e ativar o parâmetro de Utilizar BPM
- Logar como Operador
- Incluir uma conta (Pagar ou Receber)
- Logar como Supervisor
- Acessar menu Lista Tarefa
Clicando no botão fluxo o sistema mostra em um outra aba do navegador a tarefa dentro do fluxo:
Agora vou implementar a execução da tarefa de usuário, porque quando clicar no botão Executa vai ser chamado a tela lancamentoList.jsf. Nesse momento vou interceptar e chamar uma ação dinâmica de aprovação de conta. Segue a implementação da definição da ação dinâmica.
LancamentoList.java:
/* CODIGO ANTERIOR OCULTADO */
@JArchDynamicShowDataAction(id = "idAvaliarLancamento", labelMenu = "label.avaliar", labelButton = "label.avaliar",
nameMethodDataAction = "avaliaLancamento", confirmation = true, headerConfirmation = "message.avaliarConta",
messageConfirmation = "message.confirmarAvaliacaoDessaConta", order = 3, elRendered = "#{(l -> false)(lancamento)}")
@JArchViewScoped
public class LancamentoListAction extends CrudListAction<LancamentoEntity, LancamentoFacade> {
/* CODIGO OCULTADO */ @PostConstruct
private void init() {
if (isStartedWorkFlow()) {
Long idLancamento = Long.valueOf(getTask().get().getBusinessKey());
LancamentoEntity lancamento = getFacade().find(idLancamento);
tipoLancamento = lancamento.getTipoLancamento();
callActionDynamic(idLancamento, "idAvaliarLancamento"); return;
}
/* CODIGO POSTERIOR OCULTADO */
No LancamentoDataAction preciso implementar o método da ação dinâmica e ajustar o getPageList() para retornar pra tela de lista de tarefa quando for acessada via Task:
LancamentoDataAction.java:
@Override
public String getPageList() {
if (isStartedWorkFlow()) {
return "../bpm/tarefaList.jsf";
}
return "lancamentoList.jsf?tipo=" + tipoLancamento;
}
/* CODIGO OCULTADO */
public void avaliaLancamento() {
getFacade().change(getEntity());
}
E na página de dados colocar a opção de autorizar a conta:
lancamentoData.xhtml:
<h:panelGroup rendered="#{lancamentoDataAction.idDynamicAction eq 'idAvaliarLancamento'}">
<a:outputLabel value="#{e:bundle('label.autorizado')}" for="idLancamentoAutoriza"/>
<br/>
<a:toggleSwitch id="idLancamentoAutoriza"
label="#{e:bundle('label.autorizado')}"
value="#{lancamentoDataAction.entity.autorizado}"/>
</h:panelGroup>
E pra finalizar vou adicionar um observer para enviar a informação pro BPM sobre a conclusão da tarefa. Segue a implementação do LancamentoObserver:
LancamentoObserver.java:
private void avaliacao(@Observes @JArchEventDynamicAfter("idAvaliarLancamento") LancamentoEntity lancamento,
UserInformation userInformation, TaskService taskService) {
UsuarioEntity usuarioLogado = userInformation.get(UsuarioEntity.class);
String variavelAprovacao;
if (usuarioLogado.getCargo() == CargoType.SUPERVISOR) {
variavelAprovacao = "aprovadoSupervisor";
} else if (usuarioLogado.getCargo() == CargoType.GERENTE) {
variavelAprovacao = "aprovadoGerente";
} else {
variavelAprovacao = "aprovadoDiretor";
}
taskService.complete(lancamento.getTask().get().getId(),
Map.of(variavelAprovacao, lancamento.getAutorizado(),
"valorLancamento", lancamento.getValor().doubleValue()));
}
E no bundle:
bundle_pt_BR.properties:
label.autorizado=Autorizado
label.avaliar=Avaliar
message.avaliarConta=Avaliar Conta
message.confirmarAvaliacaoDessaConta=Confirmar avalia\u00E7\u00E3o dessa conta ?
Agora podemos executar o fluxo completo:
Conclusão
Nesse post terminei a implementação dessa primeira versão do fluxo. Nos próximos posts vou evoluir um pouco mais esse BPM..
Nenhum comentário:
Postar um comentário