Update
Início  Anterior  Próximo

minilogowi


seta Update



O componente Update possibilita que o desenvolvedor envie comandos de atualizações para banco de dados. Esse componente oferece um recurso chamado de update múltiplo que possibilita que o mesmo Update seja executado tantas vezes quanto um valor definido em uma única ação do usuário.

Para habilitar o recurso de update múltiplo o desenvolvedor precisará definir valores para os campos
Quantidade, Prefixo e Condição para cada linha, o preenchimento do campo Objeto é opcional.

Para exemplificar o uso desse recurso suponha que se deseje criar um formulário de cadastro de novos itens de um estoque onde se possibilite o cadastro de vários itens simultaneamente. O código-fonte para esse formulário poderia ser algo parecido com o que segue abaixo:

...
<FORM ACTION="/|wi.proj.id|/|wi.page.id|.wsp" METHOD="post">
<TABLE>
<TR>
<TH>Código do Item</TH>
<TH>Nome do Item</TH>
<TH>Quantidade em Estoque</TH>
</TR>
<TR>
<TD><INPUT TYPE="text" NAME="tmp.update[1].codigo"></TD>
<TD><INPUT TYPE="text" NAME="tmp.update[1].nome"></TD>
<TD><INPUT TYPE="text" NAME="tmp.update[1].qtidade"></TD>
</TR>
<TR>
<TD><INPUT TYPE="text" NAME="tmp.update[2].codigo"></TD>
<TD><INPUT TYPE="text" NAME="tmp.update[2].nome"></TD>
<TD><INPUT TYPE="text" NAME="tmp.update[2].qtidade"></TD>
</TR>
<TR>
<TD><INPUT TYPE="text" NAME="tmp.update[3].codigo"></TD>
<TD><INPUT TYPE="text" NAME="tmp.update[3].nome"></TD>
<TD><INPUT TYPE="text" NAME="tmp.update[3].qtidade"></TD>
</TR>
<TR>
<TD COLSPAN="3" ALIGN="center">
<INPUT TYPE="submit" NAME="tmp.cadastrar" VALUE="Cadastrar">
<INPUT TYPE="reset"></TD>
</TR>
</TABLE>
</FORM>
...


Há alguns detalhes a serem percebidos no formulário acima. Primeiramente, todos os campos do formulário possuem o prefixo
tmp.update em comum e o valor do passo da iteração encontra-se entre colchetes, então no momento da definição do componente Update o campo Prefixo deveria ser preenchido com tmp.update[].

O outro detalhe a ser considerado é que para referenciar os campos do formulário no comando a ser enviado ao banco de dados o valor do passo da iteração deve ser omitido. Tomando como exemplo os campos do formulário acima bastaria referenciar
tmp.update.codigo, tmp.update.nome, tmp.update.qtidade pois os valores do passo da iteração são substituídos internamente pelo componente Update.

O
Auto-Commit indica se um grupo de instruções SQL serão executadas individualmente ou executadas agrupadamente em uma única transação.

Se este
check-box estiver marcado então todas as instruções serão executados individualmente, ou seja, a execução de uma instrução não influenciará na execução da outra.

Caso o campo não esteja marcado as instruções serão agrupados em uma única transação a ser enviada ao SGBD e ao término da transação um commit será executado para persistir todas as alterações, se ocorrer algum erro durante o processamento da transação um
rollback será automaticamente executado revertendo as tabelas para o estado em que se encontravam antes do início da execução da transação.

Um detalhe a ser levado em consideração é que o suporte ao controle de transações depende exclusivamente do sistema gerenciador de banco de dados e/ou da versão do driver JDBC que estejam sendo usados, portanto, assegure-se disso antes de desabilitar o campo
Auto-Commit.

O campo
Banco de Dados indica o identificador de um dos servidores de bancos de dados definidos para o projeto que será usado para executar o comando.

O campo
Condição contém a expressão condicional a ser testada para saber se o componente deverá ser processado. Para saber maiores detalhes sobre as possíveis construções de condições clique aqui.

O campo
Condição Para Cada Linha define a condição a ser testada antes de que cada iteração do evento Update Múltiplo seja realizada. Caso o desenvolvedor tenha definido o campo Quantidade com 10 então, durante as 10 iterações, essa condição será testada.

