Transação Manual para Ações
Ao cadastrar uma ação do tipo "Rotina no Banco de Dados", "Rotina Java" ou "Script (Java Script)" é possível marcar a opção "Controle de transação manual". Essa opção vem desmarcada por padrão.
Caso esteja marcada, o controle de transação com o banco de dados deve ser feito no seu respectivo script, de acordo com sua necessidade.
Se estiver desmarcada, o funcionamento continua da mesma forma que antes, ou seja, o sistema automaticamente controla a transação e faz o commit no final da execução do script e o rollback, caso haja erro na execução do script.
É necessário incluir o "jape.jar" no buildpath para importar o JapeSession e SessionHandle. A seguir, temos um exemplo de script Java para controlar transação manual:
import br.com.sankhya.extensions.actionbutton.AcaoRotinaJava;
import br.com.sankhya.extensions.actionbutton.ContextoAcao;
import br.com.sankhya.extensions.actionbutton.QueryExecutor;
import br.com.sankhya.extensions.actionbutton.Registro;
import br.com.sankhya.jape.core.JapeSession;
import br.com.sankhya.jape.core.JapeSession.SessionHandle;
public class TesteBotaoAcaoGustavo implements AcaoRotinaJava {
public void doAction(final ContextoAcao ctx) throws Exception {
SessionHandle hnd = null;
final Registro[] linhas = ctx.getLinhas();
try {
hnd = JapeSession.open();
hnd.execWithTX(new JapeSession.TXBlock() {
public void doWithTx() throws Exception {
int i = 0;
while (i < linhas.length) {
linhas[i].setCampo("TESTE", 1);
linhas[i].save();
i++;
}
}
});
hnd.execWithTX(new JapeSession.TXBlock() {
public void doWithTx() throws Exception {
int i2 = 0;
while (i2 < linhas.length) {
linhas[i2].setCampo("TESTE", 2);
linhas[i2].save();
ctx.mostraErro("Cancelando alterações, os TESTE devem estar 1.");
i2++;
}
}
});
} finally {
JapeSession.close(hnd);
}
}
}
O código acima utilizará várias linhas de uma tabela adicional que tem um campo TESTE, e coloca todos os TESTE=1, e depois insere 2, daí cancelamos a segunda transação e os campos TESTE são alterados com sucesso para 1, ou seja, mesmo havendo um erro que fará o rollback na segunda transação, a primeira transação que muda o TESTE para 1 é executada e feito commit com sucesso.
Como tirar dúvidas?
Para tirar dúvidas e compartilhar informações, use a sala Botões de Ação da comunidade Sankhya Developer.
Updated almost 3 years ago