Este documento proporciona una introducción a SharePoint 2010 como plataforma de desarrollo. Explica la jerarquía de objetos principales como SPFarm, SPWebApplication, SPSite, SPWeb y SPList. También cubre cómo trabajar con estos objetos mediante la recuperación y actualización de propiedades, y la creación y eliminación de objetos en las colecciones.
El uso de las tic en la vida ,lo importante que son
DesarrolloAplicacionesSharePoint2010
1. SharePoint
2010
Desarrollo de
Aplicaciones
Consultec, S.L.
Bilbao – Donostia San Sebastián – Madrid – Pamplona – Santander – Vitoria Gasteiz
2. Índice
Introducción a la plataforma de Desarrollando soluciones mediante
desarrollo de SharePoint 2010 Business Connectivity Services
Utilizando las herramientas de (BCS)
desarrollo de SharePoint 2010 Desarrollando flujos de trabajo para
Desarrollando Web Parts SharePoint 2010
Trabajando con objetos de Trabajando con el API de cliente de
SharePoint en el servidor SharePoint 2010
Creando receptores de eventos Desarrollando interfaces de usuario
interactivas
2
3. Índice
Desarrollando aplicaciones Silverlight para SharePoint 2010
Desarrollando soluciones „sandbox‟
Trabajando con perfiles de SharePoint y el API de taxonomía
Desarrollando soluciones de gestión de contenido
3
4. Un par de definiciones…
Qué es una plataforma de desarrollo de aplicaciones
“Idea o concepto general que engloba una amplia gama de tecnologías interconectadas para el
desarrollo de aplicaciones. Por ejemplo, ASP.NET es una plataforma para crear aplicaciones Web
que, a su vez, pertenece a la plataforma de aplicaciones que proporciona el marco o infraestructura
.NET (.NET Framework).”
Qué es SharePoint
“Puede definirse como un conjunto de tecnologías que permiten a los usuarios crear sus propios
sitios Web y utilizarlos para hacer cosas como compartir documentos, por ejemplo, sin tener que
depender de nadie más. Desde el punto de vista del desarrollador, SharePoint proporciona una
plataforma de aplicaciones basada en la plataforma ASP.NET y otras tecnologías .NET y que añade
una gran cantidad de funcionalidad específica.”
4
5. Introducción a la plataforma de desarrollo
SharePoint 2010 como plataforma de desarrollo
Jerarquía de objetos en SharePoint 2010
Trabajando con objetos de SharePoint 2010
5
6. SharePoint como plataforma de desarrollo
Panorama del desarrollador de SharePoint
Tecnología
Ventajas de SharePoint 2010 como plataforma de desarrollo
Tipos comunes de proyectos de desarrollo de SharePoint
6
8. Panorama del desarrollador de SharePoint
Herramientas de desarrollo Entorno de ejecución
SharePoint Designer 2010 „On-premise‟ / online
Microsoft Visual Studio 2010 Curva de aprendizaje fácil para los administradores
Microsoft SharePoint 2010 SDK Fácil administración de soluciones
Tipos de aplicaciones a desarrollar Comunidad de desarrolladores
Soluciones de Web Parts Comunidad madura y activa
Aplicaciones de negocio Multitud de foros, blogs, etc.
Portales Microsoft „guidance & best practices‟:
Personalizaciones o extensiones http://msdn.microsoft.com/es-es/library/ff770300.aspx
de funcionalidades de SharePoint http://msdn.microsoft.com/es-es/sharepoint/ff660756
8
9. Tecnología
Entorno de 64 bits que garantiza la estabilidad, el alto rendimiento y la escalabilidad
Plataforma de desarrollo basada en ASP.NET 3.5
9
10. Ventajas como plataforma de desarrollo
Plataforma funcional (qué Entorno de ejecución (qué
funcionalidades ofrece por defecto) características ofrece por defecto)
Administración de datos, Seguridad
documentos y contenido Web Escalabilidad
Representación de páginas y datos Disponibilidad
Marco de colaboración Conectividad
Búsqueda Extensibilidad
Administración de metadatos Capacidad de administración
Marco de procesos de negocio Rendimiento
Marco social Analítica Web
Cumplimiento de estándares
10
11. Tipos comunes de proyectos de desarrollo
Soluciones de Web Parts
Desde algo tan simple como presentar datos de una lista hasta soluciones más complejas
Aplicaciones de negocio
Que incluyan características como listas, flujos de trabajo, formularios y receptores de eventos
Portales
Almacenamiento de documentos, colaboración, blogs, wikis y búsquedas
Administrar datos en aplicaciones externas desde SharePoint
Personalizaciones o extensiones de funcionalidades de SharePoint
Flujos de trabajo o receptores de eventos personalizados
Personalización del aspecto („look-and-feel‟)
11
12. Jerarquía de objetos en SharePoint 2010
Jerarquía de objetos
SPFarm
SPService
SPWebApplication
SPSite
SPWeb
SPList
12
13. Jerarquía de objetos en SharePoint 2010
Son objetos que nos permiten construir soluciones programáticamente
Son objetos fáciles de utilizar
Es importante comprender cómo se relacionan entre sí (en la jerarquía)
13
14. SPFarm
Es el objeto de más alto nivel en la jerarquía, representa a la granja de SharePoint
Es una clase y también contiene un objeto estático global:
• Se puede declarar una variable de tipo SPFarm
• Se puede acceder al objeto estático global SPFarm actual a través de SPFarm.Local
No tiene constructores
Ya existe para el código que referencie al ensamblado Microsoft.SharePoint.Administration.dll
No es necesario crearlo, es más, no puede ser creado o eliminado
SPFarm.Local proporciona el punto de entrada para la granja actual de SharePoint
El objeto expone propiedades, métodos y eventos que afectan a las configuraciones a
nivel de granja
14
15. SPFarm
Ejemplo:
SPFarm thisFarm = SPFarm.Local;
if (thisFarm.CurrentUserIsAdministrator)
{
...
}
En general, sólo se utilizarán objetos SPFarm cuando se estén creando aplicaciones
administrativas para SharePoint
No es necesario utilizarlo para acceder a colecciones de sitios, sitios Web, listas y
elementos de datos de las listas desde aplicaciones para soluciones de colaboración
15
16. SPService
Los objetos SPService representan servicios de granja de SharePoint
Servicios de granja como: Forms Services, Access Services, PerformancePoint Services,
Excel Calculation Services, SharePoint Server Search Service, User Profile Service, Business
Data Connectivity Services, Managed Metadata Services, etc.
Es una clase base de la que heredan las clases para los servicios específicos
SPWebService es un tipo de SPService
Cada aplicación Web pertenece a un SPWebService
16
17. SPService
Ejemplo:
SPFarm thisFarm = SPFarm.Local;
if(thisFarm.CurrentUserIsAdministrator)
{
foreach (SPService svc in thisFarm.Services)
{
if (svc is SPWebService)
{
SPWebService webSvc = (SPWebService)svc;
...
}
}
}
En general, sólo se utilizarán objetos SPService cuando se estén creando
aplicaciones administrativas para SharePoint (igual que con SPFarm)
17
18. SPWebApplication
Los objetos SPWebApplication representan aplicaciones Web de SharePoint que son
análogas a los sitios Web de IIS
Nos son lo mismo que las colecciones de sitios o los sitios Web de SharePoint
Cada aplicación Web tiene su propio archivo de configuración Web.config
Normalmente, las aplicaciones Web son creadas por los administradores a través de la
administración central de SharePoint (lo que automáticamente crea un sitio Web de IIS)
Los desarrolladores también pueden crear aplicaciones Web programáticamente, pero no es
común (por ejemplo, si se está creando una aplicación administrativa para SharePoint)
Los desarrolladores suelen trabajar con una aplicación Web (SPWebApplication) existente (por
ejemplo, para crear nuevas colecciones de sitios, para añadir o modificar configuraciones en el
archivo Web.config utilizando la clase SPWebConfigModification, etc.)
18
19. SPWebApplication
Ejemplo:
SPFarm thisFarm = SPFarm.Local;
if(thisFarm.CurrentUserIsAdministrator)
{
foreach(SPService svc in thisFarm.Services)
{
if(svc is SPWebService)
{
SPWebService webSvc = (SPWebService)svc;
foreach (SPWebApplication webApp in webSvc.WebApplications)
{
if (!webApp.IsAdministrationWebApplication)
{
...
}
}
}
}
}
19
20. SPSite
Los objetos SPSite representan colecciones de sitios de SharePoint
Cada SPSite tiene una propiedad RootWeb que representa un sitio Web de SharePoint
RootWeb es un objeto SPWeb (que veremos posteriormente)
Las colecciones de sitios son contenedores para:
Usuarios, grupos de usuarios, permisos y niveles de permisos de SharePoint (seguridad)
Sitios Web y listas de SharePoint (estructura y contenido)
Pueden contener características a nivel de colección de sitios y soluciones (funcionalidad)
Un desarrollador normalmente accede a objetos SPSite desde código para referenciar
los sitios Web (SPWeb) que contienen o para administrar su seguridad
programáticamente. También se pueden desarrollar características a nivel de colección
de sitios y soluciones (desarrollos empaquetados para SharePoint).
20
21. SPSite
Los objetos SPSite se pueden instanciar de varias maneras:
Pasando una URL a su constructor
Instanciando un miembro de la colección Sites de un objeto SPWebApplication
Referenciando la colección de sitios del contexto actual (SPContext.Current.Site)
Las diferentes maneras de crear o referenciar instancias requieren diferentes
estrategias de eliminación (para no dejar “basura” innecesaria en memoria)
21
22. SPSite
Ejemplos:
SPSite remoteSite = new SPSite("http://sharepoint");
...
remoteSite.Dispose();
...
foreach (SPSite site in webApp.Sites)
{
try
{
...
}
finally
{
site.Dispose();
}
}
SPSite thisSite = SPContext.Current.Site;
...
// No se crea una nueva instancia, se referencia una instancia existente
22
23. SPWeb
Los objetos SPWeb representan sitios Web de SharePoint
Los sitios Web pueden contener páginas, listas y bibliotecas de documentos (un tipo de listas)
También pueden contener otros sitios Web (sub-sitios)
Los objetos SPWeb se pueden instanciar de varias maneras:
Utilizando la propiedad RootWeb de un objeto SPSite
Instanciando un miembro de la colección AllWebs de un objeto SPSite o un miembro de la
colección Webs de un objeto SPWeb ya instanciado (por ejemplo, utilizando RootWeb)
Obteniendo el valor que devuelve el método OpenWeb de un objeto SPSite
Referenciando el sitio Web del contexto actual (SPContext.Current.Web)
Las diferentes maneras de crear o referenciar instancias requieren diferentes
estrategias de eliminación (igual que con SPSite)
23
24. SPWeb
Ejemplos:
SPSite knownSite= new SPSite("http://sharepoint");
SPWeb knownWeb = knownSite.RootWeb;
SPWeb knownSubWeb = knownSite.OpenWeb("/projects");
...
knownSubWeb.Dispose(); ...
knownWeb.Dispose(); foreach (SPWeb childWeb in site.RootWeb.Webs)
knownSite.Dispose(); {
try
{
...
}
finally
{
childWeb.Dispose();
}
}
SPWeb thisWeb = SPContext.Current.Web;
...
// No se crea una nueva instancia, se referencia una instancia existente
24
25. SPList
Los objetos SPList representan listas de SharePoint y contienen datos en objetos
SPListItem (son contenedores de datos)
Pueden contener elementos de datos propios de SharePoint, documentos, páginas, imágenes,
etc. (si son bibliotecas) y referencias a elementos de otras listas
Los objetos SPList pueden instanciarse como miembros de la colección Lists de un
objeto SPWeb
Los objetos SPList exponen muchas propiedades que afectan a las listas
25
27. Trabajando con objetos de SharePoint 2010
Recuperar propiedades de los objetos
Actualizar propiedades de los objetos
Crear y borrar objetos (en las colecciones)
Eliminar objetos (liberar memoria)
27
28. Recuperar propiedades de los objetos
Ejemplos:
SPWeb thisWeb = SPContext.Current.Web;
string title = thisWeb.Title;
SPWeb thisWeb = SPContext.Current.Web;
SPListCollection listColl = thisWeb.Lists;
foreach (SPList list in listColl)
{
...
}
28
29. Actualizar propiedades de los objetos
Ejemplo:
SPWeb thisWeb = SPContext.Current.Web;
thisWeb.Title = "My New Title";
thisWeb.Update();
La llamada al método Update asegura que el valor modificado de la propiedad persiste
Si se modifican los valores de varias propiedades no es necesario llamar al método
Update para cada cambio, es suficiente con una única llamada al final para conservar
todos los cambios
29
30. Crear y borrar objetos (en las colecciones)
Ejemplos:
SPSite thisSite = SPContext.Current.Site;
SPWeb newWeb = thisSite.AllWebs.Add("Projects");
SPWeb thisWeb = SPContext.Current.Web;
Guid listGuid = thisWeb.Lists.Add("MyTasks","My To-Do List",
SPListTemplateType.Tasks);
SPList myNewList = thisWeb.Lists[listGuid];
SPWeb thisWeb = SPContext.Current.Web;
thisWeb.Delete();
Instanciar un objeto en código mediante el uso de la palabra clave new y los
parámetros del constructor no necesariamente hace que el cambio persista en
SharePoint, crearlo añadiéndolo a una colección sí hace que persista
Borrar un objeto de una colección no es lo mismo que eliminarlo (liberando recursos)
30
31. Eliminar objetos (liberar memoria)
La mayoría de los objetos de SharePoint no requieren ser eliminados para liberar los
recursos que tengan asignados
Hay excepciones notables como SPSite y SPWeb
Existen unas buenas prácticas o patrones para eliminar los objetos SPSite y SPWeb
Como regla general, si se crea una nueva instancia de estos objetos debe ser eliminada
cuando ya no se necesite
Si se referencia una instancia existente (SPContext.Current.Site o SPContext.Current.Web) no
se debe eliminar (incluso si se asigna a una nueva instancia creada en código)
Mediante la construcción using automáticamente se eliminan los objetos cuando el código en el
bloque ha completado su ejecución
31
32. Eliminar objetos (liberar memoria)
Ejemplo (construcción using):
using(SPSite someSite = new SPSite("http://sharepoint"))
{
using(SPWeb someWeb = someSite.RootWeb)
{
...
}
}
Es importante no utilizar estos bloques using referenciando instancias que no deben
ser eliminadas como SPContext.Current.Site o SPContext.Current.Web
Eliminación de objetos: http://msdn.microsoft.com/es-es/library/ee557362.aspx
32
33. Utilizando las herramientas de desarrollo
Crear sitios utilizando SharePoint Designer 2010
Desarrollar soluciones de SharePoint utilizando Visual Studio 2010
Empaquetar y desplegar soluciones de SharePoint
33
35. Editar sitios utilizando SharePoint Designer
La integración entre SharePoint Designer 2010 y SharePoint 2010 es en los dos
sentidos
Se pueden abrir los sitios de SharePoint en SharePoint Designer directamente desde el menú
de acciones del sitio o desde la propia aplicación cliente
SharePoint Designer 2010 proporciona herramientas para administrar, diseñar y
desarrollar sitios
Proporciona vistas categorizadas de los objetos de SharePoint 2010
Listas y bibliotecas, flujos de trabajo, páginas del sitio, activos del sitio, tipos de contenido,
columnas del sitio, tipos de contenido externos, orígenes de datos, páginas maestras y
diseños de página, grupos de seguridad del sitio, sub-sitios
Cinta de acciones dependiente del contexto (como en otras aplicaciones de Office)
35
36. Diseñar y desarrollar sitios utilizando SPD
SharePoint Designer 2010 proporciona herramientas para administradores,
diseñadores y desarrolladores
Tareas de los administradores:
Administrar seguridad
Establecer propiedades de los sitios
Administrar configuraciones de los sitios
Administrar configuraciones de las listas
Tareas de los diseñadores
Administrar los temas de los sitios
Editar el HTML y los controles de las páginas de los sitios, incluyendo transformaciones XSLT
36
37. Diseñar y desarrollar sitios utilizando SPD
Crear, administrar y aplicar páginas maestras en los sitios
Añadir y administrar activos de los sitios como logotipos y otras imágenes
Tareas de los desarrolladores
Crear y administrar las listas y las bibliotecas de los sitios
Crear y administrar los tipos de contenido de los sitios
Crear y administrar los flujos de trabajo de los sitios (se pueden prototipar flujos de trabajo y
guardarlos como plantilla WSP para modificarlos posteriormente con Visual Studio 2010)
Crear y administrar entidades de conexión a datos de negocio (BDC Entities)
37
39. Desarrollar soluciones utilizando Visual Studio
Tipos de proyectos de SharePoint 2010 en Visual Studio 2010
Tipos de elementos de proyecto de SharePoint 2010 en Visual Studio 2010
Almacenamiento en listas (definiciones e instancias de listas)
39
40. Tipos de proyectos de SharePoint 2010
Proyecto vacío de SharePoint
No contiene elementos, permite agregar cualquier tipo de elemento de proyecto
Elemento Web visual
Incluye un control de usuario y un elemento Web pre-configurado para cargar el control
Flujo de trabajo secuencial
Proceso de negocio con un comienzo y un final bien definidos
Flujo de trabajo de máquina de estados
Proceso de negocio que puede moverse entre diferentes estados sin un orden pre-definido
Modelo de conexión a datos de negocio (BDC Model)
Solución para conectarse a datos de negocio (más potente que SharePoint Designer)
40
41. Tipos de proyectos de SharePoint 2010
Receptor de eventos
Código que se ejecutará automáticamente cuando ocurra un evento o un tipo de evento
determinado
Tipo de contenido
Tipo de contenido y su schema y comportamiento asociado
Definición de lista
Plantilla para crear listas que puede tener instancias de lista basadas en la plantilla
Definición de sitio
Plantilla para crear sitios que puede tener definiciones e instancias de listas, datos de listas,
receptores de eventos, tipos de contenido, elementos Web, etc.
41
42. Tipos de proyectos de SharePoint 2010
En el asistente de creación de proyecto podemos especificar el sitio de SharePoint
para despliegue y depuración y podemos elegir entre crear el proyecto como solución
de confianza a nivel de granja o como solución de espacio aislado (sandbox)
42
43. Tipos de elementos de proyecto de SharePoint
Elemento Web visual
Elemento Web
Clase que hereda de System.Web.UI.WebControls.WebParts.WebPart y que incluye las
declaraciones using necesarias
Flujo de trabajo secuencial
Flujo de trabajo de máquina de estados
Modelo de conexión a datos de negocio (BDC Model)
Página de aplicación
Página .aspx configurada para ser desplegada en la carpeta layouts y que está disponible para
cualquier colección de sitios en la aplicación Web (a través del directorio virtual /_layouts)
43
44. Tipos de elementos de proyecto de SharePoint
Receptor de eventos
Tipo de contenido
Definición de lista a partir de un tipo de contenido
Definición de lista basada en un tipo de contenido determinado
Definición de lista
Instancia de lista
Instancia de lista basada en una definición de lista del proyecto o del sitio de SharePoint
Elemento vacío
Incluye un archivo XML en el que definir elementos de SharePoint (artefactos)
44
45. Tipos de elementos de proyecto de SharePoint
Control de usuario
Control .ascx en el que diseñar una interfaz
Carpetas
Carpetas específicas del sistema de archivos de SharePoint (mapped folders)
45
47. Definiciones de lista
Una definición de lista consta de dos archivos:
Elements.xml (configuraciones y comportamientos)
Schema.xml (columnas, vistas y tipos de contenido)
47
48. Instancias de lista
Una instancia de lista consta de un archivo:
Elements.xml (configuraciones y comportamientos, datos)
48
52. Empaquetar y desplegar soluciones
Características
Soluciones
Despliegue de soluciones
Depuración de soluciones
Despliegue de soluciones con PowerShell
Agregar ensamblados a soluciones
Agregar eventos de compilación (build events) a soluciones
52
53. Características
Una característica en SharePoint es una unidad que puede ser activada o desactivada
por los administradores del sitio
Suelen incluir componentes relacionados o dependientes entre sí que pueden ser
activados o desactivados como una unidad
Por ejemplo, se puede incluir una definición de lista, una instancia de lista, un elemento Web y
un flujo de trabajo en los que la instancia está basada en la definición de lista, el flujo de
trabajo realiza alguna acción sobre la lista y el elemento Web proporciona una interfaz
personalizada para los datos de la lista
53
54. Diseñador de características de Visual Studio
Cada proyecto en Visual Studio 2010 incluye una característica por defecto que
contiene los elementos del proyecto
Se pueden crear características adicionales y especificar qué elementos del proyecto
contiene cada una (un elemento puede existir en varias características si así se
requiere, cada elemento conlleva uno o más archivos)
Se pueden establecer el título y la descripción de cada característica y su ámbito
(dónde la característica puede ser activada o desactivada):
Web (sitio Web)
Site (colección de sitios)
WebApplication (aplicación Web)
Farm (granja)
54
55. Soluciones
Una solución es una unidad de despliegue que contiene una o más características y
elementos de proyecto
Las soluciones se empaquetan en archivos WSP que pueden ser instalados y
administrados fácilmente
Es la manera mejor y más potente de desplegar soluciones en SharePoint
55
56. Diseñador de paquetes de Visual Studio
Permite agregar o quitar características y elementos de proyecto
Permite ver los archivos contenidos
Proporciona un nombre para la solución
Etc.
56
57. Despliegue de soluciones
Se pueden desplegar las soluciones directamente desde Visual Studio 2010
Configuraciones para el despliegue:
Site URL (establecido inicialmente con el valor de la URL del sitio Web, proporcionado al crear
el proyecto)
Solución de granja (farm solution) o solución de espacio aislado (sandbox solution)
Proceso de despliegue:
Cuando se despliega una solución ésta se compila, construye, empaqueta, despliega y activa
Si hay fallos en la compilación o empaquetado la solución no se despliega
Se pueden desplegar las soluciones desde Visual Studio 2010 utilizando el menú
Build o con el botón derecho en el proyecto y utilizando el menú contextual
57
58. Depuración de soluciones
“Herramientas” de depuración:
Puntos de ruptura (breakpoints)
Recorridos o saltos a través del código, ventanas de inspección, etc.
Visual Studio asocia el depurador al proceso de trabajo requerido (w3wp.exe) en el
contexto adecuado
58
59. Despliegue de soluciones con PowerShell
Los administradores normalmente despliegan las soluciones utilizando comandos de
PowerShell
Ejemplos:
Add-SPSolution C:lab02a.wsp
Install-SPSolution -Identity Lab02a.wsp -GACDeployment
Install-SPSolution -Identity Lab02a.wsp –GACDeployment -Force
Uninstall-SPSolution -Identity Lab02a.wsp
Remove-SPSolution -Identity Lab02a.wsp
59
60. Agregar ensamblados a soluciones
Se pueden agregar ensamblados al paquete de una solución para asegurar su
despliegue
El diseñador de paquetes tiene una pestaña avanzada para ello en la que se puede:
Agregar el ensamblado
Especificar dónde debe ser instalado (GAC o carpeta bin de la aplicación Web)
Agregar entradas (safe control) requeridas por el ensamblado
Agregar recursos
60
61. Agregar eventos de compilación a soluciones
Se pueden especificar líneas de comando personalizadas para que se ejecuten
durante el proceso de compilación y construcción de la solución (build)
Pre-build commands
Post-build commands
• Siempre
• Cuando la compilación sea exitosa
• Cuando la compilación actualice los archivos de salida generados por el proyecto
61
63. Desarrollando Web Parts
Desarrollar Web Parts estándar
Desarrollar Web Parts conectados
Desarrollar Web Parts Visuales
63
64. Desarrollar Web Parts estándar
Qué es un elemento Web (Web Part) estándar
Agregar Web Parts estándar a proyectos de Visual Studio 2010
Sobrescribir métodos de la clase base
Exponer propiedades personalizadas en los Web Parts
64
65. Qué es un Web Part estándar
Desde la perspectiva de un usuario avanzado
Elementos que se pueden añadir, eliminar o personalizar (elementos de contenido o
funcionalidad de las páginas que pueden ser modificados)
Desde la perspectiva de un usuario administrador
Componentes que se añaden a la galería de elementos Web de las colecciones de sitios y que
pueden ser utilizados en las páginas de los sitios Web de SharePoint
Desde la perspectiva de un desarrollador
Clase que hereda de System.Web.UI.WebControls.WebParts.WebPart y que puede tener
propiedades personalizadas
65
66. Agregar Web Parts estándar a proyectos
Es un elemento de proyecto de SharePoint en Visual Studio
Genera una clase que hereda de System.Web.UI.WebControls.WebParts.WebPart,
pre-configurada con las declaraciones using necesarias
Espacios de nombres comúnmente utilizados en los Web Parts de ASP.NET
Espacios de nombres específicos de SharePoint (Microsoft.SharePoint,
Microsoft.SharePoint.WebControls)
Se pueden añadir declaraciones a otros espacios de nombres (o eliminar las que no
sean necesarias si así se desea)
La clase generada sobrescribe por defecto el método CreateChildControls
Es le método adecuado en el que añadir los controles que podamos necesitar (cuadros de
texto, botones, etc.) y que serán automáticamente “renderizados” al cargar el control
66
67. Agregar Web Parts estándar a proyectos
Se pueden sobrescribir los métodos de la clase base que sean necesarios (OnInit,
OnLoad, etc.)
67
68. Sobrescribir métodos de la clase base
Ejemplo:
...
protected override void CreateChildControls()
{
filterDate = new DateTimeControl(); // Variable definida a nivel de clase
filterDate.DateOnly = true; filterDate.AutoPostBack = true;
filterDate.DateChanged += new EventHandler(filterDate_DateChanged);
SPWeb thisWeb = SPContext.Current.Web;
myCustomView = new ListViewByQuery(); // ...
myCustomView.List = thisWeb.Lists["Interviews"];
query = new SPQuery(myCustomView.List.DefaultView); // ...
query.ViewFields = "<FieldRef Name='Title' /><FieldRef Name='DueDate' />";
myCustomView.Query = query;
this.Controls.Add(new LiteralControl("Tasks due by:"));
this.Controls.Add(new LiteralControl("<br />"));
this.Controls.Add(filterDate);
this.Controls.Add(new LiteralControl("<br />"));
this.Controls.Add(myCustomView);
}
// Manejador de eventos
void filterDate_DateChanged(object sender, EventArgs e)
{
...
}
68
69. Exponer propiedades personalizadas
Ejemplo:
string myVariable = "My Default Value"; // ...
[WebBrowsable(true), WebDisplayName("My Custom Property"),
WebDescription("Provide a value for the custom property"),
Personalizable(PersonalizationScope.Shared), Category("My Category")]
public string MyProperty
{
get
{
return(myVariable);
}
set
{
myVariable = value;
}
}
protected override void CreateChildControls()
{
this.Controls.Add(new LiteralControl(this.myVariable));
}
69
70. Desarrollar Web Parts conectados
Los Web Parts conectados son elementos Web que comparten datos
Pueden ser productores, consumidores o ambas cosas a la vez
El productor emite datos
El consumidor utiliza esos datos
Se pueden utilizar datos emitidos por un proveedor y, a la vez, emitir datos propios para que
sean utilizados por otros consumidores
Un escenario común es aquel en el que productor muestra datos como, por ejemplo,
una lista de clientes en un sitio Web de SharePoint y permite a los usuarios
seleccionar un elemento específico como un cliente en particular. El consumidor se
actualizaría entonces para mostrar los detalles de ese cliente (si existieran varios
consumidores podrían mostrar detalles específicos cada uno de ellos)
70
71. Desarrollar Web Parts conectados
Ejemplo (interfaz):
public interface IJobDef
{
// Miembros
string JobDef
{
get;
set;
}
}
71
72. Desarrollar Web Parts conectados
Ejemplo (productor):
public class JobDefinitions : WebPart, IJobDef
{
string _JobDef;
public string JobDef
{
get { return (_JobDef); }
set { _JobDef = value; }
}
[ConnectionProvider("Job")]
public IJobDef SendJobName()
{
return (this);
}
}
72
73. Desarrollar Web Parts conectados
Ejemplo (consumidor):
string jobDefinition = string.Empty;
[ConnectionConsumer("Job")]
public void GetJob(IJobDef Job)
{
if(Job != null)
{
jobDefinition = Job.JobDef;
}
}
73
74. Desarrollar Web Parts Visuales
Un elemento Web visual es (según la perspectiva):
Para un usuario avanzado es un elemento Web como otro cualquiera
Para un administrador es, además de un componente que se añade a la galería de elementos
Web de las colecciones de sitios y que puede ser utilizado en las páginas de los sitios Web de
SharePoint, un control de usuario a desplegar en el sistema de archivos del servidor de
SharePoint
Para un desarrollador es un elemento Web que carga un control de usuario en el que
desarrollar un interfaz y una funcionalidad
No está permitido su despliegue como solución de espacio aislado (sandbox)
74
75. Trabajando con objetos en el servidor
Trabajar programáticamente con sitios Web
Trabajar programáticamente con listas
Trabajar programáticamente con datos de las listas
75
77. Sitios Web en SharePoint
Forman parte de una colección de sitios
Un sitio Web es un contenedor de páginas, listas, bibliotecas, etc.
Almacena los datos y los documentos en listas y bibliotecas y los presenta en páginas
Las páginas Web (.aspx) están almacenadas en la base de datos de contenido de la
aplicación Web de SharePoint a la que pertenece la colección de sitios y a la que, a
su vez, pertenece el sitio Web correspondiente
Las listas pueden estar basadas en diferentes plantillas
Los sitios se caracterizan por:
Su URL
Su plantilla (que define su contenido inicial, la apariencia de su página de inicio, los menús de
navegación generados automáticamente, etc.)
77
78. Sitios Web en SharePoint
Su seguridad (permisos de acceso agrupados en niveles de permisos y que se pueden
heredar o pueden ser propios del sitio Web)
Sus columnas de sitio, tipos de contenido, etc.
78
79. Crear sitios Web programáticamente
Ejemplo:
SPWeb thisWeb = SPContext.Current.Web;
SPWeb newWeb = null;
if (!thisWeb.Webs["JobData"].Exists)
{
try
{
newWeb = thisWeb.Webs.Add("JobData", // Web Url
"Job Data", // Title
"Data for Jobs", // Description
1033, // LocaleID
"STS#1", // Template
true, // No hereda permisos
false); // Lanza una excepción si existe
}
catch (Exception ex) { ... }
finally
{
newWeb.Dispose();
}
}
79
80. Crear sitios Web programáticamente
Configuraciones y definiciones de sitios
http://msdn.microsoft.com/es-es/library/aa978512
80
81. Eliminar sitios Web programáticamente
Ejemplos:
SPWeb thisWeb = SPContext.Current.Web;
thisWeb.Webs["JobData"].Delete(); // Se elimina permanentemente
SPWeb thisWeb = SPContext.Current.Web;
thisWeb.Webs.Delete("JobData"); // Se elimina permanentemente
La única manera de recuperar un sitio Web eliminado así sería restaurando un backup
de la base de datos de contenido lo que podría suponer una pérdida de información
dependiendo de la fecha del último backup (hay que tener cuidado con ello, por tanto)
81
82. Aplicar seguridad programáticamente
Ejemplos (en la creación y después):
newWeb = thisWeb.Webs.Add("JobData",
"Job Data",
"Data for Jobs",
1033,
"STS#1",
true, // No hereda permisos
false);
// Se rompe la herencia en el momento de la
ejecución pero se mantienen los permisos del
padre (true)
newWeb.BreakRoleInheritance(true);
newWeb.Update();
82
83. Asignar usuarios a un nivel de permisos
Ejemplo:
// Crear una nueva asignación de permisos
SPRoleAssignment roleAssign = new SPRoleAssignment
(@"SHAREPOINTKrishnaS", // DOMINIOUsuario
"krishnas@sharepoint.com", // Email
@"SHAREPOINTKrishnaS", // Nombre a mostrar
"HR Manager"); // Descripción
// Referenciar un nivel de permisos
SPRoleDefinition roleDef = newWeb.RoleDefinitions["Contribute"];
// Añadir el nivel de permisos a la asignación
roleAssign.RoleDefinitionBindings.Add(roleDef);
// Añadir la asignación al sitio Web
newWeb.RoleAssignments.Add(roleAssign);
// Guardar los cambios
newWeb.Update();
83
85. Listas en SharePoint
La lista es el contenedor final de la información en SharePoint
Almacenan datos en elementos de lista y documentos (si son bibliotecas)
Una biblioteca de documentos es un tipo de lista especial (con archivos)
El tipo de lista base, de la que heredan el resto, es la lista personalizada (custom list)
Es similar a una tabla de base de datos (es importante destacar que SharePoint no es
un sistema relacional aunque sí se pueden relacionar listas entre sí)
La lista tiene columnas con campos para guardar la información
Las vistas son mecanismos para presentar la información de la lista de manera
ordenada y/o filtrada (cuando se crea una lista también se crea una vista por defecto)
Las bibliotecas pueden tener carpetas y subcarpetas para organizar los documentos
85
90. Tipos de contenido en SharePoint
Permiten categorizar los elementos de las listas y los documentos de las bibliotecas que
tienen información o datos comunes
Representan una colección de configuraciones y columnas de datos aplicables a su
categoría de información (p.e.: contrato, documento de RR.HH., etc.)
Pueden ser utilizados a lo largo de toda una colección de sitios (son independientes de
las listas en las que se utilizan)
Se pueden basar en otro tipo de contenido lo que permite crear relaciones de herencia
entre ellos
Si se modifica un tipo de contenido del que heredan otros, se puede elegir modificar
también todos los tipos de contenido que heredan de él
90
91. Tipos de contenido en SharePoint
No se pueden eliminar tipos de contenido que estén siendo utilizados en listas o
bibliotecas
Se pueden definir a nivel de colección de sitios o a nivel de sitio Web
Si se define a nivel de colección de sitios puede ser utilizado en cualquier sitio Web de la
colección
Cuando se añade un tipo de contenido a una lista, se crea una copia local del mismo en
la lista que puede ser modificado sin afectar al tipo de contenido original
Los tipos de contenido pueden tener flujos de trabajo asociados
91
92. Recuperar elementos de lista
Los elementos de una lista son objetos SPListItem
Son contenidos en colecciones SPListItemCollection
Se pueden utilizar las siguientes propiedades y métodos para acceder al objeto
SPListItemCollection de una lista:
SPList.Items
SPList.GetItems()
Se puede recuperar un elemento concreto de una lista mediante su identificador
numérico (único en la lista y asignado automáticamente por SharePoint) o mediante su
GUID (asignado también automáticamente por SharePoint):
SPList.GetItemById()
SPList.GetItemByUniqueId()
92
93. Consultas CAML
CAML (Collaborative Application Markup Language)
Lenguaje de marcado tipo XML utilizado para realizar consultas y recuperar elementos
en listas de SharePoint
Es recomendable por motivos de eficiencia recuperar sólo los elementos de una lista que
vayamos a necesitar para trabajar programáticamente con ellos
Se pueden especificar los elementos de la lista a recuperar con una consulta CAML
utilizada en conjunto con un objeto SPQuery y el método GetItems de un objeto SPList
93
94. Consultas CAML
Ejemplo:
SPWeb thisWeb = SPContext.Current.Web;
SPList openPositions = thisWeb.Lists["OpenPositions"];
SPQuery query = new SPQuery();
// Establecer la propiedad ViewFields del objeto SPQuery
query.ViewFields = "<FieldRef Name='Title' />"
+ "<FieldRef Name='Location' />"
+ "<FieldRef Name='Interviewer' />";
// Establecer la propiedad Query del objeto SPQuery
query.Query = "<Where><Eq><FieldRef Name='Title' /><Value
Type='Text'>Developer</Value></Eq></Where>";
// Utilizar GetItems para recuperar los elementos que necesitamos
SPListItemCollection developerPositions =
openPositions.GetItems(query);
94
95. Consultas LINQ
LINQ (Language-Integrated Query)
LINQ to SharePoint (conjunto de tecnologías y herramientas para trabajar con LINQ y
SharePoint)
La clave es generar las clases con las entidades que representan los tipos de contenido
utilizados en las listas de SharePoint que queramos consultar
Existe una herramienta de línea de comandos que nos facilita el trabajo creando estas
clases automáticamente (SPMetal)
C:Program FilesCommon FilesMicrosoft SharedWeb Server Extensions14BINSPMetal
/web:http://server/site /code:pathsite.cs
La herramienta genera un archivo de entidades que deberemos añadir a nuestro
proyecto de Visual Studio
95
96. Consultas LINQ
Ejemplo:
HREntitiesDataContext hrDC = new
HREntitiesDataContext(http://SharePoint);
var jobs = from jobList in hrDC.JobDefinitions
orderby jobList.Title
select new { jobList.Title,
jobList.MinSalary,
jobList.MaxSalary };
foreach (var jobDefinition in jobs)
{
//Do something with jobDefinition.Title
//Do something with jobDefinition.MinSalary
//Do something with jobDefinition.MaxSalary
}
96
98. Actualizar elementos de lista
Ejemplo:
SPWeb thisWeb = SPContext.Current.Web;
SPList jobDefinitions = thisWeb.Lists["JobDefinitions"];
SPQuery query = new SPQuery();
query.ViewFields = "<FieldRef Name='MaxSalary' />";
query.Query = "<Where><Contains><FieldRef Name='Title' />"
+ "<Value Type='Text'>Developer</Value>"
+ "</Contains></Where>";
SPListItemCollection developerPositions =
jobDefinitions.GetItems(query);
foreach(SPListItem dev in developerPositions)
{
dev["MaxSalary"] =
double.Parse(dev["MaxSalary"].ToString()) * 1.1;
dev.Update();
}
98
99. Añadir elementos de lista
Ejemplo:
SPList jobDef = thisWeb.Lists["JobDefinitions"];
SPListItem newDef;
newDef = jobDef.Items.Add();
newDef["Title"]= "Developer";
newDef["MinSalary"] = "40000";
newDef["MaxSalary"] = "80000";
newDef["JobDescription"] =
"SharePoint or other Web Developer";
newDef.Update();
99
100. Eliminar elementos de lista
Para eliminar elementos de una lista se puede utilizar cualquiera de los siguientes
métodos:
SPListItem.Delete()
SPListItem.Recycle()
SPListItemCollection.Delete(int index)
SPListItemCollection.DeleteItemById(int id)
100
101. Creando receptores de eventos
Tipos de objetos a los que añadir receptores de eventos
Tipos de eventos
Crear receptores de eventos de elementos de lista
Otros receptores de eventos
101
102. Tipos de objetos a los que añadir receptores
Elementos de lista
Correo entrante (en listas que lo acepten)
Flujos de trabajo en listas
Listas
Sitios Web
Características
102
103. Tipos de eventos
Eventos de antes (síncronos)
Eventos de después (asíncronos)
103
104. Crear receptores de eventos de elementos
Para crear código que se ejecute cuando los usuarios añadan, modifiquen o eliminen
elementos de una lista es necesario crear una clase que herede de SPItemEventReceiver
La clase SPItemEventReceiver proporciona métodos que se pueden sobrescribir para
cada evento
Cada método acepta un parámetro de tipo SPItemEventProperties que contiene detalles
específicos del evento y datos asociados
Eventos:
ItemAdding, ItemAdded, ItemDeleting, ItemDeleted
ItemUpdating, ItemUpdated
ItemAttachmentAdding, ItemAttachmentAdded, ItemAttachementDeleting,
ItemAttachementDeleted, etc.
104
105. Crear receptores de eventos de elementos
Ejemplo:
public class CheckJobs : SPItemEventReceiver
{
public override void ItemUpdating(SPItemEventProperties properties)
{
string oldJobTitle = properties.BeforeProperties["Title"].ToString();
string newJobTitle = properties.AfterProperties["Title"].ToString();
...
base.ItemUpdating(properties);
}
}
105
106. Otros receptores de eventos
Correo entrante
SPEmailEventReceiver y EmailReceived
Flujos de trabajo en listas
SPWorkflowEventReceiver y WorkflowStarting, WorkflowStarted y WorkflowCompleted
Listas
SPListEventReceiver y FieldAdding, FieldAdded, FieldDeleting, etc. o ListAdding, etc.
Sitios Web
SPWebEventReceiver y SiteDeleted (SPSite), SiteDeleting (SPSite), WebAdding (SPWeb),
WebDeleted (SPWeb), WebDeleting (SPWeb), WebMoved (SPWeb), WebMoving (SPWeb) y
WebProvisioned (SPWeb)
106
107. Otros receptores de eventos
Características
SPFeatureReceiver y FeatureActivated, FeatureDeactivating, FeatureInstalled, FeatureUninstalling
y FeatureUpgrading
107
108. Otros receptores de eventos
Ejemplos:
public class CatchEmails : SPEmailEventReceiver
{
public override void EmailReceived(
SPList list,
SPEmailMessage emailMessage,
String receiverData)
{
string listTitle = list.Title;
string sender = emailMessage.Sender;
string body = emailMessage.PlainTextBody;
...
base.EmailReceived(list, emailMessage, receiverData);
}
}
public class MyListWorkflows : SPWorkflowEventReceiver
{
public override void WorkflowStarted(SPWorkflowEventProperties properties)
{
string myInitData = properties.InitiationData;
...
base.WorkflowStarted(properties);
}
}
108
109. Otros receptores de eventos
Ejemplos:
public class MyAuditTrail : SPListEventReceiver
{
public override void FieldDeleting(SPListEventProperties properties)
{
string usrName = properties.UserLoginName;
string listTitle = properties.ListTitle;
...
base.FieldDeleting(properties);
}
}
public class MyTopologyManager : SPWebEventReceiver
{
public override void WebAdding(SPWebEventProperties properties)
{
int currentCount = properties.Web.ParentWeb.Webs.Count;
...
base.WebAdding(properties);
}
}
109
110. Otros receptores de eventos
Ejemplos:
public class MyTopologyManager : SPFeatureReceiver
{
public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
setProliferationFlag(true);
}
public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
{
setProliferationFlag(false);
}
void setProliferationFlag(bool status)
{
if (status)
{
...
}
else
{
...
}
}
}
110
111. Desarrollando soluciones mediante BCS
Introducción a Business Connectivity Services
Desarrollar tipos de contenido externo y listas externas utilizando SharePoint Designer
Desarrollar una solución BCS utilizando Visual Studio 2010
111
112. Introducción a Business Connectivity Services
Qué son Business Connectivity Services
Tipos de contenido externo y listas externas
Arquitectura BCS
112
113. Qué son Business Connectivity Services
Conjunto de tecnologías que hacen que los sitios Web y las soluciones de SharePoint
2010 se puedan conectar a datos externos
Se pueden exponer los datos como listas en los sitios Web
Se puede controlar el acceso de lectura y escritura
Desde el punto de vista de los administradores son aplicaciones de servicio
Desde el punto de vista de los desarrolladores son un conjunto de servicios y APIs que se
pueden utilizar para construir soluciones
113
114. Tipos de contenido externo y listas externas
Los tipos de contenido externo caracterizan los datos de los sistemas externos
Columnas, tipos de datos de las columnas, etc.
Operaciones que se pueden realizar con los datos externos
Se pueden definir formularios para añadir o modificar los datos externos desde SharePoint
Las listas externas se basan en los tipos de contenido externo y representan los datos de
los sistemas externos
Como si fueran listas propias de SharePoint
114
116. Desarrollar tipos de contenido y listas con SPD
Crear conexiones a datos externos
Crear tipos de contenido externo y operaciones
Crear listas externas y formularios
Aplicar seguridad a los tipos de contenido externo
116
117. Crear conexiones a datos externos
Es necesario crear una conexión a los sistemas externos antes de crear tipos de
contenido externo o listas externas
Tipos de conexiones a crear utilizando SharePoint Designer:
Con bases de datos de SQL Server
Con servicios Web de Windows Communication Foundation (WCF)
Se pueden crear conexiones con tipos .NET creados para proporcionar conectividad con otros
tipos de sistemas externos
117
118. Crear tipos de contenido y operaciones
Orígenes de tipos de contenido externo:
Tablas o vistas de bases de datos
Métodos de servicios Web
Entidades de tipos .NET
Hay que tener cuidado con las restricciones que puedan tener estos orígenes
Operaciones de tipos de contenido externo:
Crear, leer, actualizar, eliminar (CRUD)
Encontrar
Al crear las operaciones y mediante un asistente, se pueden especificar propiedades para
gestionar el comportamiento de los campos que vienen del origen
118
119. Crear listas y formularios
Las listas externas se basan en los tipos de contenido externo
Se pueden crear formularios para añadir o modificar datos en las listas al mismo tiempo
que se crean dichas listas
119
120. Aplicar seguridad a los tipos de contenido
Se debe aplicar seguridad antes de utilizar las listas externas basadas en los tipos de
contenido externo
Se deben aplicar permisos a los usuarios o grupos de usuarios, permisos como editar,
ejecutar, establecer permisos (al menos un usuario debe tenerlo), etc.
Se deben aplicar permisos a las cuentas de servicio que necesiten acceder (como, por
ejemplo, la cuenta de rastreo del servicio de búsqueda)
120
122. Desarrollar una solución BCS con VS 2010
Escenarios para BCS en Visual Studio
Crear modelos de Business Data Catalog (BDC)
Entidades de BDC y descriptores
Implementar métodos de BCD
122
123. Escenarios para BCS en Visual Studio
Crear tipos .NET para que sean utilizados desde SharePoint Designer
Permiten la creación de soluciones desde SharePoint Designer
Abstraen la posible complejidad de la conexión a datos externos
Crear modelos de Business Data Catalog (BDC)
Crear tipos de contenido externo en Visual Studio como parte del modelo
Implementar operaciones de datos potencialmente complejas
123
124. Crear modelos de Business Data Catalog
Tipo de proyecto y de elemento de proyecto en Visual Studio para crear modelos de BDC
Incluye:
Un diseñador gráfico de entidades
Un explorador de BDC que se puede utilizar para administrar las propiedades de las entidades y
los métodos y sus descriptores
Clases para las entidades que definen propiedades que representan las columnas de datos de
dichas entidades
Clases de servicio para las entidades que implementan los métodos (las operaciones de datos)
Código e implementaciones de entidades de ejemplo para que sirva de ayuda
124
125. Entidades de BDC y descriptores
Las entidades se deben configurar con métodos y descriptores
Se pueden especificar uno o más métodos para cada entidad, tienen tipos específicos
que definen la forma en que se utilizan para operar sobre los datos
ReadList (Finder), ReadItem (SpecificFinder)
Create (Creator), Update (Updater), Delete (Deleter)
Los métodos Deleter y SpecificFinder aceptan un identificador para especificar
el elemento de la lista al que se aplica la operación
Los métodos Creator y Updater aceptan una entidad como parámetro de entrada
Los métodos SpecificFinder y Creator devuelven una entidad
El método Finder devuelve una colección de entidades
125
126. Implementar métodos de BCD
public static MyEntity ReadItem(int myEntityID)
{
// Devuelve una entidad que depende del identificador
}
public static IEnumerable<MyEntity> ReadList()
{
// Devuelve una colección de entidades
}
public static void Delete(int myEntityID)
{
// Elimina los datos de una entidad que depende del identificador
}
public static void Update(MyEntity myEntity)
{
// Actualiza los datos en las propiedades de la entidad
}
public static MyEntity Create(MyEntity newMyEntity)
{
// Añade los nuevos datos en las propiedades de la entidad y
// devuelve la entidad con esos datos en las propiedades
}
126
128. Desarrollando flujos de trabajo para SharePoint
Crear flujos de trabajo utilizando SharePoint Designer
Crear flujos de trabajo con Visual Studio 2010
128
129. Crear flujos de trabajo utilizando SPD
Crear flujos de trabajo
Crear parámetros de inicio
Crear variables locales
Tipos de condiciones
Tipos de acciones
Construir flujos de trabajo
129
130. Crear flujos de trabajo
Tipos de flujos de trabajo:
Flujo de trabajo de lista
Flujo de trabajo de sitio Web
Flujo de trabajo reutilizable
Importar y exportar:
Desde Visio
A Visio
130
131. Crear parámetros de inicio
Se puede requerir que el usuario proporcione información a utilizar en el flujo de trabajo
Se genera un formulario automáticamente para ello que se mostrará al usuario
Tipos (se pueden proporcionar valores por defecto):
Una o varias líneas de texto
Número
Fecha y hora
Elección
Sí/No
Persona o grupo
Enlace o imagen
Etc.
131
132. Crear variables locales
Se pueden crear variables locales para uso interno del flujo de trabajo en SharePoint
Designer
Tipos:
Boolean
Date/Time
Integer
List item Id
Number
String
132
133. Tipos de condiciones
Una condición es equivalente a un if en código (si ocurre algo, entonces…)
Condiciones comunes:
If <value> <equals> <value>
If <current item field> <equals> <value>
Otras condiciones (ejemplos):
Si determinado elemento de lista fue creado por determinado usuario
Si el elementos fue creado en un determinado momento en el tiempo
Etc.
133
134. Tipos de acciones
Una acción es una operación a realizar por el flujo de trabajo (normalmente si ocurre
determinada condición)
Tipos de acciones:
Acciones comunes (establecer valores, etc.)
Acciones con documentos
Acciones con listas
Tareas
Etc.
134
135. Construir flujos de trabajo
Se construyen a partir de pasos y condiciones
Es necesario chequear si hay errores antes de desplegar
Otras configuraciones:
Si se puede iniciar manualmente o no
Etc.
135
137. Crear flujos de trabajo con Visual Studio 2010
Tipos de flujos de trabajo
Desarrollar flujos de trabajo
Formularios de inicio
Flujos de trabajo secuencial
Flujos de trabajo de máquina de estados
137
138. Tipos de flujos de trabajo
Flujos de trabajo de lista
Asociados a una instancia de lista específica
Se puede acceder a los elementos de la lista durante el flujo
Flujos de trabajo de sitio Web
Asociados a un objeto SPWeb
Se pueden utilizar para (ejemplos):
• Obtener y establecer valores de elementos de varias listas
• Crear y configurar sub-sitios
• Etc.
138
139. Desarrollar flujos de trabajo
Los flujos de trabajo de SharePoint 2010 se construyen sobre la plataforma de flujos de
trabajo del Framework 3.5 de .NET (se pueden utilizar elementos de los flujos de trabajo
de .NET)
Plantillas de elementos de proyecto para SharePoint 2010:
Flujo de trabajo secuencial
Flujo de trabajo de máquina de estados
Eventos de los flujos de trabajo:
Workflow_Initialized
Workflow_Completed
Los eventos permiten incorporar lógica como llamadas a otro flujo de trabajo, etc.
139
140. Formularios de inicio
Se pueden añadir formularios de inicio a los flujos de trabajo para permitir especificar
valores a utilizar internamente por los mismos
Se añaden al propio flujo en Visual Studio, no al proyecto
El método GetInitiationData devuelve los valores del formulario al flujo de trabajo
Puede ser un valor simple o un XML con varios valores
Se accede a los valores a través de la propiedad InitiationData del objeto
SPWorkflowActivationProperties
140
142. Flujos de trabajo secuencial
Inicio y fin bien definidos
Camino bien definido a través de los pasos
Se pueden incluir:
Decisiones
Ramificaciones
Pasos paralelos
Bucles
142
143. Flujos de trabajo de máquina de estados
Se trata con diferentes estados
Las acciones llevan al flujo a los estados
No hay un camino pre-definido
143
145. Trabajando con el API de cliente de SharePoint
Introducción al modelo de objetos de cliente de SharePoint 2010
Trabajar con el modelo de objetos de cliente en aplicaciones .NET
145
146. Introducción al modelo de objetos de cliente
Acceder a datos de SharePoint desde aplicaciones remotas
Arquitectura del modelo de objetos de cliente
Procesos en el modelo de objetos de cliente
Desarrollar clientes .NET
Desarrollar clientes Silverlight
Desarrollar clientes JavaScript
146
147. Acceder a datos desde aplicaciones remotas
Las aplicaciones remotas que no se ejecutan en el servidor de SharePoint pueden
consumir objetos y datos de SharePoint
Tradicionalmente se hacía a través de los servicios Web de SharePoint (no siempre
fáciles de utilizar, especialmente desde JavaScript)
SharePoint 2010 proporciona un modelo de objetos de cliente fácil de utilizar que
proporciona más operaciones y funcionalidades que los servicios Web tradicionales
Escenarios de uso:
Aplicaciones Windows (incluyendo WPF)
Aplicaciones de consola
Aplicaciones ASP.NET
Aplicaciones Silverlight, JavaScript de cliente, etc.
147
149. Procesos en el modelo de objetos de cliente
Procesos:
149
150. Desarrollar clientes .NET
Es necesario referenciar las DLLs en la carpeta C:Program FilesCommon FilesMicrosoft
SharedWeb Server Extensions14ISAPI
Microsoft.SharePoint.Client.dll
Microsoft.SharePoint.Client.Runtime.dll
Es necesario distribuirlas con la aplicación
La mejor manera de asegurarse es mediante un proyecto de instalación de Visual Studio
Se puede escoger entre ejecución síncrona o asíncrona (métodos ExecuteQuery o
ExecuteQueryAsync) dependiendo de los requerimientos
150
151. Desarrollar clientes Silverlight
Es necesario referenciar las DLLs en la carpeta C:Program FilesCommon FilesMicrosoft
SharedWeb Server Extensions14TEMPLATELAYOUTSClientBin
Microsoft.SharePoint.Client.Silverlight.dll
Microsoft.SharePoint.Client.Runtime.Silverlight.dll
Son específicas de Silverlight y es necesario distribuirlas con la aplicación
Se incluyen automáticamente por la solución en los archivos XAP
Se puede escoger entre ejecución síncrona o asíncrona (métodos ExecuteQuery o
ExecuteQueryAsync) dependiendo de los requerimientos
Si se ejecutan comandos en el hilo principal del UI sólo se permite ejecución asíncrona
151
152. Desarrollar clientes JavaScript
Es necesario referenciar el archivo sp.js utilizando un objeto ScriptLink
<SharePoint:ScriptLink ID="showDialog" runat="server"
Name="sp.js" Localizable="false" LoadAfterUI="true" />
Se utiliza ejecución asíncrona
152
153. Trabajar con el modelo de objetos de cliente
Crear objetos ClientContext
Cargar Webs
Crear Webs
Cargar y crear listas
Trabajar con datos de listas
Llamar a los métodos ExecuteQuery y ExecuteQueryAsync
Liberar objetos ClientContext
153
154. Crear objetos ClientContext
Los objetos ClientContext proporcionan el punto de entrada al modelo de objetos de
cliente
Ejemplo:
// Instanciar un ClientContext
ClientContext remoteCtx = new ClientContext("http://sharepoint");
154
155. Cargar Webs
El objeto Web es el equivalente de cliente al objeto SPWeb de servidor
Debe cargarse por el objeto ClientContext antes de ser utilizado
El objeto ClientContext tiene una propiedad Web (como SPContext.Current.Web en servidor)
Ejemplo:
ClientContext remoteCtx = new ClientContext("http://sharepoint");
Web remoteWeb = remoteCtx.Web;
remoteCtx.Load(remoteWeb);
155
156. Crear Webs
Las Webs se crean basándose en las propiedades del objeto WebCreationInformation
El sitio Web se crea cuando se llama al método ExecuteQuery
Ejemplo:
WebCreationInformation skillsInfo = new
WebCreationInformation();
skillsInfo.Title = "Skills Matrix";
skillsInfo.Language = 1033;
skillsInfo.WebTemplate = "STS#1";
skillsInfo.Url = "Skills";
skillsInfo.UseSamePermissionsAsParentSite = true;
Web skillsWeb = remoteWeb.Webs.Add(skillsInfo);
skillsWeb.QuickLaunchEnabled = true;
remoteCtx.ExecuteQuery();
156
157. Cargar y crear listas
El objeto List es el equivalente de cliente al objeto SPList de servidor
Ejemplo:
ListCreationInformation skillDefInfo = new ListCreationInformation();
skillDefInfo.TemplateType = (int)ListTemplateType.GenericList;
skillDefInfo.Title = "Skills";
skillDefInfo.QuickLaunchOption = QuickLaunchOptions.On;
List skillDef = skillsWeb.Lists.Add(skillDefInfo);
skillDef.Fields.AddFieldAsXml(@"<Field Type='Text'
DisplayName='Description'/>", true, AddFieldOptions.DefaultValue);
remoteCtx.ExecuteQuery();
remoteCtx.Load(skillDef);
remoteCtx.ExecuteQuery();
157
158. Llamar a ExecuteQuery y ExecuteQueryAsync
ExecuteQuery es un método síncrono
La ejecución de código en cliente se detiene hasta que SharePoint ejecuta los comandos y
responde
ExecuteQueryAsync es un método asíncrono
La ejecución de código en cliente continúa mientras SharePoint ejecuta los comandos
La respuesta llega al cliente a través de los procedimientos de devolución de llamada (callback)
Es necesario especificar dichos procedimientos en caso de éxito o fallo de la llamada
158
161. Desarrollando interfaces de usuario interactivas
Crear elementos de menú y controles de cinta
Crear cuadros de diálogo de cliente
161
162. Crear elementos de menú y controles de cinta
Introducción a las acciones personalizadas
Crear elementos de menú personalizados
Crear controles de cinta personalizados
Acceder a los objetos de SharePoint desde las acciones
162
163. Introducción a las acciones personalizadas
Los elementos de menú son acciones personalizadas que se incorporan en la interfaz de
SharePoint 2010
Por ejemplo el menú de acciones del sitio, la página de configuración del sitio, etc.
Se pueden construir elementos personalizados
Los controles de cinta son acciones personalizadas que aparecen en la cinta de acciones
de SharePoint 2010
La cinta es “sensible” al contexto (sus acciones dependen del contexto en que nos encontremos)
SharePoint 2010 incluye muchos controles de cinta
Se pueden construir controles personalizados
163
164. Crear elementos de menú personalizados
Los elementos personalizados se definen en un XML
<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<CustomAction Id="NewUIActionsMenu"
GroupId="SiteActions"
Location="Microsoft.SharePoint.StandardMenu"
Sequence="1970"
Title="Manage Features">
<UrlAction Url="/_layouts/ManageFeatures.aspx" />
</CustomAction>
</Elements>
164
165. Crear controles de cinta personalizados
Los controles personalizados se definen en un XML
165
166. Acceder a los objetos desde las acciones
Normalmente se accede a los objetos de SharePoint desde JavaScript en el cliente
(navegador)
Un escenario común puede ser mostrar un cuadro de diálogo desde un control de cinta
para trabajar con datos de SharePoint 2010
166
167. Crear cuadros de diálogo de cliente
Introducción
Crear cuadros de diálogo
Mostrar y ocultar cuadros de diálogo
Interactuar con los objetos de SharePoint
167
168. Introducción
Muchas operaciones con los datos de SharePoint 2010 se realizan desde cuadros de
diálogo
Un ejemplo pueden ser los formularios de lista
Los cuadros de diálogo se ejecutan en el navegador del cliente
Se interactúa con SharePoint 2010 a través del modelo de objetos de cliente en JavaScript
No se requieren recargas de las páginas (AJAX)
168
169. Crear cuadros de diálogo
A partir de un elemento Web visual (Visual Web Part)
Ejemplo:
<div id="divSkillsManager" style="display:none; padding:5px">
Select a Job:<select id="Jobs" name="Jobs" />
<br/>
Select a Skill:<select id="Skills" name="Skills" />
<br/>
<input type="button" value="Add Skill Mapping"
style='width:125px;' onclick="addSkillMapping()" />
<br />
<input type="button" value="Cancel"
style='width:125px' onclick="onCancel()" />
</div>
169
170. Mostrar y ocultar cuadros de diálogo
<SharePoint:ScriptLink ID="showDialog" runat="server"
Name="sp.js" Localizable="false" LoadAfterUI="true" />
<script language="ecmascript" type="text/ecmascript">
var thisDialog;
var divSkillsManager =
document.getElementById("divSkillsManager");
divSkillsManager.style.display = "block";
var dialog =
{ html:divSkillsManager, title:'Add Skills Mapping',
allowMaximize:true, showClose:false, width:400,
height:200};
thisDialog = SP.UI.ModalDialog.showModalDialog(dialog);
</script>
function hideSkillMapper() {
thisDialog.close();
window.location.reload(true); // Opcional
}
170
171. Interactuar con los objetos de SharePoint
A través del modelo de objetos de cliente en JavaScript
Escenarios:
Añadir, modificar y eliminar datos
Manipular las propiedades de los objetos de SharePoint
Subir archivos
Etc.
171
174. Crear aplicaciones Silverlight
Integración con SharePoint 2010
DLLs del modelo de objetos de cliente para Silverlight
Acceder a objetos y datos de SharePoint desde aplicaciones Silverlight
Comunicación asíncrona entre SharePoint y Silverlight
174
175. Integración con SharePoint 2010
La integración con SharePoint 2010 se realiza a través del modelo de objetos de cliente
para Silverlight
SharePoint 2010 proporciona elementos Web de Silverlight para aplicaciones Silverlight
175
176. DLLs del modelo de objetos de cliente
Implementan el modelo de objetos de cliente para Silverlight
Permiten a las aplicaciones Silverlight interactuar con los objetos y los datos de
SharePoint 2010
Permiten construir „Rich Internet Applications‟ para SharePoint 2010
Se encuentran en la carpeta C:Program FilesCommon FilesMicrosoft SharedWeb
Server Extensions14TEMPLATELAYOUTSClientBin
Se despliegan con la aplicación Silverlight en el archivo XAP (no es necesario crear
instaladores)
176
177. Acceder a objetos y datos de SharePoint
Se utilizan los objetos ClientContext como punto de entrada a los datos de SharePoint
Se puede utilizar el evento Application_Startup de Silverlight para inicializar un objeto
ApplicationContext con el contexto actual y, tras ello, inicializar un objeto ClientContext
Es necesario añadir:
using Microsoft.SharePoint.Client
using System.Threading
private void Application_Startup(object sender, StartupEventArgs e)
{
ApplicationContext.Init(e.InitParams, SynchronizationContext.Current);
...
}
...
clientCtx = new ClientContext(ApplicationContext.Current.Url);
...
177
178. Comunicación asíncrona
No se puede utilizar el hilo principal de UI para la comunicación (no se permite
bloquearlo)
Se debe utilizar el método ExecuteQueryAsync del objeto ClientContext (se ejecuta en
segundo plano)
Se debe volver al hilo principal de UI para actualizar la interfaz con los datos recibidos de
SharePoint
178
180. Desplegar y depurar aplicaciones Silverlight
Desplegar aplicaciones Silverlight
Mostrar aplicaciones Silverlight en los sitios Web de SharePoint 2010
Desarrollar elementos Web personalizados para aplicaciones Silverlight
Depurar aplicaciones Silverlight
180
181. Desplegar aplicaciones Silverlight
Desplegar archivos XAP
Carpeta ClientBin
Bibliotecas de documentos
Recursos y activos externos (archivos XML de configuración, imágenes, etc.)
Carpeta ClientBin
Bibliotecas de documentos
181
182. Mostrar aplicaciones Silverlight en los sitios
Elementos Web de Silverlight (en la categoría de elementos Web “Media”)
Configurar el elemento Web con la URL del archivo XAP
Se incluyen otras propiedades como el ancho y el alto
Se incluye una propiedad personalizada (para parámetros de inicio en el caso de que sean
necesarios)
Se pueden mostrar con HTML incrustado
<object data='data:application/x-silverlight-2'
type='application/x-silverlight-2'>"
<param name='source' value='_layouts/clientbin/myapp.xap'/>"
<param name=‘initParams' value='bg=#FFFFFF,fg=#0000FF/>"
</object>
182
183. Desarrollar elementos Web personalizados
Razones para el uso de elementos Web personalizados para mostrar aplicaciones
Silverlight:
Control sobre los parámetros de inicio (sin posibilidad de modificación por parte de los
administradores de los sitios)
protected override CreateChildControls()
{
string renderSLApp = "<div id='mySilverlightHost'>"
+ "<object data='data:application/x-silverlight-2'"
+ " type='application/x-silverlight-2'>"
+ "<param name='source' value='_layouts/clientbin/myapp.xap'/>"
+ "<param name=initParams' value='bg=#FFFFFF,fg=#0000FF/>"
+ "</object></div>";
this.Controls.Add(new LiteralControl(renderSLApp));
}
Incluir manejadores de eventos en cliente (mediante scripts de cliente)
183
184. Depurar aplicaciones Silverlight
Las aplicaciones se ejecutan en el navegador de cliente (no hay proceso de servidor al
que unirse para depurar)
Se debe adjuntar el depurador al proceso del navegador (iexplore.exe)
Se deben configurar los ajustes necesarios para depurar código Silverlight
184
187. „Sandboxing‟ y soluciones de usuario
Introducción a las soluciones de usuario
El entorno „sandbox‟ (espacio aislado)
Soluciones de espacio aislado en Visual Studio 2010
Depurar soluciones de espacio aislado en Visual Studio 2010
187
188. Introducción a las soluciones de usuario
Son soluciones que gestionan los administradores en la galería de soluciones de las
colecciones de sitios de SharePoint 2010
Beneficios del uso de soluciones de usuario:
Configuración rápida (por los administradores de las colecciones de sitios)
Flexibilidad (se ejecutan en procesos separados que pueden ser controlados y monitorizados)
Estabilidad (no se ven afectados otros procesos fuera del espacio aislado)
Controlar y monitorizar:
Cuotas de almacenamiento y uso de recursos
Inhabilitación automática si se supera determinado umbral o límite de almacenamiento o uso de
recursos (si así se desea)
188
189. El entorno „sandbox‟ (espacio aislado)
Procesos para ejecutar el código de las soluciones de usuario (no se ejecutan en el
proceso w3wp.exe):
SPUCHostService.exe
SPUCWorkerProcessProxy.exe
SPUCWorkerProcess.exe
189
190. Soluciones de espacio aislado en Visual Studio
IntelliSense
No se muestran los espacios de nombres u objetos restringidos (aún así se pueden utilizar pero si
no se muestran es que no están permitidos)
Compilación
La solución se compila y construye “contra” el modelo de objetos completo (compilará bien aunque
utilicemos espacios de nombres u objetos restringidos)
Despliegue
Al intentar el despliegue, Visual Studio valida el contenido de la solución y no se desplegará si
contiene elementos restringidos
Se despliega en la galería de soluciones de la colección de sitios
190
191. Depurar soluciones de espacio aislado
Visual Studio se adjunta al proceso SPUCWorkerProcess.exe
191
192. Restricciones para las soluciones
Tipos de proyecto y de elementos de proyecto
Acceso a datos
Operaciones permitidas y no permitidas
192
193. Restricciones para las soluciones
En general, se permiten proyectos y elementos de proyecto que sólo afecten a una
colección de sitios y que no desplieguen archivos en el sistema de archivos de
SharePoint
El acceso a datos está restringido a la colección de sitios en la que la solución se activa y
ejecuta
Se pueden consumir y manipular datos de listas externas que ya hayan sido creadas
No se permiten operaciones con permisos elevados (RunWithElevatedPrivileges)
No se puede trabajar con objetos SPFarm o SPService
193
195. Perfiles de usuario
Introducción a los perfiles de usuario y los sitios personales
Búsqueda empresarial y de personas
Recuperar propiedades de los perfiles de usuario
Actualizar propiedades de los perfiles de usuario
Crear sitios personales programáticamente
195