posiblemente en versiones posteriores Netmake solucione los misterios de los formularios modal, que para mí se tornan un poco impredecibles.
Problema:
Una aplicación grid (app_grid_origen) que lanza otra aplicación grid modal (app_grid_modal) a través de un "botón de enlace" para seleccionar registros por medio de un botón run :
El método onFinish del botón run debería, al terminar de procesar, retornar a
app_grid_origen, esto no ocurre aun utilizando la macro
sc_exit(), por otro lado existen soluciones que involucran javaScript, pero estas no pueden ser aplicadas por dos razones:
- La aplicación grid no implementa la macro sc_ajax_javascript.
- La aplicación grid no trae opciones para crear método javaScript aunque es posible crearlo por código y etiquetas en cualquiera de los eventos que expone en el nodo Eventos.
Solución (probado en SC 9.4.027):
Paso 1. En app_grid_origen en el evento onScriptinit haremos uso de la macro: sc_url_exit, esto es para evitar que se genere un ciclo infinito entre la app_grid_origen y app_grid_modal :
//onScriptinit de app_grid_origen
sc_url_exit('app_principal');
sc_url_exit(url) : Esta macro modifica la URL de salida de la aplicación.
Paso 2. En el atributo target del BOTON RUN de la app_grid_modal pondremos en valor 'La misma ventana'.
Paso 3. En el evento onFinish del botón run de app_grid_modal utilizaremos la macro sc_redir esto debe de ser colocado después del procesamiento de los registros.
//onFinish de app_grid_modal
sc_redir('app_grid_origen','',"_parent");
sc_redir (Aplicación, Parámetro01; Parámetro02; Destino, Error, height_modal, width_modal) :
Esta macro se utiliza para redirigir el procesamiento a otra aplicación o URL.
Si el redir utiliza parámetros, estos deben pasarse en el siguiente formato:
1) Después del nombre de la aplicación, use el delimitador de coma (,) luego
3) Más de un parámetro, debe estar separado por punto y coma (;)
4) El objetivo determina qué aplicación se abre (por defecto = _self): _self, _parent, _blank o modal.
5) Parámetro opcional para establecer la redirección de mensajes de error en la aplicación: "F" redirige si hay un error en la aplicación (valor predeterminado) y "E" no redirige.
Observación: Si su conexión utiliza el control de transacciones, el uso de esta macro en los eventos onAfterInsert, onafterupdate, onAfterDelete, onBeforeInsert, Onbeforeupdate o onBeforeDelete debería venir después del uso de la macro sc_commit_trans, de esta manera guardará los cambios en el formulario.
Esta macro no admite el uso del parámetro Modal cuando se utiliza en un botón Ejecutar.