Hola!
Lei el tema de Dos eventos que generen diferentes pdfs en el mismo ci
En mi caso tengo 3 eventos q funcionan en 3 pantallas diferentes.
Creas los dos eventos con un vinculo a la misma operacion
Cree 3 eventos con el vinculo a la operacion "certificar"
En ambos casos le indicas que el nombre del servicio a disparar es 'vista_pdf'
Hecho
En el metodo conf() del ci (o conf__nombre_pantalla si los botones estan en una especifica) le agregas un parametro al vinculo para usar de bandera
function conf__pant_mo_contrat()
{
$this->evento('pdf')->vinculo()->agregar_parametro('evento_trigger', 'mo_contratista');
}
function conf__pant_mo_cliente()
{
$this->evento('pdf_mo_cli')->vinculo()->agregar_parametro('evento_trigger', 'mo_cliente');
}
function conf__pant_material_cliente()
{
$this->evento('pdf_material')->vinculo()->agregar_parametro('evento_trigger', 'material');
}
y en en el método vista_pdf definido en el ci
function vista_pdf(toba_vista_pdf $salida)
{
$bandera = toba::memoria()->get_parametro('evento_trigger');
$salida->salto_linea();
$salida->titulo('Datos de la obra');
$salida->salto_linea();
$this->dependencia('fo_enc_certif')->vista_pdf($salida);
$salida->salto_linea();
if($bandera == 'mo_cliente'){
$salida->titulo('Certificacion de Mano de Obra');
}
if($bandera == 'mo_contratista'){
$salida->titulo('Certificacion de Mano de Obra - Contratista');
}
if($bandera == 'material'){
$salida->titulo('Certificacion de Material');
}
Me devuelve una página en blanco (nada del pdf), no da error tampoco . Por lo q veo no puedo recuperar el valor de $bandera.
Tengo 2 CI anidados y esto está definido en el 2do.
Gracias
te fijaste si en la URL de la ventana que se abre viaja el parametro que le agregaste al vinculo?. Sino para verificarlo podes visualizar el codigo fuente de la pagina que te genero toba y en la parte inferior de la misma suele estar la declaracion de los vinculos… ahi en la URL deberia figurar el parametro pegado.
Bueno, no sé si de lo más elegante y correcto, pero encontré una forma de solucionarlo.
En el editor:
En las propiedades de cada evento, Accion predefinida: Exportar PDF.
En el ci cree una variable $s__pdf y en el conf() de cada pantalla:
$this->s__pdf = …; (Usé 1, 2 o 3 como valores de bandera).
En function vista_pdf(toba_vista_pdf $salida)
Cambié el if($bandera == ‘imprimir_grupo2’) que tenia antes por if($this->s__pdf == 2) y las dependencias y demás de cada caso dentro de cada if.
Ahí si funciona, pero de cualquier manera me gustaria saber como solucionarlo de la forma anterior o cual es el problema.
Saludos
Yo creo que como vos lo hiciste esta bien dentro de las opciones que hoy tenemos, pero en mi caso tengo otro problema, tengo los dos eventos en la misma pantalla, entonces el conf de cada pantalla no me sirve.
¿Como se puede setear el valor de una variable en el momento de activar un evento? Recuerden que no se usa la función evt__nombre_boton() porque los 2 eventos apuntan directo a vista_pdf().
La alternativa a lo anterior seria saber con los datos de la memoria de toba, desde dentro de vista_pdf(), cual evento fue activado. Hay forma de hacer esto ultimo?
perdon por revivir el tema despues de tanto tiempo pero me habia quedado colgado, bien:
Esa es otra forma de hacerlo Natalia, el problema como bien marca Tomas mas adelante se te suscita cuando tenes ambos eventos en una misma pantalla, aunque tambien podria pasar que en el medio del codigo por x motivo cambiaras la pantalla activa y entonces te tomara otra exportacion pdf. Aun sigo preguntandome porque no te funcionaba el metodo original, en las pruebas que hice no tuve problemas para leer el parametro desde toba_memoria.
Tomas, el metodo de los vinculos es la forma mas sencilla de pasar esos valores, la otra opcion es incluir un campo hidden en un form HTML y luego preguntar explicitamente por la existencia/valor de dicho campo, cabe destacar que esto deberias hacerlo a mano accediendo a $_POST y no por medio de toba_memoria. Esta ultima forma me parece un poco mas trabajosa de seguir y como les comentaba mas arriba no tuve problemas utilizando vinculos, si aun no lo solucionaron me gustaria que sigamos indagando en el tema para poder profundizarlo un poco mas.
Dándole vueltas al asunto comento un poco como solucione mi problema. Termine arribando a una solución al estilo de la que plantea Natalia, aunque para generar uno de los PDF’s tuve que crear una pantalla intermedia de confirmación sin mucho sentido :-s
Lo que planteas vos, Richard, es como lo habíamos resuelto en un principio (con vínculos en los eventos a otras operaciones), y creábamos el PDF en una operación aparte que era del tipo “PHP plano”. Ahí no había problemas supuestamente, pero en la pantalla donde se llamaba al evento que se vinculaba a esta operación, había un filtro y un cuadro y ocurría algo muy extraño. Lo que ocurría era lo siguiente (es medio largo y tratare de resumirlo):
Se filtraba con un solo criterio la información del cuadro, y se generaba el PDF, todo esto se hacia correctamente. Pero cuando se quería seguir filtrando por algún otro criterio, o hacer algo en la pantalla, se redirigía a la pantalla como estaba al principio, como si la operación donde esta la pantalla se “reiniciara”.
Lo anterior, suponíamos, se solucionaba guardando el estado del filtro en alguna variable, así que no era la mayor preocupación. Lo raro era lo que pasaba si filtrábamos con dos o mas criterios. En ese caso, apretábamos el evento vinculado a la otra operación, y el Toba lanzaba un mensaje que decía (no recuerdo textual el mensaje) “No tiene permisos para acceder a la operación solicitada”.
Resumiendo, Si se filtraba con un criterio, el evento generaba el pdf en otra operación y reseteaba la operación anterior. Pero si el mismo filtro usaba dos criterios o mas, al presionar el evento Toba tiraba un error de permisos. Ese segundo comportamiento nos preocupo porque no pudimos encontrar por donde venia el error.
Se me hizo un poco largo y engorroso, pero espero que se entienda la duda. Gracias por la ayuda.
Esto puede deberse a que el item de destino no estaba con el tipo de pagina adecuado o que no se deshabilitaba el reciclado de memoria, lo cual genera que al cambiar de operacion los datos de la operacion original se pierdan.
* Lo anterior, suponíamos, se solucionaba guardando el estado del filtro en alguna variable, así que no era la mayor preocupación. Lo raro era lo que pasaba si filtrábamos con dos o mas criterios. En ese caso, apretábamos el evento vinculado a la otra operación, y el Toba lanzaba un mensaje que decía (no recuerdo textual el mensaje) "No tiene permisos para acceder a la operación solicitada".
Esto si me llama la atencion, existe alguna posibilidad que se estuvieran manipulando los permisos/perfiles funcionales al mismo tiempo que se usaba la operacion?. Se estaba redirigiendo de manera automatica a otro item el cual podia no tener permisos?.. la sesion de toba expiro?, me gustaria que me comentes mas del tema.