El formulario detalle, puede tener una opción que modifica directamente el registro del formulario principal, y al regresar a éste lo ideal es ver la información actualizada.
La siguiente imagen muestra un formulario con dos líneas de algún diario X.
Al presionar el botón líneas, nos vamos al formulario siguiente
Donde al presionar "Finalizar", esperamos que el Status del formulario principal se actualice automáticamente al momento de obtener el enfoque.
Para lograr eso podemos utilizar varios métodos, en este post se explica como hacerlo a través de la invocación a un método del formulario principal desde el formulario detalle.
1. Lo primero es asegurarnos que al iniciar el Formulario Detalle, éste tenga dentro de sus argumentos el caller definido, para ello, el formulario principal debe asegurarse de pasarse a si mismo como caller (línea 09)
01 void clicked()
02 {
03 FormRun f;
04 Args args;
05 ;
06
07 args = new Args();
08 args.name(formstr('DForm'));
09 args.caller(this.owner());
10 args.record(AraHIntercompany);
11 f = Classfactory::formRunClassOnClient(args);
12 f.init();
13 f.run();
14 f.wait();
15 super();
16 }
2. Después se debe crear el método que debemos ejecutar en el formulario principal. (En éste ejemplo solo se actualiza la información del registro actual del DataSource)
01 void doRefresh()
02 {
03 ;
04 myDataSource_ds.reread();
05}
3. Se llama el método desde el formulario detalle.
01 void clicked()
02 {
03 Object callerForm;
04 ;
05 this.updateMainRecord(); //Aquí la actualización del registro header cambiando el status
06
07 super();
08
09 callerForm = element.args().caller(); // Aquí obtenemos el caller, de preferencia validemos antes
10 if (callerForm && formhasMethod(callerForm,identifierstr(doRefresh))) //¿El método existe?
11 {
12 callerForm.doRefresh(); // llamada al método
13 }
14
15}
Como podemos ver, es necesario declarar un objeto de tipo Object, a ese objeto le asignamos el formulario que lo invocó, luego validamos que el objeto callerForm esté inicializado y que además tenga el método doRefresh() a través de formhasMethod(), si lo anterior se cumple podemos llamar el método doRefresh() con toda confianza.
Y cuando el formulario principal tenga el enfoque nuevamente, el metodo habrá dado resultado.
No comments:
Post a Comment