Sharepoint 2010 + Infopath 2010: The operation could not be completed

En un formulario de Infopath, al crear una nueva conexión de extracción de datos, se presentó el siguiente mensaje de error:



En mi escenario, se creó un solo sitio de Project Web Application y un sitio secundario con una biblioteca de formularios. El mensaje de error se presenta cuando no se encuentra creada una colección de sitios en el sitio raiz de IIS.


Para solucionar el problema ejecutar el siguiente procesimiento:


- Utilizar la consola de Administración Central de Sharepoint para crear una colección de sitios en el sitio raiz de IIS (Sitio Web por Defecto).



- Crear nuevamente la conexión de recepción de información en el formulario de Infopath.


 


 


Como siempre espero esta información sea de su utilidad.

Sharepoint 2010 – Infopath 2010: Check-In y Check-Out automático de un formulario.

Al igual que cualquier documento que puede ser abierto y modificado por varias personas, es importante controlar que solo una persona a la vez pueda tomar el control de un documento (desproteger) y realizar los cambios necesarios, asegurando que cualquier otro usuario que abra el mismo documento solo tenga una vista de lectura. Al finalizar el proceso de edición, el usuario que tomó el control debe grabar y cerrar el documento (proteger) de tal forma que otro usuario pueda tomar el control de mismo cuando lo requiera.


Para el caso de los formularios de Infopath 2010, y sobre todo cuando trabajamos con un workflow relacionado a la biblioteca de formularios, es importante que este proceso de desprotección y protección sea transparente para el actor (usuario) de la actividad actual.


Para lograr este objetivo hay que ejecutar los siguiente pasos:


1. Crear dos conexiones relacionados a los servicios web Checkoutfile y Checkinfile. Ambos servicios web los expone directamente Sharepoint.


 


 


 


Algunos enlaces importantes:


http://www.infopathdev.com/blogs/mel_balsamo/archive/2011/05/15/create-an-xtp-to-check-in-and-check-out-forms-using-udc-files.aspx


http://www.infopathdev.com/forums/p/16360/61173.aspx


http://www.infopathdev.com/forums/t/7603.aspx

Sharepoint 2010: Como ampliar el tamaño de un campo de tipo "Búsqueda" (Lookup) en una lista personalizada

En una lista de Sharepoint, un campo de tipo Lookup se utiliza para hacer referencia a una lista que contiene las opciones o infomación que requerimos. Por ejemplo, en una lista personalizada de Sharepoint puedo mantener el registro de varios documentos de la organización y en otra lista tengo otro campo en el cual deseo seleccionar varios documentos relacionados. Resulta que cuando el nombre del campo que se relaciona es demasiado extenso y además se van a seleccionar varios documentos, la vista del campo relacionado es similar a la siguiente figura:


 


El campo “Documentos Relacioados” se encuentra configurado de la siguiente forma:



 Para ampliar el tamaño de la columna “Documentos Relacionados” se considera la cadena de caracteres de mayor longitud. Es necesario editar la página en donde se encuentre el campo de tipo “Lookup” e insertar un webpart de tipo WCE (Web Content Editor), editar el código HTML e ingresar el siguiente código:


<script src=”/ScriptsDocumentos/jquery-1.7.2.min.js” type=”text/javascript”></script><script src=”/ScriptsDocumentos/jquery.SPServices-0.7.1a.min.js” type=”text/javascript”></script><script type=”text/javascript”>


$(document).ready(function() {


$().SPServices.SPSetMultiSelectSizes({


multiSelectColumn: “Documentos Relacionados”


});


}); </script>


El efecto posterior al ingreso del script es el siguiete:



Los archivos: jquery-1.7.2.min.js y jquery.SPServices-0.7.1a.min.js, pueden descargarlo de este enlace:  http://msmvps.comhttp://blogs.msmvps.com/tech-steps/files/2014/08/2337.JScripts.zip, recuerden incluirlos en una biblioteca de Sharepoint y hacer la referencia correcta al momento de escribir el código en el WCE.

Como enviar archivos adjuntos de Infopath 2010 como adjuntos de correo electrónico.

El reto de hoy es generar el código necesario para poder enviar un documento adjunto de un formulario de Infopath 2010 como un adjunto de un correo electrónico. Como base es necesario tener al menos un control de tipo adjunto y un botón en el formulario. En el botón es necesario ingresar el siguiente código:


