Formulario dinámico II

En un formulario dinámico podemos conseguir que partes de él (subformularios) aparezcan o desaparezcan de la vista en función de los datos introducidos por la persona que lo rellena. Para conseguir esto lo mejor es estructurar el formulario con varios subformularios. Esto no quiere decir que todo el contenido que queramos hacer dinámico se tenga que incluir dentro de uno o más subformularios, pero si es una forma de tenerlo todo organizado. En esta entrada se explica cómo se hace una botonera para activar o desactivar subformularios.

Botenera formulario dinámico

Con un documento vacío pinchamos y arrastramos de la biblioteca tantos «botones de radio» como acciones queramos ejecutar en la botonera. Por ejemplo, para activar o desactivar tres subformularios, arrastraremos tres botones de radio. Al colocar un botón junto a otro se convierten en un grupo de botones excluyentes; es decir, al activar uno de ellos se desactivan los otros dos. Si queremos que funcionen de manera independiente, tendremos que utilizar «casillas de verificación» en lugar de botones.

Una vez hecho esto, incluiremos en el formulario otros tres subformularios. Cada uno de ellos con un contenido diferente que queramos que aparezca o desaparezca. Habrá que tener en cuenta que, al seleccionar uno de los botones para visualizar una parte del formulario, las otras permanecerán ocultas. Si lo que queremos es ir añadiendo contenido al formulario, los botones habrá que sustituirlos por casillas de verificación, aunque usemos los mismos scripts de base que explicaré más abajo.

Estructura dinámica

Para que los botones tengan la funcionalidad de hacer aparecer y desaparecer los diferentes subformularios, habrá que añadir unos sencillos scripts a cada botón. Abrimos la ventana que encontraremos en Menú/Ventana/Editor de secuencias de comandos y, seleccionamos en el desplegable Mostrar la opción click. Nos aseguramos que el lenguaje para ese script sea JavaScript. Aquí escribiremos:

Subform1.presence = "visible";
Subform2.presence = "hidden";
Subform3.presence = "hidden";

scriptbotondinamico

¿Qué significa esto? Le estamos indicando al formulario que, cuando hagamos click en el botón del Subformulario 1, haga visible el contenido del Subform1 y oculte el Subform2 y el Subform3. Tanto Subform1, Subform2 y Subform3 son nombres que tenemos que asignar a los tres subformularios en la ventana Jerarquía de la izquierda. Repetiremos este proceso en cada uno de los botones especificando cómo queremos que sea la presencia de cada subformulario al hacer click en ellos.

Una vez completado este paso, para que no aparezca por defecto todo el contenido del formulario, seleccionamos los tres subformularios (Subform1, Subform2 y Subform3), y en la Ventana/Objeto/Subformulario ponemos la Presencia «Oculto (excluir de la presentación)». Esto hará invisibles todos los campos que contengan los subformularios a los que hacen referencia los botones y que se irán haciendo visibles al hacer click sobre ellos.

ventana-oculto

Si hemos seguido todos estos pasos, ya tenemos la función dinámica creada en este formulario. Para hacer cualquier modificación posterior dentro de cualquiera de los subformularios, tendremos que volver a hacerlos visibles momentáneamente. Seleccionamos el/los subformularios que queramos editar dentro de la ventana Jerarquía y le ponemos Presencia: Visible en la ventana anterior. Una vez realizadas todas las modificaciones, habrá que volver a asignarle la Presencia: Oculto (excluir de la presentación).

~ por dmartinr en noviembre 11, 2008.