Se este campo for deixado em branco e o desenvolvedor queira utilizar o recurso de update múltiplo a condição será avaliada como
FALSE e o Update não será realizado em nenhuma das iterações. Então caso se queira que sempre todos os Updates sejam executados coloque TRUE como sendo a condição desse campo.

O campo
Descrição serve para que o desenvolvedor da aplicação escreva um breve comentário sobre a ação a ser executada pelo componente em questão.

O campo
Filtrar define quais os caracteres que deverão ser filtrados do conteúdo das variáveis de sessão do WebIntegrator que estão sendo referenciadas no campo SQL antes da execução do comando. O objetivo é impedir que certos caracteres sejam passados para o comando a ser executada pelo banco de dados evitando que assim que o resultado do comando não seja intencionalmente alterado.

Como exemplo suponha que haja a instrução
SELECT * FROM tabCadastros WHERE nome LIKE |tmp.nome|% AND publico = 1 e o usuário da aplicação ao preencher o formulário coloque no campo correspondente à variável tmp.nome um valor como % OR nome = . Se o campo Filtrar não estiver definido com os caracteres %, o WebIntegrator irá processar a seguinte instrução: SELECT * FROM cadastros WHERE nome LIKE % OR nome = % AND publico = 1, retornando como resultado todos as linhas da tabela.

O campo
Mensagem OK define a mensagem que será gravada no objeto definido no campo Resposta (objeto) caso o evento tenha sido executado com sucesso. Quando se usa o recurso de update múltiplo é gerada uma mensagem para cada iteração do evento, para obter a mensagem específica de um dos passos da iteração use a seguinte sintaxe:

<objeto-resposta>.<passo-da-iteração>

Por exemplo, para acessar o segundo passo de uma iteração de um update múltiplo cujo objeto-resposta seja
tmp.respObj bastaria refenciar |tmp.respObj.2|.

O campo
Objeto contém o identificador de um componente do tipo Objeto que tenha sido definido anteriormente no mesmo evento de página (pré-página ou pós-página) onde está sendo definido esse Update. A cada passo de iteração do evento Update Múltiplo esse componente Objeto será executado.

O campo
Prefixo indica qual o prefixo comum dos nomes dos campos do formulário que serão usados durante a execução do componente Update. Esse prefixo irá auxiliar o recurso de update múltiplo a descobrir quais as variáveis que estão no contexto do WebIntegrator que serão usadas durante a iteração.

Para um correto funcionamento do recurso de update múltiplo os nomes dos campos do formulário referenciados pelo componente Update devem estar da seguinte forma:

<prefixo><1..quantidade>.<identificador-do-campo>

Para oferecer compatibilidade com a sintaxe de Objetos o desenvolvedor poderá definir o prefixo finalizando com
[]. Com o prefixo terminando com [] se está informando ao WebIntegrator que as variáveis do contexto do WebIntegrator a serem utlizadas pelo update múltiplo estão na seguinte forma:

<prefixo>[<1..quantidade>].<identificador-do-campo>

Com esta última forma o desenvolvedor poderá fazer uso de resultados armazenados em um Objeto diretamente em update múltiplo.

O campo
Quantidade indica quantas vezes esse evento será executado. Este campo apenas deve ser preenchido quando o recurso de update múltiplo for utilizado.

O campo
Resposta (objeto) indica o nome do objeto que receberá uma das mensagens definidas para o componente de acordo com o resultado final (sucesso/falha) da execução do comando enviado ao banco de dados.

O campo
SQL contém o comando que será enviado para ser processado pelo banco de dados. Caso o comando seja composto por mais de uma instrução SQL separe-as por ponto-e-vírgula.

No componente Upload de Banco de Dados o valor da coluna relativo ao conteúdo deverá ser referenciado por um sinal de interrogação, exemplo:
INSERT INTO MinhaTabela (arquivo, conteudo) VALUES (|tmp.arquivo|, ?).

A estrutura do comando a ser executado é dependente do banco de dados, podendo ser feitas chamadas a stored procedures, rotinas M (através do MJava), métodos de objetos do CachéFactory, execução de instruções SQL, etc. Para saber maiores detalhes como fazer essas chamadas clique aqui.