Tags
Aprenda neste Post a criar uma Human Task no BPEL. Aqui criaremos um processo que usa um DbAdapter para fazer um select no Banco de Dados e com os dados retornados iremos preencher os campos que definirmos na tela do Worklist.
Para a criação de nossa HumanTask no BPEL criei duas partes para nosso Post, consulte os Links abaixo para verificar as demais partes:
- Criando uma HumanTask no BPEL – Parte 1: Criando o processo
- Criando uma HumanTask no BPEL – Parte 2: Deployando e testando o processo
Para que você entenda melhor algumas definições, veja abaixo algumas delas:
- HumanTask – Uma HumanTask cria tarefas para os usuários interagem com o processo de negócio. Cada task ou tarefa tem duas partes: os metadados da tarefa e o formulário da tarefa. O formulário da tarefa é usado para exibir o conteúdo da lista de tarefas de trabalho atribuídas a um usuário ou um grupo.
- Worklist – Uma Worklist permite-lhe mostrar os itens de um processo BPEL atribuídos ao usuário atualmente autenticado. Os itens da Worklist são tarefas BPEL abertas a partir de um ou mais processos BPEL.
Para podermos criar uma HumanTask em um processo BPEL este BPEL deve ser do tipo Assíncrono (salvo raríssimas exceções), pois é necessário que enviemos uma solicitação e não aguardemos alguma resposta.
Criaremos um XSD com os campos que iremos apresentar na tela do Worklist.
Já falamos demais, vamos por em prática !!!
Nossa idéia inicial será criarmos um processo BPEL que irá fazer um Select no Banco de Dados usando o componente DbAdapter e com os dados retornados preencher nossa Worklist com estes dados.
Como minha idéia é lhe mostrar em detalhes como criar a Human Task vou pular algumas partes de como criamos o DbAdapter.
Veja abaixo que criei um projeto chamado HumanTaskBPELProcess e informei no Template que ele deve ser do tipo Asynchronous BPEL Process
Veja abaixo em poucos detalhes que criei um processo BPEL chamando um DBAdapter
Agora veja o processo BPEL aberto, nele temos apenas um Assign para iniciarmos nossa varável e depois faço um Invoke para o DbAdapter.
Abaixo veja no XML o resultado deste select:
Crie agora um XSD chamado Payload.xsd com o conteúdo abaixo na pasta xsd do projeto.
Obs: Este conteúdo serão os campos que quero mostrar na tela da minha Worklist e eles serão preenchidos com o resultado do meu Select conforme acima.
<?xml version="1.0" encoding="UTF-8"?> <xs:schema elementFormDefault="qualified" targetNamespace="uans.model.blog.com.br" xmlns:xs="http://www.w3.org/2001/XMLSchema" > <xs:element name="dadosEmpregado"> <xs:complexType> <xs:sequence> <xs:element name="numeroEmpregado" type="xs:integer" minOccurs="0" maxOccurs="1"/> <xs:element name="nome" type="xs:string" minOccurs="0" maxOccurs="1"/> <xs:element name="profissao" type="xs:string" minOccurs="0" maxOccurs="1"/> <xs:element name="numeroCoordenador" type="xs:string" minOccurs="0" maxOccurs="1"/> <xs:element name="dataContratacao" type="xs:string" minOccurs="0" maxOccurs="1"/> <xs:element name="salario" type="xs:integer" minOccurs="0" maxOccurs="1"/> <xs:element name="numeroDepartamento" type="xs:integer" minOccurs="0" maxOccurs="1"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
Volte agora ao seu processo BPEL e vamos criar uma Variável Global que deverá ter o conteúdo do seu XSD.
Abaixo clique no botão (X)
Será aberta a tela abaixo, então clique no botão +
Em Name coloque dadosEmpregado e clique em Element, depois dentro do seu Payload.xsd escolha dadosEmpregado e clique em OK
Então ficará assim:
Clique em Ok novamente e agora volte ao seu BPEL arraste um Assign para que fique abaixo do seu Invoke_SelectEmployeeDbAdapter
Nossa idéia será jogar o resultado do nosso Select para dentro da nossa Varável Global que acabamos de criar
Renomeie nosso Assign para ResultadoSelect e dê um duplo clique sobre ele.
Na tela abaixo que será aberta, ligue o Output do seu Invoke com a variável dadosEmpregado, veja que estou ligando cada campo do retorno do Select com os campos que temos no XSD
Abra agora seu processo BPEL e arraste uma HumanTask para que fique abaixo do nosso Assign ResultadoSelect
Renomeie sua HumanTask1 para simplesmente HumanTask e dê um duplo clique sobre ela e será aberta a tela abaixo:
Ao lado direito acima clique no botão +
E na tela que será exibida preencha conforme abaixo:
- Name: Humantask
- Title: Human Task Bpel
Clique em OK na tela acima:
Clique novamente em OK na tela acima
Automaticamente será aberta a tela abaixo:
Ao lado esquerdo clique em Data e clique novamente no botão + e escolha a opção Add other parameter
Na tela abaixo, selecione a opção Element:
Clique então na Lupa e escolha a opção dadosEmpregado que estará dentro do seu Payload.xsd conforme abaixo:
Então clique em OK
Clique em OK novamente e então ficará assim:
Agora clique ao lado esquerdo em Assignment e dê um duplo clique sobre Stage1.Participant1 (Aqui pode estar com algum outro nome)
Na tela que será apresentada clique no botão + e clique em Add User
Agora em Value coloque o nome weblogic
Obs: Para que você entenda, estou colocando o usuario weblogic que será o usuário que irei logar na minha Worklist, mas este pode ser um Usuário ou Grupo de Usuários que podem se logar, isso então fica a critério de negócio !!!
Clique em OK, volte ao seu BPEL e dê um duplo clique sobre sua HumanTask
Será aberta a tela abaixo, então clique sobre o botão … que esta em BPEL Variable:
Selecione então dadosEmpregado, pois agora já sabemos que a varável Global já esta preenchida com o resultado do nosso Select.
Clique em OK
Clique em OK novamente
Pronto… Nosso processo Bpel já está criado e agora vamos apenas criar a partir de nossa HumanTask a nossa tela que será mostrada em nossa WorkList.
Para isso dê um duplo clique novamente em sua HumanTask que está dentro do seu composite.xml
Na tela abaixo no canto superior esquerdo clique em Create Form e em seguida em Auto-Generate Task Form…
Abaixo, dê o nome de HumanTaskBpelWEB para seu Projeto pois ele irá criar automaticamente um novo projeto separado apenas com a parte WEB que será sua Worklist.
Veja abaixo que agora teremos dois projetos, o HumanTaskBpel que terá nosso processo até a chamada da sua HumanTask e o projeto HumanTaskBpelWEB que terá sua pagina taskDetails1.JSPX o qual conterá os dados da sua tela do Worklist.
Pronto, já construímos o nosso processo até a chamada da nossa HumanTask, no próximo Post irei lhe explicar passo a passo como deve ser feito o deploy e como faremos para testar nosso processo.
Duvidas ? Deixe seu comentário
Abraços e até a Próxima
/:-D