Autoguardar fila en Aplicación de Tipo "Formulario Vista de Grid Editable"

452 views
Skip to first unread message

Fausto

unread,
Apr 25, 2020, 1:29:05 AM4/25/20
to comunidad-scrip...@googlegroups.com



Se busca que al salir del campo Code2 la fila sea guarda de forma automática sin tener que tocar el botón de guardar.


problema a solucionar.png


1.- Crear un campo llamado fila_numero para obtener el número de fila que estamos actualizando o insertando.


1_Crear_Campo_Fila_numero.png

2.- Configurar el campo creado como oculto:

2_Configurar_como_campo_oculto.png


3.- En el evento onLoadrecord asignar la secuencia al campo fila_numero:


3_Asignar_secuencia_de_la_fila.png


onLoadrecord:


{fila_numero} = $sc_seq_vert;




4.- Crear método javascript que contendrá las instrucciones para guardar el registro:

4_crear_metodo_javascript.png


Método javascript auto_update(par_fila)

findPos(this); 
nm_atualiza_line( (sc_insert_open?'incluir':'alterar'), par_fila); 
return false;

Nota: el método javascript de la imagen en la fila 2, no detecta si se esta actualizando o insertando registro, en el código anterior ya está corregido.



5.- Por último crear el evento ajax que disparará el proceso de guardado del método javascript previamente creado:

4_crear_el_evento_ajax.png

6.- Llamar el método Javascript desde el evento ajax :

d_llamar_metodo.png


Evento Ajax Code2_onBlur


sc_ajax_javascript('auto_update', array({fila_numero}));





Espero que esto sea de ayuda!









Fausto

unread,
Apr 25, 2020, 3:06:47 AM4/25/20
to comunidad-scrip...@googlegroups.com
En el paso #3 es necesario cambiar las instrucciones del método JavaScript por las siguientes :

findPos(this); 
nm_atualiza_line( (sc_insert_open?'incluir':'alterar'), par_fila); 
return false;


Podemos notar el cambio en la segunda línea de código, se introduce la variable javascript de scriptcase sc_insert_open (guarda verdadero cuando se está creando un nuevo registro) , por lo que al llamar la función nm_atualiza_line ahora podemos especificar que tipo de operación estamos realizando.
Message has been deleted

Fausto

unread,
Sep 10, 2023, 10:42:42 AM9/10/23
to Comunidad ScriptCase Latino
Una forma diferente de hacerlo, pero un poco mas robusta y flexible, que además tiene la ventaja de que solo guarda cuando detecta modificaciones en el registro y si no detecta modificaciones cancela la edición de la fila :

OnScriptIni
$autoSaveFld ='contrato'; // Campo donde se activará el auto-save
$thisAppName = basename(__DIR__);
?>
<script>
    $(function(){
        // Activar el autosave en el onblur del campo $autoSaveFld
        window.sc_<?=$thisAppName.'_'.$autoSaveFld?>__onblur = function(oThis, iSeqRow) {
            do_ajax_<?=$thisAppName?>_validate_<?=$autoSaveFld?>_(iSeqRow);
            scCssBlur(oThis, iSeqRow);
            if ( iAjaxNewLine !== ''  && iSeqRow == iAjaxNewLine ) {
                $("#sc_ins_line_"+iSeqRow).click();
            } else {
                if (scFormHasChanged == true)
                    $("#sc_upd_line_"+iSeqRow).click();
                else
                    $("#sc_cancelu_line_"+iSeqRow).click();
            }
        }
    });
</script>
<?php

Con esta técnica solo es necesario copiar el código en el  onScriptInit y cambiar el campo donde se activará el auto-guardado ($autoSaveFld) y listo.

ED DEV

unread,
Apr 25, 2025, 4:14:45 PMApr 25
to Comunidad ScriptCase Latino
Buenas! Estoy replicando estos mismos pasos que haz creado tanto la alternativa como el método JavaScript tengo un problema, yo cuando hago la llamada desde mi evento ajax del campo que deseo que sea el disparador la macro  sc_ajax_javascript No se dispara... 

también defino mi campo virtual {sqline} = $sc_seq_vert; en el mismo evento onloadrecord. 

la diferencia que tengo es que yo realizo console.log... para ver si se ejecuta el método JavaScript y no lo hace.. pero si desde el navegador en la consola llamo a la función efectivamente funciona. Solo al llamar desde el ajax o cualquier otro lado dentro de scriptcase no me funciona. 

Sera que me podría ayudar por favor, porque estoy hace dos dias con este dilema. 
 La versión de ScriptCase es: 9.11.011
Formulario : Tipo Grid Editable

También probé que mi campo virtual sea tanto de tipo numérico y texto. 


GERARDO BECERRA YAÑEZ

unread,
Jun 14, 2025, 7:55:45 AMJun 14
to Comunidad ScriptCase Latino
que interesante,  durante un tiempo requeria algo, asi gracias @Fausto por sus aportes, tengo la version 9.12 lo voy a probar y les cuento
Reply all
Reply to author
Forward
0 new messages