29/10/07

Submit en InfoPath 2007 (por codigo)

Si queremos añadir funcionalidad a nuestro Submit en InfoPath deberemos realizar toda esta funcionalidad con codigo por detrás. Para ello lo primero que hacemos es realziar el submit y acto seguido editamos el item y modificamos los campos que queramos. Esto nos puede servir para insertar columnas adicionales o simplemente actualizar columnas existentes con nuevos valores.

La funcion sería algo así:

public void FormEvents_Submit(object sender, SubmitEventArgs e)
{
// Declaramos todas las variables que nos van a hacer falta ...
string sitePath = "http:// ... ruta del site";
string webName = "PuertaPuerta";
string listaName = "Formularios";
string codigoPath = "/my:assetTracking/my:field18";
string revisoresName = "Revisor";
string zonaName = "Zona";
StreamWriter sw = null;
try
{
FileStream file = new FileStream("C:\ ruta del log de errores donde queremos registrarlos", FileMode.Append,FileAccess.Write);
sw = new StreamWriter(file);
}
catch(Exception ex) { }
// Get a reference to the submit data connection
FileSubmitConnection fc = (FileSubmitConnection)this.DataConnections["Submit1"];
try
{
fc.Execute();
System.Threading.Thread.Sleep(2000);
// Insertamos los usuarios que pueden ver ese documento ...
// El documento está insertado. Ahora lo que tenemos que hacer es actualizar el item
SPSite site = new SPSite();
SPWeb web = site.OpenWeb(webName);
web.AllowUnsafeUpdates = true;
SPList lista = web.Lists[listaName];
SPListItem listItem;
string codigo = CreateNavigator().SelectSingleNode(codigoPath, NamespaceManager).InnerXml;
for (int i = 0; i <= lista.ItemCount - 1; i++)

// Buscamos el item que nos hace falta. Podemos usar tambien el SPQuery
{

// Realizamos la actualizacion que deseemos en el item
// Actualizamos el item...
listItem.Update();
}
}
// Efectuamos el Submit para que el formulario se cierre.
e.CancelableArgs.Cancel = false;
}
catch (Exception ex)
{
sw.WriteLine(ex.Message + ": " + System.DateTime.Now.ToString());
e.CancelableArgs.Cancel = true;
}
finally
{
sw.Close();
}

1 comentario:

Muadiv dijo...

Hola, muy bueno el blog, te queria hacer una pregunta, necesito cambiar en el evento load del form los dataconnections , cambiandolo dinamicamente, dandole un string donde esta el sitio con el webservice para que traiga los datos.


gracias !