Translate

miércoles, 16 de mayo de 2012

¿Cómo aprovisionar contenido en páginas?

Para aprovisionar de webparts una página que ya tenemos creada en Sharepoint, lo primero que tenemos que hacer, es identificar las zonas donde vamos a ubicar los webparts seleccionados para desarrollar el ejemplo.

En este caso en concreto vamos a utilizar las zonas (superiorDerecha, superiorIzquierda,footer y sidebar), que son las zonas que tenemos dadas de alta en nuestro Layout. Para identificar estos valores tenemos que buscar en el código fuente del Layout todos los webpartZones que tenemos, esto podremos hacerlo abriendo designer y visualizando la plantilla. Nota: Recuerda que lo que necesitamos son los identificadores de las zonas.

El código necesario para aprovisionar la página lo vamos a colocar en un EventReceiver dentro de nuestra feature.(Pulsando con el botón derecho del ratón sobre la feature).




public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
   using (SPSite site = new SPSite(((SPWeb)properties.Feature.Parent).Site.ID))
   {      using (SPWeb web = site.OpenWeb("URLDELSITE"))
          {
            ProvisioningHome(web, "index.aspx");

          }
   }
}

private void ProvisioningHome(SPWeb web, string PageUrl)

{
   SPLimitedWebPartManager webParts = web.GetLimitedWebPartManager(PageUrl,
System.Web.UI.WebControls.WebParts.PersonalizationScope.Shared);


    //EDITOR DE CONTENIDO      
   ContentEditorWebPart ContentEditorSidebar = new ContentEditorWebPart();
   XmlDocument xmlDoc = new XmlDocument();
   XmlElement xmlContent = xmlDoc.CreateElement("MyElement");
   xmlContent.InnerText = @"TEXTO DE PRUEBA";
   ContentEditorSidebar.Content = xmlContent;
   ContentEditorSidebar.ChromeType = System.Web.UI.WebControls.WebParts.PartChromeType.None;

   ContentEditorSidebar.ChromeState = System.Web.UI.WebControls.WebParts.PartChromeState.Normal;
   webParts.AddWebPart(ContentEditorSidebar, "g_BEAA2A68F8D94E7DA072E8E5F2A4719B", 0);
   webParts.SaveChanges(ContentEditorSidebar);


  //Vista de una lista 
   SPList listaHelp =
   web.Site.OpenWeb("URLDELALISTA\Allitems.aspx").Lists["NOMBREDELALIASTA"];
   string viewId = listaHelp.Views["NOMBREDELAVISTA"].ID.ToString();
   XsltListViewWebPart viewWebPartHelpAsignadas = new XsltListViewWebPart();
   viewWebPartHelpAsignadas.AllowEdit = true;
   viewWebPartHelpAsignadas.WebId = listaHelp.ParentWeb.ID;
   viewWebPartHelpAsignadas.ListId = listaHelp.ID;
   viewWebPartHelpAsignadas.ViewGuid = viewId;
   viewWebPartHelpAsignadas.ChromeType =  System.Web.UI.WebControls.WebParts.PartChromeType.None;

   viewWebPartHelpShareAsignadas.ChromeState = System.Web.UI.WebControls.WebParts.PartChromeState.Normal;
   webParts.AddWebPart(viewWebPartHelpAsignadas,  "g_BEAA2A68F8D94E7DA072E8E5F2A4719B", 1);
   webParts.SaveChanges(viewWebPartHelpAsignadas);
                         

    //Consulta de contenido       
   SPList listaContactos = web.Lists["NOMBREDELALISTA"];
   ContentByQueryWebPart cqWebPart = new ContentByQueryWebPart();
   cqWebPart.Title = "Contactos";
   cqWebPart.WebUrl = web.ServerRelativeUrl;
   cqWebPart.ListName = listaContactos.Title;
   cqWebPart.ListId = listaContactos.ID;
   cqWebPart.ChromeType = System.Web.UI.WebControls.WebParts.PartChromeType.None;
   cqWebPart.ChromeState = System.Web.UI.WebControls.WebParts.PartChromeState.Normal;
   webParts.AddWebPart(cqWebPart, "g_BEAA2A68F8D94E7DA072E8E5F2A4719B", 3);   
   webParts.SaveChanges(cqWebPart);

}

miércoles, 9 de mayo de 2012

Creando vistas progrmaticamente en Sharepoint

Esta semana vamos a ver como crear vistas, sobre una lista en Sharepoint, desde visual studio.
Para el ejemplo vamos a suponer que la lista a manipular se encuentra ubicada en el sitio principal, y que la característica que vamos a activar, reside en el mismo lugar

1. El primer paso a realizar es obtener una referencia a la lista sobre la que queremos trabajar. Ubicando nuestro código en el fichero MainFeature.EventReceiver.cs.



SPList listaCambio = web.Lists["MILISTA"];

