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:
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 !
Publicar un comentario