Archivo de la etiqueta: content-type

Crear items con servicios REST de diferentes tipos de contenido

Otra duda que se nos ha planteado es la creación de items en una lista o biblioteca de diferentes tipos de contenido utilizando servicios REST en  SharePoint 2010.

Previamente ya habíamos visto como Listar, añadir, modificar y borrar información con REST en SharePoint 2010, pero partíamos que la lista o biblioteca solo tenia un tipo de contenido por defecto. Ahora se nos plantea un complicación mas, que es crear un ítem de un tipo de contenido concreto.

Suponemos que tenemos la lista “DemoList” a la cual tiene el tipo de contenido por defecto “Elemento” y le hemos añadido un segundo tipo de contenido llamado “Anuncio”.

Ahora queremos añadir un nuevo item de tipo “Anuncio”… lo que deberíamos hacer es definir ese nuevo item y especificar su tipo de contenido:

static void CreateDataContentType()
{
	//recupera la informacion del servicio 
	DevPortalHomeDataContext dataContext = new DevPortalHomeDataContext(new Uri("http://servidor/_vti_bin/listdata.svc/"));
	dataContext.Credentials = CredentialCache.DefaultNetworkCredentials; 
	//crea y define un nuevo item en la lista DemoList (definimos el Content Type)
	DemoListItem demoListItem = new DemoListItem()
	{
		ContentType = "Announcement",
		Title = "Registro de tipo contenido Anuncio",
		Cuerpo = "Cuerpo del anuncio"
	};
	//añade el item a la lista
	dataContext.AddToDemoList(demoListItem);
	dataContext.SaveChanges();
	Console.WriteLine("Registro creado correctamente");
}

En el caso de no especificar el campo ContentType, SharePoint asume que el nuevo item, es del tipo de contenido predeterminado.

En la siguiente imagen se puede apreciar, como el nuevo registro añadido con esta función, es de tipo “Anuncio”:

 Es importante saber que has de conocer los posibles tipos de contenido de la lista en cuestión, ya que no hay forma de saber (ni siquiera con los metadatos: http://servidor/_vti_bin/listdata.svc/$metadata) de los posibles valores del campo: <Property Name=”TipoDeContenido” Type=”Edm.String” Nullable=”true” />.

 

Acceder a listas externas basadas en SQL Server a traves de BCS en SharePoint 2010

Una de las mejoras de SharePoint 2010 es la de por añadir listas, basadas en tipos de contenido externo. Las posibles fuentes que existen de contenido externo son tres (aunque en este caso únicamente voy a analizar el caso de SQL Server ya que creo que es la mas utilizada y no necesita programación alguna, en otro post analizaré como hacerlo usando un Servicio WCF):

  • Servicio WCF
  • SQL Server
  • Tipo .NET

Para poder crear un BCS (Busines Conectivity Service) basado en un tipo de contenido externo, lo primero que necesitamos tener es SharePoint Designer 2010 (el cual podemos descargar de forma gratuita desde Microsoft). Los pasos a seguir para crear listas externas serian los siguientes:

  • Abrimos SharePoint Designer y accedemos a la secccion “External Content Types” en el menú lateral izquierda

  • En la parte superior de la cinta, pulsamos sobre “New External Content Type”

  • En la siguiente pantalla, completamos todos los datos como nombre, nombre para mostrar, espacio de nombres… y por ultimo pinchamos en “Click here to discover external data sources and define operations”
  • Presionamos el boton “Add Connection” y añadimos una nueva fuente de datos externa de tipo: “SQL Server”
  • Añadimos una nueva conexión a SQL Server, y aquí tenemos que ver que opción de autenticación aplicamos:
    • “Connect with User’s Identity” – Esta opción realizará la conexión utilizando las credenciales del usuario que esta accediendo al BCS
    • “Connect with Impersonated Windows Identity” – Es necesario crear una nueva clave en el Secure Store Service e introducir el “Sercure Storage Application ID”.
    • “Connect with Impersonated Custom Identity” – Es necesario crear una nueva clave en el Secure Store Service e introducir el “Sercure Storage Application ID”.

  • Una vez tenemos nuestro origen de datos creados, debemos crear las acciones necesarias sobre los objetos de SQL Server (tablas, vistas…) que deseemos, como seria el caso de una acción que consulte todos los registros de la tabla/vista “New Read List Operation”, y tambien seria interesante una segunda acción que consulte un único registro de la tabla/vista “New Read Item Operation”.

  • Competas la pantalla que definen la acción: filtro, parámetros de entrada, parámetros de salida…
  • Por ultimo y para crear la lista en base a este nuevo contenido definido, volvemos a acceder desde el menú lateral izquierdo”External Content Types”, seleccionamos el tipo de contenido externo, y con el botón secundario pinchamos en “External list”.

  • Damos un nombre y descripción a la nueva lista y deberíamos poder acceder a ella sin mayor problema.

Nos pueden suceder varios problemas por los que no podamos ver la información. La mayoría de los casos bien sera por el tamaño de numero de registros que este devolviendo la consulta o por tema de permisos del usuario:

  • En el caso que sea un problema con el numero máximo de registros que devuelve el BCS, podéis consultar esta entrada para solucionarlo: Aumentar el numero de filas de BCS en SharePoint 2010.
  • Si por el contrario se trata de un problema de permisos, deberás asegurarte que el usuario, tiene acceso para ello si editas el contenido externo creado, podrás verificar si los usuarios del dominio pueden ejecutarlo

Como enviar un email con SharePoint programaticamente

Si necesitáis enviar un email utilizando SharePoint 2010 a través de programación, tendremos que utilizar la clase  SPUtility.SendEmail, para ello y como requisito previo has de haber configurado en tu servidor/granja los parámetros necesarios en Correo electrónico saliente en:

Central Admin -> System Settings -> Configure outgoing e-mail settings

No voy a entrar en detalles, ya que la configuración de esta sección es muy sencilla…

Una vez configurado el correo, ya podrás usar la clase SPUtility.SendEmail para el envio de correos:

public static string EnviarEmail(SPWeb Web, string De, string Para, string Copia, string CopiaOculta, string Asunto, string Cuerpo, bool FormatoHTML)
{
	string emailSummary;
	var messageHeaders = new StringDictionary();
	messageHeaders.Add("to", Para);
	messageHeaders.Add("from", De);
	messageHeaders.Add("subject", Asunto);
	messageHeaders.Add("cc", Copia);
	messageHeaders.Add("bcc", CopiaOculta);
	string mimeType = "text/plain";
	if (FormatoHTML){ mimeType = "text/html"; }
	messageHeaders.Add("content-type", mimeType);
	bool sendMail = SPUtility.SendEmail(Web, messageHeaders, Cuerpo);
	if (sendMail)
	{
		emailSummary = "" + "" + Para + "" + "" + De + "" +
		"" + SPEncode.HtmlEncode(Asunto) + "" +
		"" + Copia + "" + "" + CopiaOculta + "" +
		"" + SPEncode.HtmlEncode(Cuerpo) + "" + "";
	}
	else { throw new SafException("Error al enviar el email"); }
	return emailSummary;
}