Phoenix Criminal Lawyer

BPEL com IF

Um item muito útil no desenvolvimento do BPEL é a utilização de IF, com esse componente podemos definir que tipo de ação a chama de serviço deverá executar. Neste post vou trabalhar a parte de inserção, remoção e atualização dos dados utilizando um DBAdapter para efetuar a conexão. Para saber mais sobre DBAdapter, acesse: http://brunogualda.com.br/utilizando-bpel-com-dbadapter/.

Caso este seja seu primeiro contato com BPEL, seria interessante dar uma olhada neste tutorial para se familiarizar: http://brunogualda.com.br/introducao-ao-bpel/.

Com o novo projeto criado, vamos adicionar primeiramente a condição IF em nosso BPEL. Para isso, clique em BPEL Constructs, verifique que no final haverá um ícone  , adicione entre receiveInput e replyOutput. Por padrão, o IF adicionado contém as verificações IF e ELSE, como precisaremos de mais um entrada para fazer a verificação, selecione o IF adicionado, você irá notar que um botão de + será habilitado no lado esquerdo, clique sobre ele e adicione um “Else If”. Você irá nota que agora o IF contém as seguintes condições IF, ELSESIF e ELSE. A quantidade de elseif pode ser adicionado conforme sua necessidade.

Agora, vamos adicionar um Assing  para cada condição e um Invoke . Nesse ponto sua tela deverá estar conforme apresentada abaixo:

Abra o arquivo BPELWithIF.xsd e altere as variáveis de entrada conforme sua necessidade, no meu caso estou trabalhando apenas com quatro variáveis que serão responsáveis por passar o valor a base (cod_pessoa, nome, idade e fone) e também é necessário adicionar mais uma variável, por exemplo TIPO, que será onde iremos definir dentro do nosso IF qual operação deverá ser executada. Note na imagem abaixo que a variável cod_pessoa contém o elemento “minOccurs=0“, isso tira a obrigatoriedade do preenchimento do campo. Outro elemento que temos é o nillable, este, especifica se o valor declarado nulo pode ser atribuído ao elemento. Para saber mais veja em http://www.w3schools.com/schema/schema_complex_indicators.asp.
A definição pode ser feita atrávés do arquivo XSD conforme pode ser notado na imagem abaixo, ou ainda, você pode alterar no “Property Inspector” no título XML Schema.

De volta ao BPEL, vamos agora definir os valores na condição do IF, para isso, clique no campo label do IF. Nesse ponto vamos definir a condição que o IF deverá executar, então, clique sobre o ícone  e a tela do Expression Builder será aberta, então, vá até inputVariable > payload > client:process, adicione a variável tipo (ou a que você criou) no campo Expression clicando duas sobre ela, determine qual o valor de execução, no meu caso ‘insercao’ e clique em OK. Veja:

Repita o procedimento para o elseif que no meu caso passei o valor atualizar, e em else utilizei o nome de delete. Neste último, não será necessário configurar o valor da variável tipo, pois, caso a condição não satisfaça será direcionado a fazer a opção de delete.

Vamos então adicionar o DBAdapter para efetuar a conexão com a base de dados. Qualquer dúvida sobre este procedimento veja mais em: http://brunogualda.com.br/utilizando-bpel-com-dbadapter/.

Quando chegar em Operation Type, selecione “Perform an Operation on a Table” e marque as seguintes opções: “Insert or Update (merge)”, “Insert Only” e “Delete”.

Faça o import da tabela na tela seguinte, clique em next e pode ignorar a tela de relacionamento, pois não teremos relacionamento com tabelas nesse exemplo. Clique em next novamente, na tela que surge é possível notar os campos selecionados da tabela inclusive o campo cod_empresa que será nossa sequence. Na tela seguinte de opções avançadas, em sequence clique em search para localizar as sequences que contém na base e selecione a opção cod_pessoa, clique em next e finish.

Clique em OK para concluir a criação do partner link.
Agora vamos efetuar o relacionamento dos invokes com o DbAdapter adicionado anteriormente. No invoke do If, selecione-o e clique em editar, definia um nome, no meu caso “insercao”, clique sobre a lupa no campo partner link e selecione o DbAdapter criado e clique em OK.

Você irá notar que os campos Port Type e Operation serão carregados. No campo operation selecione a opção de insert, agora vamos criar as variáveis de entrada e saída (input e output).

Repita o procedimento para o elseif, alterando o campo operation para “merge“. E por último altere no else passando “delete” no campo operation. Note que ao selecionar a opção delete, o campo output é automaticamente desativado, pois, ao executar essa operação não é necessário um retorno.

Vamos agora efetuar a atribuição dos valores das variáveis criada com a base de dados. Em If, selecione o Assign e clique em editar, primeiramente vá até a aba General e altere o nome para algo mais amigável, no meu caso atribuiInsert. Feito isso, volte para Copy Rules e vamos efetuar a atribuição dos valores. No lado esquerdo, expanda inputVariable até que as variáveis adicionadas em nosso XSD no começo do tutorial estajam visíveis, repita o procedimento do lado direito, porém, como vamos efetuar a inserção dos dados, expanda a variável que criou no momento da edição do invoke, no meu caso insercao_InputVariable. Você deverá expandir até que as variáveis estajam visíveis. O caminho para chegar até elas no meu exemplo é: insercao_InputVariable > PessoaCollection > ns2:PessoaCollection: PessoalCollection > ns2:Pessoa : Pessoa.
Feito isso, efetue a atribuição referente a cada variável conforme apresentado abaixo. Note que nosso elemento cod_pessoa não foi selecionado, isso porque trata-se do elemente que será responsável por receber nossa sequence, e assim, sua atribuição é feita de maneira implícita.

Repita o procedimento de edição de do Assign agora no elseif, porém, neste vamos fazer a atribuição para todos os elementos, inclusive para nosso cod_pessoa. Veja:

E por fim, edite o Assign do else, onde nosso único elemento que será atribuído será a nossa sequence, ou seja, cod_pessoa.

Agora, com os procedimentos acima finalizado efetue o deploy. Veja mais sobre como efetuar deploy no weblogic em: http://brunogualda.com.br/como-efetuar-deploy-do-jdeveloper-no-weblogic/.

Com o deploy efetuado, vamos testar a aplicação. Primeiramente vamos efetuar um inserção na tabela pessoa, passe os valores de cada elemento, no elemento tipo passe o valor que foi definido na condição do if. Veja: http://brunogualda.com.br/blog/wp-content/uploads/2012/02/Screen_Definition_IF_Value1.png. No meu caso o valor é

Ao clicar em testar, se tudo estiver OK, você poderá notar na tabela que todos os campos foram preechidos, inclusive o campo cod_pessoa que não passamos valor, pois como foi dito anteriormente trata-se da nossa sequence que é gerada automanticamente. Insira mais um ou dois elementos apenas para popularmos a tabela. Feito isso, vamos efetuar a atualização de um de nossos dados inseridos, para isso, irá precisar preenchar o valor de todos os elementos, inclusive do cod_pessoa. Então, passe o cod_pessoa, altere o nome, idade e telefone, assim terá a dimensão de como ocorreu a atualização, feito isso, clique em Test Web Service e verifique em sua base de dados se os campos foram atualizados. Agora, vamos testar a remoção de um dado base, para isso, basta selecionar o cod_pessoa da pessoa que deseja remover e passar no elemento correspondente, para os demais campos podemos passar qualquer coisa, pois não irá influenciar no resultado final.

Download do projeto

Testebot