- Importante incluir las siguientes referencias:


using System.IO;
using System.Net.Mail;
using System.Text;


- Algunas variables y constantes necesarias para el proceso:


private const int SP1Header_Size = 20;
private const int FIXED_HEADER = 16;
private int fileSize;
private int attachmentNameLength;
private string attachmentName;
private byte[] decodedAttachment;


- Dos funciones principales que cumplen la función de decodificadores del archivo adjunto:


public void InfoPathAttachmentDecoder(string theBase64EncodedString)
  {
   byte [] theData = Convert.FromBase64String(theBase64EncodedString);
   using(MemoryStream ms = new MemoryStream(theData))
   {
    BinaryReader theReader = new BinaryReader(ms);   
    DecodeAttachment(theReader);
   }
  }


  private void DecodeAttachment(BinaryReader theReader)
  {
   //Position the reader to obtain the file size.
   byte[] headerData = new byte[FIXED_HEADER];
   headerData = theReader.ReadBytes(headerData.Length);


   fileSize = (int)theReader.ReadUInt32();
   attachmentNameLength = (int)theReader.ReadUInt32() * 2;
   
   byte[] fileNameBytes = theReader.ReadBytes(attachmentNameLength);
   //InfoPath uses UTF8 encoding.
   Encoding enc = Encoding.Unicode;
   attachmentName = enc.GetString(fileNameBytes, 0, attachmentNameLength – 2);
   decodedAttachment = theReader.ReadBytes(fileSize);
  }


- Y finalmente la llamada a los procedimientos en el botón del formularios, este código aplica cuando es un solo campo de documento adjunto:


 XPathNavigator Adjunto = this.MainDataSource.CreateNavigator().SelectSingleNode(“/my:misCampos/my:Adjuntos/my:Documento”, this.NamespaceManager);
String textoAdjunto = Adjunto.Value;
if (textoAdjunto.Length > 0)
{
                InfoPathAttachmentDecoder(textoAdjunto);
                MemoryStream streamAdjunto = new MemoryStream(decodedAttachment);
                Attachment adjuntoCorreo = new Attachment(streamAdjunto, attachmentName);
                MailMessage mail = new MailMessage();
                SmtpClient SMTPServer = new SmtpClient(“servidor_correo”);
                mail.From = new MailAddress(“remitente@midominio.com“);
                mail.To.Add(“destinatario@otrodominio.com“);
                mail.Subject = “Adjunto desde Infopath”;
                mail.Body = “prueba”;
                mail.Attachments.Add(adjuntoCorreo);
                SMTPServer.Send(mail);
}


- Este código aplica cuando es una tabla de repetición:


XPathNavigator root = MainDataSource.CreateNavigator();
XPathNodeIterator RepTable = root.Select(“/my:misCampos/my:Adjuntos”, NamespaceManager);
MailMessage mail = new MailMessage();
SmtpClient SMTPServer = new SmtpClient(“servidor_correo”);
mail.From = new MailAddress(“remitente@midominio.com“);
mail.To.Add(“destinatario@otrodominio.com“);
mail.Subject = “Adjuntos desde infopath”;
mail.Body = “prueba”;
while (RepTable.MoveNext())
{
                XPathNavigator Adjunto = RepTable.Current.SelectSingleNode(“my:Documento”, NamespaceManager);
                String textoAdjunto = Adjunto.Value;               
                if (textoAdjunto.Length > 0)
                {
                    InfoPathAttachmentDecoder(textoAdjunto);
                    MemoryStream streamAdjunto = new MemoryStream(decodedAttachment);
                    Attachment adjuntoCorreo = new Attachment(streamAdjunto, attachmentName);
                    mail.Attachments.Add(adjuntoCorreo);                   
                }
}
SMTPServer.Send(mail);


Algunos enlaces de referencia:


- http://support.microsoft.com/kb/2517906


- http://support.microsoft.com/kb/892730


- http://www.csharp411.com/c-convert-string-to-stream-and-stream-to-string/


- http://social.msdn.microsoft.com/Forums/en-US/sharepointinfopath/thread/87e79f00-0277-4dbe-9092-c9e9bafe23a0/