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:

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

Imagem Blog UansCarvalho

Veja abaixo em poucos detalhes que criei um processo BPEL chamando um DBAdapter

Imagem Blog UansCarvalho

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.

Imagem Blog UansCarvalho

Abaixo veja no XML o resultado deste select:

Imagem Blog UansCarvalho

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>

Imagem Blog UansCarvalho

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)

Imagem Blog UansCarvalho

Será aberta a tela abaixo, então clique no botão +

Imagem Blog UansCarvalho

Em Name coloque dadosEmpregado e clique em Element, depois dentro do seu Payload.xsd escolha dadosEmpregado e clique em OK

Imagem Blog UansCarvalho

Então ficará assim:

Imagem Blog UansCarvalho

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

Imagem Blog UansCarvalho

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

Imagem Blog UansCarvalho

Abra agora seu processo BPEL e arraste uma HumanTask para que fique abaixo do nosso Assign ResultadoSelect

Imagem Blog UansCarvalho

Renomeie sua HumanTask1 para simplesmente HumanTask e dê um duplo clique sobre ela e será aberta a tela abaixo:

Imagem Blog UansCarvalho

Ao lado direito acima clique no botão +

E na tela que será exibida preencha conforme abaixo:

  • Name: Humantask
  • Title: Human Task Bpel

Imagem Blog UansCarvalho

Clique em OK na tela acima:

Imagem Blog UansCarvalho

Clique novamente em OK na tela acima

Automaticamente será aberta a tela abaixo:

Imagem Blog UansCarvalho

Ao lado esquerdo clique em Data e clique novamente no botão + e escolha a opção Add other parameter

Imagem Blog UansCarvalho

Na tela abaixo, selecione a opção Element:

Imagem Blog UansCarvalho

Clique então na Lupa e escolha a opção dadosEmpregado que estará dentro do seu Payload.xsd conforme abaixo:

Imagem Blog UansCarvalho

Então clique em OK

Imagem Blog UansCarvalho

Clique em OK novamente e então ficará assim:

Imagem Blog UansCarvalho

Agora clique ao lado esquerdo em Assignment e dê um duplo clique sobre Stage1.Participant1 (Aqui pode estar com algum outro nome)

Imagem Blog UansCarvalho

Na tela que será apresentada clique no botão + e clique em Add User

Imagem Blog UansCarvalho

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 !!!

Imagem Blog UansCarvalho

Clique em OK, volte ao seu BPEL e dê um duplo clique sobre sua HumanTask

Imagem Blog UansCarvalho

Será aberta a tela abaixo, então clique sobre o botão … que esta em BPEL Variable:

Imagem Blog UansCarvalho

Selecione então dadosEmpregado, pois agora já sabemos que a varável Global já esta preenchida com o resultado do nosso Select.

Imagem Blog UansCarvalho

Clique em OK

Imagem Blog UansCarvalho

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

Imagem Blog UansCarvalho

Na tela abaixo no canto superior esquerdo clique em Create Form e em seguida em Auto-Generate Task Form…

Imagem Blog UansCarvalho

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.

Imagem Blog UansCarvalho

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.

Imagem Blog UansCarvalho

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