Algumas vezes o componente Task Flow Return do ADF Task Flow, não se encaixa nos nossos requisitos de caso de uso, e ai temos que fazer o commit ou rollback da transação programaticamente. Dois casos que você provavelmente irá usar esse recurso são:
- Fazer o commit ou rollback da transação e permanecer no mesmo Task Flow.
- Adicionar algum código mais complexo para essas operações (Commit e Rollback).
Nesse post iremos fazer commit de uma transação programaticamente permanecendo na mesma página. Nós também iremos fazer rollback programaticamente.
Baixe a aplicação de exemplo: CommitRollbackProgrammaticApp.zip
Crie uma aplicação de acordo com a imagem abaixo.
Configure a Task Flow.
Clique duas vezes em ViewDepartment e crie a página.
Arraste o DepartmentView1 do painel Data Controls e solte dentro da página ViewDepartment. Selecione Table | ADF Read-only Table.
Selecione Single Row e clique em OK.
Inclua um botão após a tag af:table, e configure-o.
Vá até o DepartmentTaskFlow, clique duas vezes em EditDepartment e crie a página.
Arraste o DepartmentView1 do painel Data Controls e solte dentro da página EditDepartment. Selecione Form | ADF Read-only Form, e clique em OK.
Inclua dois botões após a tag af:panelFormLayout, e configure-os.
Vá até o DepartmentTaskFlow, clique duas vezes em Commit e crie o DepartmentBean.
Crie o método commit também.
Vá até o DepartmentTaskFlow, clique duas vezes em Rollback e selecione o DepartmentBean.
Crie o método rollback.
Vá até o DepartmentBean e implemente os métodos com esses trechos de código.
public void commit() { BindingContext bc = BindingContext.getCurrent(); String dcfName = bc.getCurrentDataControlFrame(); DataControlFrame dcf = bc.findDataControlFrame(dcfName); dcf.commit(); } public void rollback() { BindingContext bc = BindingContext.getCurrent(); String dcfName = bc.getCurrentDataControlFrame(); DataControlFrame dcf = bc.findDataControlFrame(dcfName); if (dcf.isTransactionDirty()) { dcf.rollback(); } }
Agora temos que definir a propriedade Fixed Outcome dos componentes Commit e Rollback.
Vá até o DepartmentTaskFlow, selecione o componente Commit e altere a propriedade Fixed Outcome para commit. Depois, selecione o componente Rollback e altere a propriedade Fixed Outcome para goViewDepartment.
Salve tudo, e execute o Task Flow.
Para testar a operação de commit, selecione um departamento e clique em Edit.
Faça algumas alterações e clique em Save.
Clique em Back para ir a lista de departamentos.
Observe o departamento que você editou.
Para testar a operação de rollback, selecione outro departamento e faça algumas alterações.
Se você apenas clicar em Back, as alterações serão desfeitas.