Oracle ADF 12c: Comunicação entre Task Flows com Task Flow Parameters.

Por Waslley Souza
Postado em Agosto 2014

Para criar uma aplicação empresarial, geralmente é necessária a utilização de vários Task Flows. Esses Task Flows executarão funções diferentes, mas eles podem ter de se comunicar. Para possibilitar essa comunicação, você pode utilizar Task Flow Parameters, Contextual Events ou compartilhamento de instâncias do Data Control.

Obs.: Registrar parâmetros dentro do escopo de sessão com um Task Flow e usá-los em outro Task Flow não é uma boa prática, não use!

Neste artigo irei apresentar o Task Flow Parameters, criando a navegação entre duas páginas. A primeira irá mostrar a lista de empregados, e a segunda, as informações do empregado selecionado.

Para isso, nós precisaremos somente do JDeveloper 12c (12.1.3.0.0) e o schema HR.

Crie um ADF Fusion Web Application com o nome TaskFlowParamApp. 

Crie o Business Components, utilizando a tabela Employees.

Primeiro vamos criar o Task Flow que contém o fluxo/regra de apresentação das informações de empregados. Selecione o projeto ViewController e crie um ADF Task Flow com o nome EditEmployeeTaskFlow.

Desmarque a opção “Create with Page Fragments”, para que as views sejam criadas como páginas completas, ao invés de fragmentos. Essa configuração é necessária, pois os fragmentos de páginas só executam quando estão inseridas dentro de páginas completas.

Arraste para dentro do EditEmployeeTaskFlow, os componentes Method Call, View e Task Flow Return, localizados no painel Components. Conecte-os utilizando o componente Control Flow Case.

Nomeie os componentes: Method Call como setEmployeeId, View como Edit Employee, Task Flow Return como TaskFlowReturn, e os Control Flow Case como goEditEmployee e goTaskFlowReturn.

A atividade padrão (Default Activity) é o ponto de entrada do Task Flow, e é sinalizada pelo circulo verde. No  EditEmployeeTaskFlow a atividade padrão é o setEmployeeId. Caso não seja, selecione o setEmployeeId e clique no ícone da bolinha verde.

No painel Data Controls, navegue até AppModuleDataControl > EmployeesView1 > Operations. Arraste a operação setCurrentRowWithKey e solte no componente setEmployeeId.

Na janela Edit Action Binding, configure o parâmetro rowKey com o valor #{pageFlowScope.employeeSelected}, e clique em OK. A operação setCurrentRowWithKey pega o parâmetro de entrada (ID do empregado), e configura o iterator do EmployeesView1 para que o registro com esse ID seja o registro corrente.

Navegue até Overview > Parameters, e adicione o parâmetro de entrada do Task Flow. O nome deve ser employeeSelected, a classe java.lang.String, o valor #{pageFlowScope.employeeSelected}, e não deve ser obrigatório (required = false).

Dê duplo clique no componente EditEmployee, e clique em OK para criar a página Edit Employee.jsf.

Para criarmos o formulário que irá apresentar as informações do empregado selecionado, navegue até o painel Data Controls, expanda o AppModuleDataControl, selecione o EmployeesView1, arraste-o para dentro da página ViewEmployees.jsf, e selecione a opção ADF Form.

Marque a opção Submit, e clique em OK para criar o formulário.

No formulário, selecione o botão Submit e no painel Properties altere as propriedades Text para Back e Action para goTaskFlowReturn.

Com essa configuração, quando clicarmos no botão Back, o fluxo goTaskFlowReturn será executado, e o componente TaskFlowReturn irá retornar a navegação para o Task Flow que iniciou a execução do EditEmployeeTaskFlow.

Agora vamos criar a página que contém o fluxo/regra de listagem de empregados. Navegue até o projeto ViewController > Web Content > Page Flows e abra o arquivo adfc-config.xml. Esse arquivo representa o Unbounded Task Flow padrão da aplicação.

O Bounded Task Flow é uma forma especializada de Task Flow, tendo apenas um ponto de entrada e zero ou mais pontos de saída. Já o Unbounded Task Flow pode possuir uma coleção de atividades e regras de controle de fluxo, com vários pontos de entrada e vários pontos de saída. Uma aplicação tipica é a combinação de um Unbounded e um ou mais Bounded Task Flows.

Arraste para dentro do adfc-config.xml, o componente View, localizado no painel Components, e o arquivo EditEmployeeTaskFlow.xml localizado no projeto ViewController. Conecte-os utilizando o componente Control Flow Case, localizado no painel Components.

Nomeie os componentes: View como View Employees e o Control Flow Case como goEditEmployeeTaskFlow.

Dê duplo clique no componente ViewEmployees, e clique em OK para criar a página View Employees.jsf.

Para criar a tabela de empregados, navegue até o painel Data Controls, e expanda o Data Control AppModuleDataControl. Selecione o EmployeesView1, arraste-o para dentro da página ViewEmployees.jsf, e selecione Table/List View > ADF Table.

Marque as opções Single Row e Read-Only Table, e clique em OK para criar a tabela.

Iremos utilizar o componente Panel Collection, que ao emoldurar a tabela, adiciona várias funcionalidades a ela. Para isso navegue até o painel Structure, clique com o botão direito no nó af:table -t1 e selecione a opção Surround With.

Selecione o componente Panel Collection, e clique em OK.

Adicione um botão para navegar para a tela que irá mostrar os dados do usuário selecionado. >No Panel Collection, clique com o botão direito em toolbar e selecione Insert Inside Facet toolbar > Toolbar.

Novamente no Panel Collection, clique com o botão direito em toolbar e selecione Insert Inside Toolbar > Button.

Selecione o botão, e no painel Properties altere as propriedades Text para Edit e Action para goEditEmployeeTaskFlow.

Com essa configuração, quando clicarmos no botão Edit, o fluxo goEditEmployeeTaskFlow será executado, inicializando o Task Flow EditEmployeeTaskFlow com o empregado selecionado.

Configure o botão Edit para que o ID do empregado selecionado seja enviado para o EditEmployeesTaskFlow. Clique com o botão direito no botão Edit e selecione a opção Insert Inside Button > Browse. Na janela Insert Item, selecione o componente Set Action Listener e clique em OK.

Na janela Insert Set Action Listener, complete o campo From com  #{bindings.EmployeesView1Iterator.currentRowKeyString} e o campo To com #{pageFlowScope.employeeSelected}, e clique em OK.

Pronto! Agora é só executar!

Navegue até o projeto ViewController, clique com o botão direito no arquivo adfc-config.xml e selecione Run.

Na janela Set Run Configuratiom, selecione a opção ViewEmployees no campo View Activity, e clique em OK.

A aplicação irá executar automaticamente no seu navegador de internet.

Selecione um registro de empregado e clique no botão Edit para ir para a próxima tela.

 

Os dados do empregado selecionado irão aparecer no formulário.

Clique no botão Back para voltar a lista de empregados.

Waslley Leandro de Souza, é Consultor Oracle com foco em tecnologias Oracle Fusion Middleware e SOA. Pós-graduado em Engenharia de Software com ênfase em SOA e bacharel em Ciências da Computação. Possui as certificações: Oracle Application Development Framework 11g Certified Implementation Specialist; Oracle WebCenter Portal 11g Certified Implementation Specialist; Oracle Certified Expert, Java Platform, EE 6 Web Component Developer; Oracle Certified Professional, Java SE 6 Programmer.