SharePoint 2010 desarrollo de aplicaciones

23,751 views

Published on

Desarrollo sobre SharePoint 2010 (basado en el MOC de Microsoft).

Published in: Technology
3 Comments
11 Likes
Statistics
Notes
No Downloads
Views
Total views
23,751
On SlideShare
0
From Embeds
0
Number of Embeds
19
Actions
Shares
0
Downloads
0
Comments
3
Likes
11
Embeds 0
No embeds

No notes for slide

SharePoint 2010 desarrollo de aplicaciones

  1. 1. SharePoint 2010 Desarrollo de Aplicaciones Consultec, S.L.Bilbao – Donostia San Sebastián – Madrid – Pamplona – Santander – Vitoria Gasteiz
  2. 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. 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. 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. 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. 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
  7. 7. Panorama del desarrollador de SharePoint  Áreas de trabajo en SharePoint Server 2010 7
  8. 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. 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. 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. 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. 12. Jerarquía de objetos en SharePoint 2010  Jerarquía de objetos  SPFarm  SPService  SPWebApplication  SPSite  SPWeb  SPList 12
  13. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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
  26. 26. SPList  Ejemplo: ... foreach (SPWeb childWeb in site.RootWeb.Webs) { try { foreach (SPList list in childWeb.Lists) { if(!list.Hidden) { ... } } } finally { childWeb.Dispose(); } } 26
  27. 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. 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. 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. 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. 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. 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. 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
  34. 34. Crear sitios utilizando SharePoint Designer  Editar sitios  Diseñar y desarrollar sitios 34
  35. 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. 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. 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
  38. 38. DEMO  SharePoint Designer 2010  SharePoint Manager 2010: http://spm.codeplex.com/ 38
  39. 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. 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. 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. 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. 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. 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. 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
  46. 46. Almacenamiento en listas  Definiciones de lista  Instancias de lista 46
  47. 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. 48. Instancias de lista  Una instancia de lista consta de un archivo:  Elements.xml (configuraciones y comportamientos, datos) 48
  49. 49. Definiciones de lista (Elements.xml)  Ejemplo:<Elements xmlns="http://schemas.microsoft.com/sharepoint/"><ListTemplate Name="CandidateList" Type="10001" BaseType="0" OnQuickLaunch="FALSE" SecurityBits="11" Sequence="410" DisplayName="CandidateList" Description="External Candidates" Image="/_layouts/images/itgen.gif" AllowDeletion="FALSE"/></Elements> 49
  50. 50. Definiciones de lista (Schema.xml)  Ejemplo (de secciones del archivo):...<Fields> <Field ID="{c3a92d97-2b77-4a25-9698-3ab54874bc06}" Name="Candidate" Type="Lookup" DisplayName="Candidate" List="Lists/Candidates" ShowField="Title" Required="TRUE"> </Field> <Field ID="{c3a92d97-2b77-4a25-9698-3ab54874bc19}" Name="Interviewer" Type="User" DisplayName="Interviewer" List="UserInfo" Required="TRUE" ShowField="ImnName" UserSelectionMode="PeopleAndGroups"> </Field> <Field ID="{c3a92d97-2b77-4a25-9698-3ab54874bc81}" Name="Offer" Type="Boolean" DisplayName="Job Offered?" Required="TRUE"> </Field></Fields> ...... <Views> <View ...> ... <ViewFields> <FieldRef Name="LinkTitleNoMenu"></FieldRef> <FieldRef Name="Candidate"></FieldRef> <FieldRef Name="Interviewer"></FieldRef> <FieldRef Name="Offer"></FieldRef> </ViewFields> </View> ... </Views> ... 50
  51. 51. Instancias de lista (Elements.xml)  Ejemplo:<?xml version="1.0" encoding="utf-8"?><Elements xmlns="http://schemas.microsoft.com/sharepoint/"> <ListInstance Title="Candidates" OnQuickLaunch="TRUE" TemplateType="10001" Url="Lists/Candidates" Description="External Candidates"> <Data> <Rows> <Row> <Field Name="Title">Geert Camelbeke</Field> </Row> <Row> <Field Name="Title">Ivo Hamels</Field> </Row> <Row> <Field Name="Title">Eduardo Melo</Field> </Row> ... 51
  52. 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. 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. 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. 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. 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. 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. 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. 59. Despliegue de soluciones con PowerShell  Los administradores normalmente despliegan las soluciones utilizando comandos de PowerShell  Ejemplos:Add-SPSolution C:lab02a.wspInstall-SPSolution -Identity Lab02a.wsp -GACDeploymentInstall-SPSolution -Identity Lab02a.wsp –GACDeployment -ForceUninstall-SPSolution -Identity Lab02a.wspRemove-SPSolution -Identity Lab02a.wsp 59
  60. 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. 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
  62. 62. DEMO  Visual Studio 2010 62
  63. 63. Desarrollando Web Parts  Desarrollar Web Parts estándar  Desarrollar Web Parts conectados  Desarrollar Web Parts Visuales 63
  64. 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. 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. 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. 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. 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 eventosvoid filterDate_DateChanged(object sender, EventArgs e){ ...} 68
  69. 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. 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. 71. Desarrollar Web Parts conectados  Ejemplo (interfaz):public interface IJobDef{ // Miembros string JobDef { get; set; }} 71
  72. 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. 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. 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. 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
  76. 76. Trabajar programáticamente con sitios Web  Antes de ello… 76
  77. 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. 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. 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. 80. Crear sitios Web programáticamente  Configuraciones y definiciones de sitios  http://msdn.microsoft.com/es-es/library/aa978512 80
  81. 81. Eliminar sitios Web programáticamente  Ejemplos:SPWeb thisWeb = SPContext.Current.Web;thisWeb.Webs["JobData"].Delete(); // Se elimina permanentementeSPWeb 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. 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. 83. Asignar usuarios a un nivel de permisos  Ejemplo:// Crear una nueva asignación de permisosSPRoleAssignment roleAssign = new SPRoleAssignment (@"SHAREPOINTKrishnaS", // DOMINIOUsuario "krishnas@sharepoint.com", // Email @"SHAREPOINTKrishnaS", // Nombre a mostrar "HR Manager"); // Descripción// Referenciar un nivel de permisosSPRoleDefinition roleDef = newWeb.RoleDefinitions["Contribute"];// Añadir el nivel de permisos a la asignaciónroleAssign.RoleDefinitionBindings.Add(roleDef);// Añadir la asignación al sitio WebnewWeb.RoleAssignments.Add(roleAssign);// Guardar los cambiosnewWeb.Update(); 83
  84. 84. Trabajar programáticamente con listas  Antes de ello… 84
  85. 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
  86. 86. Crear listas programáticamente  Ejemplo:SPWeb thisWeb = SPContext.Current.Web;Guid jobDefGuid = thisWeb.Lists.Add( "Job Definitions", // Title "Jobs, Salary Ranges, and Descriptions", // Description SPListTemplateType.GenericList); // List TemplateSPList jobDef = thisWeb.Lists[jobDefGuid]; 86
  87. 87. Eliminar listas programáticamente  Ejemplos (eliminación permanente o a través de la papelera de reciclaje, recuperable):SPWeb thisWeb = SPContext.Current.Web;SPList jobDef = thisWeb.Lists["Job Definitions"];jobDef.Delete(); // No devuelve nadaSPWeb thisWeb = SPContext.Current.Web;SPList jobDef = thisWeb.Lists["Job Definitions"];Guid jobDefGuid = jobDef.Recycle(); // Devuelve un GUID......Guid[] restoreGuids = new Guid[1];restoreGuids[0] = jobDefGuid;thisWeb.recycleBin.Restore(restoreGuids); 87
  88. 88. Añadir o quitar columnas programáticamente  Ejemplos:...jobDef.Fields.Add("MinSalary", SPFieldType.Currency, true);jobDef.Fields.Add("MaxSalary", SPFieldType.Currency, true);jobDef.Fields.Add("JobDescription", SPFieldType.Text, false);jobDef.Update();...SPField fld = jobDef.Fields["MinSalary"];fld.Delete();fld.ParentList.Update();...jobDef.Fields.Delete("MinSalary");jobDef.Update(); 88
  89. 89. Trabajar programáticamente con datos  Antes de ello… 89
  90. 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. 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. 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. 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. 94. Consultas CAML  Ejemplo:SPWeb thisWeb = SPContext.Current.Web;SPList openPositions = thisWeb.Lists["OpenPositions"];SPQuery query = new SPQuery();// Establecer la propiedad ViewFields del objeto SPQueryquery.ViewFields = "<FieldRef Name=Title />" + "<FieldRef Name=Location />" + "<FieldRef Name=Interviewer />";// Establecer la propiedad Query del objeto SPQueryquery.Query = "<Where><Eq><FieldRef Name=Title /><Value Type=Text>Developer</Value></Eq></Where>";// Utilizar GetItems para recuperar los elementos que necesitamosSPListItemCollection developerPositions = openPositions.GetItems(query); 94
  95. 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. 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
  97. 97. DEMO  LINQ to SharePoint 97
  98. 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. 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. 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. 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. 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. 103. Tipos de eventos  Eventos de antes (síncronos)  Eventos de después (asíncronos) 103
  104. 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. 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. 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. 107. Otros receptores de eventos  Características  SPFeatureReceiver y FeatureActivated, FeatureDeactivating, FeatureInstalled, FeatureUninstalling y FeatureUpgrading 107
  108. 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. 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. 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. 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. 112. Introducción a Business Connectivity Services  Qué son Business Connectivity Services  Tipos de contenido externo y listas externas  Arquitectura BCS 112
  113. 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. 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
  115. 115. Arquitectura BCS 115
  116. 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. 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. 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. 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. 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
  121. 121. DEMO  SharePoint Designer 2010 121
  122. 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. 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. 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. 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. 126. Implementar métodos de BCDpublic 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
  127. 127. DEMO  Visual Studio 2010 127
  128. 128. Desarrollando flujos de trabajo para SharePoint  Crear flujos de trabajo utilizando SharePoint Designer  Crear flujos de trabajo con Visual Studio 2010 128
  129. 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. 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. 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. 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. 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. 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. 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
  136. 136. DEMO  SharePoint Designer 2010 136
  137. 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. 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. 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. 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
  141. 141. Formularios de inicio  Ejemplos:private string GetInitiationData(){ return(myInitiationTextBox.Text);}public SPWorkflowActivationProperties workflowProperties = new SPWorkflowActivationProperties();private string myInitData = string.Empty;private void myWorkflow_Initialized(object sender, EventArgs e){ myInitData = workflowProperties.InitiationData;} 141
  142. 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. 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
  144. 144. DEMO  Visual Studio 2010 144
  145. 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. 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. 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
  148. 148. Arquitectura del modelo de objetos de cliente  Arquitectura: 148
  149. 149. Procesos en el modelo de objetos de cliente  Procesos: 149
  150. 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. 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. 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. 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. 154. Crear objetos ClientContext  Los objetos ClientContext proporcionan el punto de entrada al modelo de objetos de cliente  Ejemplo:// Instanciar un ClientContextClientContext remoteCtx = new ClientContext("http://sharepoint"); 154
  155. 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. 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. 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. 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
  159. 159. Liberar objetos ClientContext  Ejemplo: ClientContext remoteCtx = null; try { remoteCtx = new ClientContext(http://sharepoint); // Operaciones requeridas } catch(Exception clientEx) { // Manejar las excepciones } finally { remoteCtx.Dispose(); } 159
  160. 160. DEMO  Visual Studio 2010 160
  161. 161. Desarrollando interfaces de usuario interactivas  Crear elementos de menú y controles de cinta  Crear cuadros de diálogo de cliente 161
  162. 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. 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. 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. 165. Crear controles de cinta personalizados  Los controles personalizados se definen en un XML 165
  166. 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. 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. 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. 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. 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. 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
  172. 172. DEMO  Visual Studio 2010  SharePoint Manager 2010: http://spm.codeplex.com/ 172
  173. 173. Desarrollando aplicaciones Silverlight  Crear aplicaciones Silverlight  Desplegar y depurar aplicaciones Silverlight 173
  174. 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. 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. 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. 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.Threadingprivate void Application_Startup(object sender, StartupEventArgs e){ ApplicationContext.Init(e.InitParams, SynchronizationContext.Current); ...}...clientCtx = new ClientContext(ApplicationContext.Current.Url);... 177
  178. 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
  179. 179. Comunicación asíncrona  Ejemplo: 179
  180. 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. 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. 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. 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. 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
  185. 185. DEMO  Visual Studio 2010 185
  186. 186. Desarrollando soluciones „sandbox‟  „Sandboxing‟ y soluciones de usuario  Restricciones para las soluciones de espacio aislado 186
  187. 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

×