2.Una vez tenemos la lista, nos disponemos a crear la vista:

StringCollection fieldsInDefaultView = new StringCollection();

fieldsInDefaultView.Add("Concesion");
fieldsInDefaultView.Add("FechaInicio");
fieldsInDefaultView.Add("Solicitante");

string Query = @"<OrderBy><FieldRef Name='ID' /></OrderBy>
<Where><Eq><FieldRef Name='SolicitanteLookUp' /><Value Type='Text'>CIO</Value></Eq></Where>";

listaCambio.Views.Add(("Nombre de la vista", fieldsInDefaultView, Query, 100,true,false,SPViewCollection.SPViewType.Html,false);

Ejemplo de código completo para generar una vista desde la activación de una característica:


public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
   SPSite site = properties.Feature.Parent as SPSite;
   if (site != null)
   {
       using (SPWeb web = site.RootWeb)
       {
             SPList listaCambio = web.Lists["Milista"];
             StringCollection fieldsInDefaultView = new StringCollection();


             //Aqui van los campos que queremos mostrar en la vista
             fieldsInDefaultView.Add("Concesion");
             fieldsInDefaultView.Add("FechaInicio");
             fieldsInDefaultView.Add("Solicitante");


             //Filtros y ordenación de la vista
             string Query = @"<OrderBy><FieldRef Name='ID' /></OrderBy>
              <Where><Eq><FieldRef Name='SolicitanteLookUp' /><Value Type='Text'>APP</Value></Eq></Where>";


             //Añadimos la vista a la lista con un nombre personalizado

             listaCambio.Views.Add(( "Nombre de la vista", fieldsInDefaultView,Query, 100, true, false, SPViewCollection.SPViewType.Html, false);


       }               
    }
}


miércoles, 25 de abril de 2012

Creando sitios desde PowerShell

En el post de hoy vamos ver como crear sitios de sharepoint mediante un script PowerShell, además de activar las características necesarias para nuestro desarrollo. Gracias a este tipo de scripts, podemos realizar tareas  repetitivas, sobretodo cuando nos encontramos en fase de desarrollo y tenemos que crear despliegues desde cero.


Como activar PowerShell-ISE
Ejecutar las siguientes lineas en la consola PowerShell:


Import-Module ServerManager
Add-Windowsfeature PowerShell-ISE

Una vez activado, ya tenemos una interface un poco mas amigable, donde podemos desarrollar nuestro script.




Add-PsSnapin Microsoft.SharePoint.PowerShell -ErrorAction "SilentlyContinue"


Write-Output " "
Write-Output "Creating Sub Sites"
$SiteCollectionURL = "http://labdesa/"
$SiteCollectionTemplate = "STS#1"
$SiteCollectionLanguage = 3082
$SubSites = @("Analistas","Factoria","Técnico de campo","Ingeniería","CIO","CAU","Administración")
$Suburl = @("analistas","factoria","tecnicodecampo","ingenieria","cio","cau","administracion")


for ($i=0; $i -le $SubSites.Length – 1; $i++)
{
  $SiteUrl = ""
  $SiteUrl = $SiteCollectionURL + "/"
  $SiteUrl = $SiteUrl += $SubUrl[$i]
  Write-Host $SiteUrl
  New-SPWeb -url $SiteUrl -Name $SubSites[$i] -Template $SiteCollectionTemplate -UseParentTopNav

}
Write-Output "FIN "


Mediante este script podemos crear tantos sitios como entradas hay en la variable SubSites.
Si queremos activar alguna feature en nuestros nuevos sitios, tendremos que añadir las siguientes lineas:
  • $CoreFeatureID="22a9ef51-737b-4ff2-9346-694633fe4416"
Que identifica la feature que deseamos activar, y dentro del bucle que crea los sites ponemos:

  • Enable-SPFeature –identity $CoreFeatureID -URL $SiteUrl

Nota: dependiendo la feature a activar tenemos que buscar el Guid que le corresponde.
Podemos ver todas las features instaladas y su guid, mediante el siguiente script:


$results=Get-ChildItem "\\MYSERVER\c$\Program Files\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\FEATURES\" feature.xml -rec
&nbsp;
foreach ($File in $results)
{
   [xml]$feat=gc $file.pspath
   $feat.feature | Select ID, Title, Scope
}

Para saber que plantillas utilizar a la hora de crear un site, podemos utilizar el siguiente script:

$globalAdmin = New-Object -TypeName "Microsoft.SharePoint.Administration.SPGlobalAdmin";
$webTemplates = $globalAdmin.VirtualServers[0].GetWebTemplates("1033");
$webTemplates | ft Name, Title, Description -AutoSize -Wrap

lunes, 23 de abril de 2012

Filtrando RSS en Sharepoint

Recientemente me he encontrado con el reto de realizar una integración entre dos productos residentes en Sharepoint 2010.

Como fuente de datos vamos a utilizar una lista residente en nuestra Site(1), y como recurso de presentación un lector de rss, que el mismo sharepoint nos proporciona ubicándolo en el Site(2), pero nos encontramos con que las fuentes de datos tanto en la parte origen, como en la de destino, no se pueden filtrar, aun publicando una vista sobre la lista que queremos filtrar. Por este motivo, tenemos que realizar unas configuraciones intermedias en una consulta de contenido, que será quien exponga los datos filtrados.

El proceso a realizar es el siguiente:

En el site que va a servir como origen de datos, creamos una página con tantas consultas de contenido prefiltradas, como rss de lectura vayamos a tener.

NOTA: Recuerda activar las fuentes en la conflagración de cada una de las consultas de contenido, de esta manera aparecerá el icono que nos muestra el feed rss.

Recuerda que para poder conectar un lector rss a una fuente de datos externa, dicha fuente ha de tener acceso anónimo, ya que nuestro lector no permite el paso de credenciales.

Una vez realizado esto, solo tenemos que colocar cada uno de los lectores rss, apuntando a la dirección que nos proporciona cada una de las consultas de contenido al pulsar sobre el icono rss. El aspecto de nuestro lector lo podemos modificar desde la maquetación xsl, que se presenta en el propio webpart.




jueves, 5 de abril de 2012

Sharepoint + Excel = PowerPivot

El proposito de este post, es integrar gráficos dinámicos en sharepoint 2010 que tomen como fuente de datos una lista residente en el propio servidor.

El primer paso que debemos realizar es instalar el plugin powerpivot para excel
http://www.microsoft.com/en-us/bi/powerpivot.aspx , de esta menera podremos crear un grafico dinámico basado en una lista personalizada ubicada en nuestro servidor SharePoint 2010.

Desde PowerPivot para Excel podemos usar como fuente de datos una lista de SharePoint 2010. Para poder usarla la lista de SharePoint debe poder ofrecer los datos como Data Feed (en formato ATOM).

Para esto SharePoint 2010 debe:

- Tener un servicio web capaz de ofrecer los datos en ATOM (se instala a través de PowerPivot para SharePoint)
    • Uno ver los Pre-requisitos de SharePoint 2010 es ADO.Net Data Services que proporciona un servicio WCF REST llamado ListData.svc, el cual nos ofrece en formato ATOM todos los datos de las listas de SharePoint.

Para comprobar que SharePoint 2010 es capaz de proporcionar datos vía Data Feed accedemos a http://mysitecollecion/_vti_bin/ListData.svc entonces debemos de ver un XML con todas las listas:


NOTA: Este servicio WCF REST nos viene instalado en SharePoint independientemente de si tenemos instalado PowerPivot para SharePoint, lo único que cuando tenemos PowerPivot para SharePoint desde las configuraciones de las listas se nos ofrece la opciçón “Export as Data Feed” que nos proporciona la url de dicho servicio para una lista en particular.

Una vez que tenemos funcionando el servicio de Data Feed de SharePoint 2010, entonces ya podemos usar PowerPivot para Excel para importar datos desde SharePoint para ello:

1. Obtenemos el fichero .atomsvc que nos dará la cadena de conexión. Para ello vamos a la lista de SharePoint y desde la pestaña “Lists”, pulsamos en “Export as Data Feed”.

Esta opción nos genera un fichero .atomsvc con este formato:

<?xml version="1.0" encoding="utf-8"?>
<app:service xmlns:a10="http://www.w3.org/2005/Atom" xmlns:app="http://www.w3.org/2007/app">
<app:workspace>
<app:collection href="http://ejemplo/soporte/_vti_bin/ListData.svc/Ocupaci%C3%B3nPorRecurso">
<a10:title type="text">Ocupación por recurso</a10:title>
</app:collection>
</app:workspace>
</app:service>

Si nos fijamos dentro del atomsvc tenemos la URL hacia el servicio REST ListData.svc y el título de la Lista de SharePoint.


2. Una vez tenemos el fichero .atomsvc, en la ventana de PowerPivot, pulsamos en en boton “From Data Feeds”:

En el campo Data Feed Url ponemos:

- La URL del Servicio REST con el formato http://sitecollection/_vti_bin/ListData.svc/NombreLista, en nuestro caso http://test/_vti_bin/ListData.svc/Ocupacionporrecurso.


3. Autenticación

Autenticación Básica en SharePoint
La forma más fácil y rápida de acceder a un Data Feed con PowerPivot para Excel es usando autenticación básica. Esta se puede configurar desde el IIS Manager en el servidor front-end de SharePoint.

En nuestro caso en concreto, utilizaremos Autenticación SSPI




NOTA: Si hemos puesto directamente la URL estará relleno el campo Base URL, si hemos usado el atomsvc entonces estará configurado el campo Service Document Url con la ruta de dicho atomsvc.