miércoles, 15 de octubre de 2008

Concatenar campo en tabla extensible

InfoPath


Objetivo

Concatenar un campo desde una tabla extensible

Problema


El problema radica en que InfoPath entrega funciones para el manejo de campos numéricos en tablas extensibles, por ejemplo: sum(), count() o el mismo max( ), bueno, pero que pasa si lo que deseamos es concatenar un campo tipo texto, entonces se nos complica el escenario.


Solución


Supongamos que tenemos la siguiente estructura de campos

Creamos la lista extensible que quedará más o menos así

Para concatenar todos los Campo1 de mi tabla extensible separándolos por “;”, lo que debo hacer es crear la siguiente función

eval(eval(Linea, 'concat(my:Campo1, ";")'), "..")

O en xPath

xdMath:Eval(xdMath:Eval(my:Grupo/my:Linea, 'concat(my:Campo1, ";")'), "..")


Esta funcion la ubicamos en un cuadro de expresión o donde deseemos.


Resultado


17 comentarios:

Fabricio dijo...

Hola amigo, he tratado de seguir al pie da la letra tu blog sobre Infopath ya que tengo q hacer un formulario con tabals extensibles pero no me funciona lo que esta en tu blog, sera que puedes enviarme un archivo xsn donde hayas realizado este ejemplo?? Mi mail es bayrtorresxxx@yahoo.es
Te agradeceria mucho si me lo enviaras.
Otra pregunta, como harías para enviar datos de una tabla extensible a una base de datos por medio de un web service??
Gracias por todo...

Francisco Rojas Castro dijo...

si tú copias la formula xpath del ejemplo y la pegas en un cuadro de expresión debiera funcionar sin problema, pero recuerda que es sensible a las mayúsculas y minúsculas, así que tus campos deberán estar acorde con el ejemplo.

el problema de como enviar los datos de una tabla extensible a un web service, dependerá del problema que se intentes solucionar. si presentas tú problema, quizás pueda dar una opinión más acertada.


nota: el ejemplo de la tabla extensible te lo enviaré al correo

Saludos

Fabricio dijo...

Gracias por tu respuesta Francisco...
El problema con el web service es el siguiente. Yo tengo una tabla en la BD llamada cliente, que tiene un ID y nombre. Tengo que hacer un formulario en infopath en el cual se pueda ingresar, por medio de una tabla extensible, a los usuarios. Tengo hecho el web service pero solo me ingresa el primer cliente y a los demas no les toma en cuenta. ¿Como puedo hacer para que me ingresen todos los usuarios por medio de un Web service?
Si pudieras ayudarme me salvarias la vida pues no se nada de infopath y mi jefe esta que me presiona por ese asunto del formulario.
Por cierto, recibi tu correo. Muchas Gracias

Francisco Rojas Castro dijo...

tu formulario te toma el primer usuario ingresado en la tabla extensible porque me imagino creaste un botón "guardar cliente" y cuando lo presionas mandas el primer cliente de la tabla extensible al web service

lo que podrías hacer es evitar el uso de la tabla extensible para agregar usuarios y utilizar dos cajas de texto y un botón agregar.

luego podrías hacer otro web service de consulta a la base de datos, que le entregue el id y nombre del cliente.

estos datos los muestras en una tabla extensible y la ubicas abajo de las cajas de texto y botón agregar, entonces, la persona que ingrese clientes va a tener la opción de ingreso y además la de visualización de los clientes ya ingresados

Diego dijo...

Hola, Francisco sera que me puedas ayudar con el control de una tabla extensible quiero que solo me deje agregar un número determinado de filas y que no se repitan n-veces, mi correo es: diegopov@gmail.com
Te agradeceria mucho si me puedes solucionar el problemas.

Gracias.

Francisco Rojas Castro dijo...

hola diego,

lo que tienes que hacer es crear un formato condicional en tu tabla extensible.

es decir:

1. botón derecho a tu tabla extensible y presionar la opción Formato Condicional

2. Presionas el botón Agregar...

3. En el combobox que aparece selecciona La Expresión

4. En el cuadro que se encuentra a la derecha del combobox ingresa la siguiente formula:

count(.) >= 5

donde 5 es el número de máximo de filas que deseo tenga la tabla extensible extensible.

5. debes dejas checkeada la opción No permitir que los usuarios inserten o eliminen este control

6. Luego das aceptar


Espero te sirva, saludos

Diego dijo...

Hola Francisco, te agradezco muchisimo por tu ayuda, logre solucionar el inconveniente que tenía, otra pregunta disculpa que te moleste, y en el caso del control de Cuadro de Texto Enriquecido, como puedo poner límites, en este caso de igual forma quiero agregar 10 lineas nada más, y no deseo que se extienda más, te agradesco mucho por tu ayuda

Francisco Rojas Castro dijo...

desconosco como limitar las lineas en un texto enriquecido, lo que te puede servir es limitar el número de caracteres admitidos en un texto enriquecido, esto lo haces:

1.- Botón derecho en tu texto enriquecido y seleccionas Validación de datos

2.- Presionas Agregar

3.- En el combobox seleccionas La Expresión y añades la siguiente formula: string-length(.) > 5

donde 5 es el número de caracteres admitidos.

4.- Ingresas un mensaje donde dice Información por pantalla

Espero te sirva, saludos

Diego dijo...

Te agradesco Francisco, me ayudo la ayuda que me as brindado, me ayudaste bastante a solucionar mis problemas con estos controles...

Saludos y gracias

Diego dijo...

Hola Francisco, nuevamente te molesto, tal vez sabes como poner en un formulario infopath encabezados de página con una imagen.

Nuevamente gracias por todas tus ayudas

Francisco Rojas Castro dijo...

no entendí mucho la pregunta, sin embargo si lo que quieres es dejar tu formulario en un marco, como un iframe, debes leer acerca del control xmlformview búscalo en el google, existen guías acerca de su utilización....

Saludos,

Julio dijo...

Saludos Francisco, quiero almacenar todos los datos que tengo en una tabla extensible (formulario InfoPath), en una base de datos (access o SQL Server) por medio de un servicio web (desarrollado en C#), la tabla tiene varias columnas pero no se sabe cuantas filas puede llegar a tener y no se puede almacenar la información hasta que no se agreguen todos los datos a la tabla, por lo que no puedo utilizar la solución que planteas en esta publicación. (Los datos se deben agregar directamente a la tabla debido a que se pueden copiar y pegar varios registros para facilitar el ingreso de datos.)

Por otra parte, cuando creo la tabla extensible solo me permite asignarle nombres a la primera fila, cuando le doy almacenar solo guarda el primer registro, pero lo que quiero es que almacene todo cuando presiono el botón.

y que cuando consulte nuevamente los registros, pueda modificar cualquier registro de la tabla sin tener que consultarlos individualmente y pueda guardar la tabla modificada.

Quisiera que por favor me ayudes con este problema, porque ya no se que hacer....
Gracias.
PD.
si me puedes regalar un ejemplo mi correo es jponewton@hotmail.com

Miau dijo...

Que tal, tengo dentro de una tabla extensible un contact selector utilice la formula para concatenar las cuentas de correo pero el problema radica en que solo duplica la cuenta del 1° registro las veces que agregas un nuevo usuario.
Alguna idea para que esto no me pase por favor.

Saludos

Sparks dijo...

Hola Francisco, estoy tratando de hacer justo esto que explicas en esta entrada, ya cree mi tabla extensible, le puse los mismos nombres que manejas en tu ejemplo, cree un cuadro de texto en donde voy a mostrar la cadena concatenada y al momento de comprobar la función me manda el siguiente error ""Linea" no señala a una ruta de acceso de ubicación válida de un campo o grupo." Me podrías ayudar por favor? Gracias!!

Anónimo dijo...

me puedes enviar el ejemplo de concatenar datos de una tabla extensible a mi correo porfa , es que lo copia como sale en tu ejemplo y no me funciona . mi correo es ylagos@gtichile.cl please

Santiago Viñachi dijo...

estimado estoy haciendo tal cual lo de las tablas extensibles y no me sale, me puedes envíar el ejemplo a mi correo Santiago.vi@hotmail.com

Gracias de antemano

María José Puente dijo...

Que tal, tengo la tabla extensible utilice la formula para concatenar las cuentas de correo pero el problema esta en que solo duplica la cuenta del primer registro las veces que agregas un nuevo usuario. Si me pueden ayudar con esto gracias.