O objetivo é alterar um dado através do formulário no banco.
Caminho feliz :) \o/
(1) Usuário altera os dados e clica no botão OK (no form)
(2) Sistema envia a variável "___pk" com o valor da chave primária + os campos preenchidos para o form.prg.
(3) save.prg recebe a variável "___pk", recebe os valores dos campos e realiza o UPDATE.
(4) navegador recebe uma mensagem de resposta, se for erro, exibe para o usuário.
Comentários :
******************************
Na parte cliente, resolvi deixar o código que trata do envio de dados do formulário em index.html
Chamei o botão do formulário de btnFormSubmit
<button id="btnFormSubmit" type="button" class="btn btn-primary">Ok</button>
Ao clicar em btnFormSubmit
$("#btnFormSubmit").click( function(){
$.ajax({
type: 'POST', <--- Agora é POST por causa dos vários campos. Pode ter upload de arquivos tb.
url: "save.prg",
data: $("#formData").serialize(), <--- Uma facilidade. Aqui eu pego automaticamente todos os campos do formulário.
async: false,
dataType: 'json',
success: function( data ){
switch ( data.Result ){
case 'OK':
$('#formModal').modal('toggle'); <----- toogle é tipo liga/desliga. Se a janela tiver aberta, fecha. Se tiver fechada, abre.
brw.refreshGrid();
brw.buttonUpdate(); <--- Poderia colocar esse método dentro de refreshGrid(), acho que vou fazer isso no futuro
break;
case 'ERRO': <--- Caso ocorra um erro na inserção
alert( data.Message ); <--- Exibe a mensagem de erro que veio do banco.
break;
}
}
}); // ajax
});
*****************************
No servidor eu recebo os dados (eles são enviados pelo método POST, por isso AP_PostPairs e não AP_GetPairs)
LOCAL hPost:= AP_PostPairs()
Uma regra que eu usava desde o Clipper: eu vou querer aproveitar esse mesmo arquivo (save.prg) para tratar a inclusão também, futuramente.
Qual critério devo adotar para diferenciar uma alteração e não uma inclusão ?
Eu adotei a seguinte regra : se a chave primária "vier" então é alteração.
IF hb_HHasKey( hPost , "___pk" )
Alguém faria diferente ?
****************************
Note que eu tenho 3 arquivos PRGs agora.
grid.prg --> retorna o JSON com o grid (paginação, etc)
form.prg --> preenche o formulário
save.prg --> salva os dados
Você pode querer fazer diferente, basta criar um padrão.
Para uma tabela de produtos, por exemplo:
produtos_grid.prg
produtos_form.prg
produtos_save.prg
Só uma ideia. Você pode querer unificar esses 3 em apenas 1, ou criar uma classe genérica, etc.
Acho que é só. O resto está no anexo.
Retirei do anexo o banco de dados MDB e as LIBS JQuery/Bootstrap para o arquivo não ficar muito grande. Tava com 700Kb, agora está bem menor. Para não ocupar espaço desnecessário na hospedagem. O banco de dados e as LIBS estão nos anexos anteriores.