48 comentarios to “Formulario dinámico II”

  1. Tengo una consulta, tengo un formulario dinamico, que realiza diferentes interacciones, entre s oculta algunos campos, pero cuando se graba y se vuelve abrir, ampos que estaban por defecto vuelven a su estado original, si estaban ocultos vuelven a ser ocultos.. como se puede solucionar???… te agradeceria mucho una ayuda… gracias.

    • Eso suele pasar si se abre y se graba con una versión anterior de Acrobat que no soporte los campos dinámicos. Otra opción que se me ocurre es no esté distribuido el formulario o con las funciones ampliadas para Reader. De todas formas, si me envías el formulario a etiquetaxml@gmail.com te puedo concretar más. Un saludo.

  2. Hola gracias por tu aportacion pero tengo un problemita y espero que puedas ayudarme en un formulario le digo aun boton de radio que me haga visible un subformulario u otro pero cuando lo guardo con los cambios si bien el boton de radio me aparece seleccionado el subformulario en cuestion no aparece si no vuelvo a apretar el boton no se como solucionarlo para que al guardar cambios lo guarde bien
    un saludo y gracias por adelantado

  3. Lo suyo es que el botón de radio no aparezca seleccionado por defecto. Para conseguir esto, en la ventana de Objeto/Valor en el menú «Predeterminado» tendrá que aparecer «ninguno». Ahora mismo no te aparece visible el subformulario porque el script que has puesto en el botón sólo se ejecuta al hacer click. Si por defecto te aparece activado, no te puede aparecer el subformulario porque no has ejecutado el script.

  4. Gracias parece que lo he solucionado el problema era que en opciones del documento debia seleccionar la opcion de “mantener cambios de la secuencia de comnados en el gormulario al guardarlo” automatico para que guardase los cambios de visibilidad de los subformularios una vez rellenados.
    gracias por tu rapida respuesta y sin queres abusar quieroi plantearte dos dudas que me surgen, por un lado quiero meter un encabezado con logo pero si meto el logo en todas las paginas pesa demasiado el archivo y ademas las opciones del menu insertar del principio de nº pagina , etc no las puedo seleccionar.
    por otra parte en adobe professional me deja crear un boton de guardar pero no se cómo crearlo en livecycle
    un saludo y gracias de verdad

  5. perdon lo del boton guardar ya esta solucionado agracias a tu aporte mi problema de momento solo es lo de metes el encabezado con el logo

    GRACIAS

  6. En cuanto al logo, sólo una recomendación que no sé si habrás hecho ya. Inserta el logo en formato jpg a 72 puntos y al tamaño real al que vayas a meterlo. Lo del número de página, si insertas primero un cuadro de texto (no campo de texto) y al ponerte dentro selecciones el menú insertar, te saldrán las opciones de insertar número de páginas.
    Si quieres meter un botón de guardar, te recomiendo que leas esta entrada: https://etiquetaxml.wordpress.com/2008/11/11/boton-guardar/

  7. IMPRESIONANTE!!!! Gracias, una última cosita… quiero que si meto en un campo elnombre en los demas campos de otras paginas del formulario se inseryte lo mismo sin tener que estar escribiendolo, lo he intentado duplicando pero me hace rellenarlo otra vez me ayudas??
    gracias eres un artista

  8. Para que en un campo se repita el texto de un campo anterior, tienes que meter un script:
    1.- El campo donde quieres que aparezca repetido el texto deberá tener un nombre diferente, por ejemplo «nombre2». El primer campo, donde se escribirá el texto lo puedes llamar «nombre1».
    2.- Seleccionado este campo, metele un script de FormCalc en «calculate».
    3.- Será el siguiente:

    nombre2=Concat(Subform1.nombre1)

    4.- «Subform1» será el nombre del subformulario donde está el primer campo. Si los dos campos están dentro del mismo formulario, no haría falta meter esto y sería:

    nombre2=Concat(nombre1)

    5.- Espero que te sirva.

  9. hola, sin querer abusar demasiado, me interesa saber como hacer una botonera para seleccionar no subformularios que aparezcan o desaparezcan a voluntad sino páginas enteras que selecionando salgan o no, si me puedes ayudar te lo agradeceré

    un saludo

  10. No lo he hecho nunca con páginas, pero si con subformularios. Subformularios ocultos que al activarlos se generar páginas nuevas con ese contenido. Ahora no tengo tiempo para investigarlo, pero prueba a crear un documento de varias páginas con el contenido organizado en subformularios. Luego los ocultas en la ventana de Objeto/Subformulario y al activarlo en la botonera te aparecerán las páginas que quieres. Un saludo y perdón por no extenderme. El trabajo manda.

  11. OK, muchas gracias, por ciertoi no sabras como decirle a un boton de imprimir que sólo imprima unas paginas y otras no gracias

    un saludo

  12. Cuando insertas un botón de imprimir, el script que lleva es:

    xfa.host.print(1, “0”, (xfa.host.numPages -1).toString(), 0, 0, 0, 0, 0);

    Así te imprimirá todas las páginas, aunque te abrirá la ventana de la impresora donde podrás seleccionar sólo las que quieres. Si cambias ese script por:

    xfa.host.print(1, “1”, (xfa.host.numPages -1).toString(), 0, 0, 0, 0, 0);

    Así te imprimirá a partir de la segunda página. Si pones:

    xfa.host.print(1, “2”, (xfa.host.numPages -1).toString(), 0, 0, 0, 0, 0);

    Así te imprimirá desde la tercera página. Puedes probar e ir cambiando los números hasta que consigas lo que quieres.

  13. por no ser muy pesado un manual de livecycle no conoceras para bajar?? no encuentro nada y me gustaria aprender a hacer cosas… controlar idioma formcalc o javascrpst, etc

    Un saludo y gracias

  14. Manuales para descargar no conozco, pero en google se guro que encuentras. Yo he utilizados este libro: http://www.smartdoctech.com/livecycle_designer_book.aspx.

  15. Hola otra vez se que soy pesada pero…
    no sabras cómo hacer una tabla que se añadan filas automaticamente segun se necesiten, lo intento con el asistente de tablas del livecycle pero me atasco y lsa que salen no añaden filas o no se cómo decirle que las añada

    Un saludo y muchas gracias artista

  16. ah y ya por pedir como se pone la pagina en apaisado?

  17. otra cosita… en algun momento explicas como cargar unos sacripts a la bilblioteca que ya estan hechos pero no se de donde descargarlos…
    mil gracias

  18. Para lo de las tablas, prueba a leer esta entrada: https://etiquetaxml.wordpress.com/2008/11/27/formulario-dinamico-iv/

    No son tablas, pero se puede adaptar. Si tengo un rato libre en los próximos días (que lo dudo), lo intentaré investigar.

    En cuanto a poner la página en apaisado, no sé a qué te refieres. Si es una página tipo A4 vertical y la quieres poner en horizontal, basta con seleccionar la página y en la paleta «objeto» seleccionar la casilla «horizontal» o poner las medidas personalizadas. Si lo que quieres es poner el número de página y girarlo, tendrías que seleccionar el campo de texto donde está insertada la paginación automática y en la ventana «presentación» tienes varios iconos para poner la orientación de la caja (girada 90º…)

    De lo de los scripts de los que hablo en alguna parte, son scripts específicos que utilizábamos en el trabajo, pero si los quieres, escribe un correo a etiquetaxml@gmail.com y te los reenvio por si te sirven para algo.

  19. Hola, tengo un problema, tengo algunos campos “hidden” en mi formulario y cuando los imprimo aparecen bien, sin embargo, al mandarlos por correo no me aparecen los subforms, leí un post que dice que en opciones del documento debia seleccionar la opcion de “mantener cambios de la secuencia de comnados en el gormulario al guardarlo” automatico para que guardase los cambios de visibilidad de los subformularios una vez rellenados, pero no se donde se encuentra esa opción, trabajo con LiveCycle 8.2.
    Agrgadezco de antemano la ayuda

    • Si eres la misma persona del comentario de «Formulario dinámico III» supongo que no te ha servido la solución que te daba. Si no encuentras la forma de solucionarlo, me puedes mandar el formulario a etiquetaxml@gmail.com y lo miro. La opción que dices de «mantener cambios de la secuencia de comandos al guardar el formulario» la encontrará en el menú Archivo/Propiedades del formulario, dentro de la pestaña «Predeterminados» tienes las opciones «automático» y «manual»

  20. Estimado dmartinr,
    Antetodo felicidades por el blog…los que todavía no controlamos el tema de livecycle agradecemos muy mucho el trabajo de gente como tú.

    Pues te cuento: he intentado seguir tu ejemplo desde cero, con un formulario en blanco en adobe livecycle y no consigo que al hace click sobre un boton del grupo de esclusión, aparezca el subform que estaba oculto.

    He probado de todo…He activado la consola de monitorización durante la ejecución del javascript y al hacer click en uno de los botones, me aparece el mensaje “no se puede encontrar el origen de XFA:formulario1[0]:Subform0[0]:Casilladeverificacion1[0]:click”

    Espero que me puedas echar un cable…
    Un saludo

  21. Por lo que cuentas, se me ocurren dos motivos por los que no funcione. El primero sería que el tipo de documento no sea el correcto. Asegurate que el tipo de documento sea Formulario XML dinámico. Lo encontrarás en la pestaña compatibilidad de las propiedades del formulario.
    Otra opción es que no reconozca la ruta (nombre) del subformulario que quieres que aparezca o desaparezca. Asegurate de que la ruta es la correcta. Una forma de hacerlo es, en lugar de escribirla, selecciona el lugar del script donde debería aparacer la referencia a la ruta del subformulario, con la tecla Ctrl. pulsada y el subformulario visible en la ventana de diseño, clica en el borde de ese subformulario. Verás que el puntero se convierte en un ángulo con la punta hacia abajo. Automáticamente en el script aparecerá una ruta válida a ese subformulario. No te preocupes si es muy diferente a la que tú habías puesto o mucho más abreviada, debería funcionar. No sé si me he explicado demasiado bien, pero puedes probar con eso.
    Un saludo y gracias

  22. Dear dmartinr:
    Si te soy franco, te explicas mejor que algunos textos “oficiales”…te animo a que publiques tu propio libro…te lo compro seguro.

    …En efecto, estabas en lo cierto: el tipo de documento era pdf estático. Lo he cambiado a XML dinámico y….Voilá! funciona a la perfección

    Muchas gracias por contestar TAN RÁPIDO…te lo curras mogollón.
    Seguiré probando trucos de tu blog…

    ¡ No dejes de sorprendernos, colega !

  23. Hola dmartinr,
    Tengo una consulta: Tras rellenar el formulario que estoy diseñando, me vendria muy bien poder salvar el pdf con un nombre que dependiese de las opciones que el formfiller haya escogido.
    ¿Se puede incorporar un botón que imprima en pdf el contenido del form y lo guarde con un nombre que sea el contenido de una variable?
    Si esto no es posible, ¿se puede incorporar un script al formulario que guarde un *.txt en un directorio especificado?

    Acepto tus sugerencias…
    Gracias de antemano por tu colaboración

    Recibe un cordial saludo

    • El nombre del archivo creo que no se puede automatizar. Pero sería cuestión de intentarlo. Y en cuanto a guardar como txt, no sé si te valdrá la opción de enviar por correo electrónico, que lo que hace es enviarte un *.xml con el contenido del formulario? Pero tampoco puedes elegir el nombre del archivo.

  24. Ok dmartinr…gracias
    Cuando dices “sería cuestion de intentarlo” ¿crees que se puede atacar con un script en java o cómo lo harías?

    La opción del correo, efectivamente es demasiado complicada…Se trata de poder procesar las impresiones en pdf de los forms con un bat en una carpeta.

    De todas maneras, tanto si consigues algo como si no, gracias por tu inestimable ayuda.
    Saludos

  25. Hola que tal..!! Deseo saber como incluir fórmulas simples en mi formulario, tales como restar, multiplicar o dividir a partir de campos numéricos en el mismo formulario.
    GRACIAS ANTICIPADAS

    • La forma más sencilla de incluir ese tipo de operaciones es meter en el campo numérico en el que quieras que aparezca el resultado un script de Formcalc en «validate»:

      Formulario1.#subform[0].Total::calculate – (JavaScript, client)
      Campo1+Campo2-Campo3

      Si quieres algo más complicado, sería cuestión de investigar.

      Por si te interesa, en http://www.smartdoctech.com/livecycle_designer_book.aspx puedes encontrar los ejemplos que aparecen en el libro que recomiendo en la página principal. Aquí se pueden encontrar bastantes cosas interesantes para solucionar dudas y problemas.

  26. Hola, quisiera sumarme al agradecimiento por la labor de enseñanza en este blog.

    En mis primeros pasos con LiveCycle me ocurre algo curioso. Resulta que no puedo añadir subformularios (y algún que otra opción, como imagen) porque no está activo en LiveCycle. Aparece en “gris” y no me deja elegir esa opción.

    Tienes idea de lo que me ocurre?

    Gracias de antemano.

    • Siento no poder ser muy concreto en la respuesta, pero necesitaría ver los menús del programa, y hasta dentro de tres semanas no me sentaré delante de un pc con Livecycle. Lo que hacen las vacaciones. Lo único que se me ocurre es que compruebes en las propiedades del documento que sea un formulario dinámico y no uno estático. Espero solucionarte algo con esto, sino ya lo miararé a mi vuelta. Un saludo.

  27. Puedes irte tranquilo de vacaciones, porque exactamente eso es lo que me ocurre, y no me había fijado.

    Que disfrutes y muchas gracias!

  28. Hola, soy novato he hecho el ejercicio a rajatabla y no me me muestra los campos de texto.

    Saludos

  29. Comprueba que tienes las preferencias del documento como formulario XML dinámico. Si ya lo tenías así, si quieres, puedes enviarme el formulario a etiquetaxml@gmail.com para ver dónde está el fallo.

    • Dónde veo que el formulario es dinámico?

      • Lo puedes ver en el menú Archivo/Propiedades del formulario en la pestaña de Compatibilidad. O en el menú Herramientas/Opciones/Tratamiento de documento, tienes un desplegable donde poder elegir entre dinámico y estático.

      • Como ya te he comentado por mail, si sigues exactamente la explicación tiene que salirte bien, empezando por hacerlo en un Formulario XML dinámico.

  30. Hola,

    Excelente referencia.

    Tengo unos compañeros que están intentando hacer un botón de un dinámico que imprima en una impresora pdf concreta, que siempre se llamará igual.

    La impresora no se puede definir como predeterminada.

    Ya hemos conseguido que no salga el cuadro de diálogo con xfa.host.print(0… pero no conseguimos decirle al botón que imprima sobre una impresora.

    Lo hemos intentado con JavaScript, pero no nos hace ni caso.

    ¿Nos puedes ayudar?

    Muchas Gracias

  31. Buenas, si te digo la verdad yo tampoco he conseguido nunca especificar en qué impresora quiero imprimir. Solo una cosa, aunque supongo que ya lo habrás tenido en cuenta, si tienes alguna teoría mediante JavaScript para hacerlo, asegúrate que seleccionas JavaScript en lugar de FormCalc a la hora de meter el script en el botón. Siento no poder ayudarte.

    • Gracias.
      Si que hemos puesto la etiqueta de JavaScript, lo malo es que no sé si hay consola de java para ver por que no nos hace caso.
      Intentamos algo tan simple como esto, pero creo que el formulario no se entera:

      var pp = this.getPrintParams();
      pp.interactive = pp.constants.interactionLevel.automatic;
      pp.printerName =”El nombre de la impresora”;
      pp.fileName =”/C/nombre_del_documento.pdf”;
      this.print(pp);

      Luego, vimos esto, pero no encuentro ningún ejemplo, por lo que no sabemos que valores poner. Tienes alguna idea de convertir esto en un ejempo:

      public void sendToPrinter(Document inDoc,
      PrinterProtocol printerProtocol,
      String printServer,
      String printerName)

      Gracias

  32. Supongo que no os valdrá con un botón que os guarde como pdf, ¿no?

  33. Ok, muchas gracias.

    A ver si con el debug podemos atacar por algún lado, aunque he leído por ahí que está “capado” por seguridad… es decir, que no se permite cruzar la frontera entre documento e impresora por que “te pueden dejar sin hojas o sin tinta con el uso de código malicioso”…. a mi me suena a excusa.

    De todas formas, gracias por tu interés. Seguirémos luchando… si vencemos, te lo posteo🙂

  34. Hola, estoy tratando de hacer un formulario en el cual se repita una sección a traves de un subformulario, el problema es que esta sección tengo un grupo de exclusion con 4 botones de radio, y al seleccionar uno de ellos y al repetir la sección, se repite con el boton de radio que fue seleccionado y si cambio la seleccion del boton se modfifica en las secciones repetidads. Como se pueden independizar los botones de radio?. Te agradeceria mucho si me puedes ayudar… Gracias

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

 
A %d blogueros les gusta esto: