Archivo de la etiqueta: infopath

Carga de Archivo (Upload File) desde infopath forms services

[Visto: 2482 veces]

En una entrada anterior publiqué un método para cargar archivos desde cualquier aplicación web; en este caso publico la misma funcionalidad desde el control upload de infopath forms services.

Deben utilizar un botón adicional al cual le añaden el siguiente codigo .net:

public void btnCargarDocumento_Clicked(object sender, ClickedEventArgs e)
{
XPathNavigator DOM = this.MainDataSource.CreateNavigator();
XPathNavigator fileDocumento = DOM.SelectSingleNode(“/my:misCampos/my:att_documento”, NamespaceManager);
byte[] attachmentNodeBytes = Convert.FromBase64String(fileDocumento.Value.ToString());
int fnLength = attachmentNodeBytes[20] * 2;
byte[] fnBytes = new byte[fnLength];

for (int i = 0; i < fnBytes.Length; i++)
{
fnBytes[i] = attachmentNodeBytes[24 + i];
}

char[] charFileName = System.Text.UnicodeEncoding.Unicode.GetChars(fnBytes);
string fileName = new string(charFileName);

fileName = txtIdActividad.Value + “-” + fileName.Substring(0, fileName.Length – 1);
byte[] fileContents = new byte[attachmentNodeBytes.Length – (24 + fnLength)];

for (int i = 0; i < fileContents.Length; ++i)
{
fileContents[i] = attachmentNodeBytes[24 + fnLength + i];
}

string LibreriaDestino = “http://SERVIDOR:8001/sitio/sitiodocs/documentosA/”;
string Destino = LibreriaDestino + fileName;
System.Net.WebClient objWebClient = new System.Net.WebClient();
objWebClient.Credentials = System.Net.CredentialCache.DefaultCredentials;
objWebClient.UploadData(Destino, “PUT”, fileContents);
//limpiar el control upload
if (!fileDocumento.MoveToAttribute(“nil”,
fileDocumento.LookupNamespace(“xsi”)))
{
fileDocumento.SetValue(“);
}

}

Espero que sea de ayuda Sigue leyendo

Firmas Digitales en Infopath Forms Services (dedicado a 3 desarrolladores)

[Visto: 9239 veces]

Siempre creí que la aplicación de firmas digitales en un formulario de infopath era un tema sencillo por el cual no debería crear una entrada en mi blog dedicada a este tema; pero por ahi escuché el comentario “en infopath forms services no se puede usar firmas digitales” así que decidí desempolvar un proyecto en el cual usamos firmas digitales a inicios del año pasado y crear una entrada dedicada a este tema para orientar a aquellas personas que tienen dificultades en este tema y para recordar “como se hacía” por si algún día se me olvida.

Por defecto, los formularios infopath habilitados para mostrarse via web (Forms Services) no aceptan firmas digitales; pero se pueden definir secciones del formulario para aceptar la firma digital (en caso se requiera firmar todo el documento; pues se debería cargar todos los controles en una sola sección).

Primero, veamos un formulario de liquidación de gastos que contiene 3 secciones; es decir, va a ser firmado por 3 personas (no es un caso aplicado en la vida real; pero muy similar al que hicimos en dicho proyecto)
Formulario Inicial

Vamos a configurar cada sección para que soporte firmas digitales. Ingresamos a las propiedades de la seccion
Propiedades de sección

Ficha “firmas digitales” -> Agregar datos
Ficha Firmas digitales

Seleccionamos la sección que se va a firmar -> Aceptamos
agregar

Hacemos lo mismo en las otras secciones:
propiedades

Ahora veamos la firma digital en cliente servidor:

Seleccionamos una imagen para firmar el documento:

Ingresamos un comentario:

El documento ha sido firmado y los controles de la sección no se pueden modificar.

Todo esto es bonito en cliente servidor; ahora viene la parte “interesante” que es la parte web. Para esta prueba el formulario ya estaba configurado para compatibilidad web tal como indiqué en una entrada anterior. (algún dia pondre el link a esa entrada.. jeje)

Via web el formulario se ve como la siguiente figura:

Ingreso algunos datos en la primera sección:

Firmo el documento, el explorador web me muestra una ventana flotante para ingresar los datos de la firma:

El sistema toma una foto del estado actual del formulario al momento de la firma:

El formulario ha sido firmado y no permite la modificación de los campos en la sección firmada:

Realizamos una segunda firma, para la segunda sección donde se encuentra el detalle de los gastos:

Luego de firmar, no se puede ingresar nuevas filas en la tabla dinámica ni modificar los datos ingresados en esta sección:

Firmamos la última sección:

Finalmente el formulario ha sido firmado en sus 3 secciones:

En cualquier momento se puede ver los detalles de la firma con la captura del estado del formulario en el momento que fue firmado.

Como bien diría mi madre “todo se puede en la vida “, yo agregaría “y aún más en el mundo de la informática” pues sí se puede configurar forms services para soportar firmas digitales, solo se deben hacer algunas configuraciones adicionales y tomar en cuenta algunos detalles como el uso de secciones. Todo sea por dejar de usar programas cliente servidor para llenar formularios web, como se hacía antiguamente.

Sigue leyendo

Sharepoint Workflows y Servicios Web

[Visto: 5356 veces]

En un anterior post he publicado los pasos necesarios para crear un flujo de trabajo usando sharepoint, infopath 2007, Forms Server y el framework 3.5. Es común encontrar que durante la ejecución del flujos de trabajo se requiera extraer información de diferentes sistemas como Bases de Datos Oracle, Informix, portales Websphere o alguna otra solución.

La primera solución que propondría para integrar estos flujos de trabajo con otros sistemas es la interacción con servicios web que pueden ser consumidos desde los formularios infopath; a continuación especificaré algunos de los pasos para implementar este tipo de soluciones.

La solución consiste en crear conexiones de datos en el formulario infopath y luego asociar los controles del formulario a los campos que solicita el servicio web (envío de data) y los campos que nos devuelve el servicio web (recepción de data).

A modo de ejemplo veamos el siguiente servicio web que nos envía un mensaje de texto.
Servicio web Saludo.

Luego de invocar al servicio web nos devuelve el siguiente mensaje.
XML devuelto por el servicio web

Una vez que hemos probado que el servicio web funciona correctamente, debemos asociar el servicio web a nuestro formulario infopath. Ingresar al menú Herramientas – Conexiones de Datos.
Menú Conexiones de datos

Seleccionar la opción Agregar.
Agregar Conexión

Seleccionar la opción Recibir Datos.
Recibir Datos

Seleccionar la opción Servicios Web.
Servicios Web

Especificar el WSDL
WSDL

Indicar la función que se ejecutará.
Función

Luego se deben asociar los campos de las conexiones de datos con los campos del formulario para interactuar con el servicio web. Para interactuar con Servicios Web que envian data o hacen ambas tareas (enviar y recibir data) se procede con los mismos pasos con la diferencia que al especificar el tipo de funcionalidad se debe seleccionar la opción Recibir Data.

Para interactuar con diferentes bases de datos o soluciones, se deben implementar servicios web que interactuen con estos sistemas y luego los servicios web se deben asociar a los formularios de infopath para su llamado durante la ejecución de un workflow; los servicios web pueden ser desarrollados en diferentes tipos de plataformas y no se presentarán problemas para su integración con los workflows ya que la comunicación se realiza via XML y no via un lenguaje determinado. Espero que este ejemplo sea de utilidad para su uso durante el desarrollo de flujos de trabajo muy complicados y en casos donde se debe mostrar información de diferentes sistemas en un formulario infopath que luego se convierte en una aplicación web. Sigue leyendo