SlideShare una empresa de Scribd logo
1 de 218
SharePoint
                                                                                        2010
                                                                                    Desarrollo de
                                                                                    Aplicaciones




                                Consultec, S.L.
Bilbao – Donostia San Sebastián – Madrid – Pamplona – Santander – Vitoria Gasteiz
Í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
Í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
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
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
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
Panorama del desarrollador de SharePoint

     Áreas de trabajo en SharePoint Server 2010




                                         7
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
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
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
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
Jerarquía de objetos en SharePoint 2010

     Jerarquía de objetos

         SPFarm

         SPService

         SPWebApplication

         SPSite

         SPWeb

         SPList




                             12
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
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
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
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
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
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
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
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
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
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
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
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
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
SPList

     Ejemplo:

          ...
          foreach (SPWeb childWeb in site.RootWeb.Webs)
          {
            try
            {
                 foreach (SPList list in childWeb.Lists)
                 {
                   if(!list.Hidden)
                   {
                     ...
                   }
                 }
              }
              finally
              {
                childWeb.Dispose();
              }
          }




                                       26
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
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
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
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
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
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
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
Crear sitios utilizando SharePoint Designer

     Editar sitios

     Diseñar y desarrollar sitios




                                     34
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
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
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
DEMO

    SharePoint Designer 2010

    SharePoint Manager 2010: http://spm.codeplex.com/




                                       38
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
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
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
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
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
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
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
Almacenamiento en listas

     Definiciones de lista

     Instancias de lista




                              46
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
Instancias de lista

     Una instancia de lista consta de un archivo:

          Elements.xml (configuraciones y comportamientos, datos)




                                              48
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
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
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
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
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
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
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
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
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
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
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
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
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
DEMO

    Visual Studio 2010




                          62
Desarrollando Web Parts

     Desarrollar Web Parts estándar

     Desarrollar Web Parts conectados

     Desarrollar Web Parts Visuales




                                         63
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
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
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
Agregar Web Parts estándar a proyectos

     Se pueden sobrescribir los métodos de la clase base que sean necesarios (OnInit,

      OnLoad, etc.)




                                          67
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
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
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
Desarrollar Web Parts conectados

        Ejemplo (interfaz):

public interface IJobDef
{
  // Miembros
  string JobDef
  {
    get;
    set;
  }
}




                               71
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
Desarrollar Web Parts conectados

        Ejemplo (consumidor):

string jobDefinition = string.Empty;

[ConnectionConsumer("Job")]
public void GetJob(IJobDef Job)
{
  if(Job != null)
  {
    jobDefinition = Job.JobDef;
  }
}




                                  73
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
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
Trabajar programáticamente con sitios Web

     Antes de ello…




                         76
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
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
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
Crear sitios Web programáticamente

     Configuraciones y definiciones de sitios

          http://msdn.microsoft.com/es-es/library/aa978512




                                               80
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
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
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
Trabajar programáticamente con listas

     Antes de ello…




                         84
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
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 Template
SPList jobDef = thisWeb.Lists[jobDefGuid];




                              86
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 nada

SPWeb 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
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
Trabajar programáticamente con datos

     Antes de ello…




                        89
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
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
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
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
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
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
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
DEMO

    LINQ to SharePoint




                          97
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
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
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
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
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
Tipos de eventos

     Eventos de antes (síncronos)

     Eventos de después (asíncronos)




                                        103
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
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
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
Otros receptores de eventos

     Características

          SPFeatureReceiver y FeatureActivated, FeatureDeactivating, FeatureInstalled, FeatureUninstalling

           y FeatureUpgrading




                                              107
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
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
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
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
Introducción a Business Connectivity Services

     Qué son Business Connectivity Services

     Tipos de contenido externo y listas externas

     Arquitectura BCS




                                          112
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
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
Arquitectura BCS




                   115
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
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
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
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
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
DEMO

    SharePoint Designer 2010




                                121
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
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
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
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
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
DEMO

    Visual Studio 2010




                          127
Desarrollando flujos de trabajo para SharePoint

     Crear flujos de trabajo utilizando SharePoint Designer

     Crear flujos de trabajo con Visual Studio 2010




                                          128
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
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
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
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
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
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
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
DEMO

    SharePoint Designer 2010




                                136
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
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
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
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
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
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
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
DEMO

    Visual Studio 2010




                          144
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
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
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
Arquitectura del modelo de objetos de cliente

     Arquitectura:




                          148
Procesos en el modelo de objetos de cliente

     Procesos:




                         149
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
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
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
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
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
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
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
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
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
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
DEMO

    Visual Studio 2010




                          160
Desarrollando interfaces de usuario interactivas

     Crear elementos de menú y controles de cinta

     Crear cuadros de diálogo de cliente




                                            161
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
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
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
Crear controles de cinta personalizados

     Los controles personalizados se definen en un XML




                                        165
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
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
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
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
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
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
DEMO

    Visual Studio 2010

    SharePoint Manager 2010: http://spm.codeplex.com/




                                       172
Desarrollando aplicaciones Silverlight

     Crear aplicaciones Silverlight

     Desplegar y depurar aplicaciones Silverlight




                                          173
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
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
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
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
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
Comunicación asíncrona

     Ejemplo:




                         179
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
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
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
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
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
DEMO

    Visual Studio 2010




                          185
Desarrollando soluciones „sandbox‟

     „Sandboxing‟ y soluciones de usuario

     Restricciones para las soluciones de espacio aislado




                                          186
„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
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
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
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
Depurar soluciones de espacio aislado

     Visual Studio se adjunta al proceso SPUCWorkerProcess.exe




                                       191
Restricciones para las soluciones

     Tipos de proyecto y de elementos de proyecto

     Acceso a datos

     Operaciones permitidas y no permitidas




                                         192
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
Trabajando con perfiles y el API de taxonomía

     Perfiles de usuario

     Taxonomías




                            194
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
DesarrolloAplicacionesSharePoint2010
DesarrolloAplicacionesSharePoint2010
DesarrolloAplicacionesSharePoint2010
DesarrolloAplicacionesSharePoint2010
DesarrolloAplicacionesSharePoint2010
DesarrolloAplicacionesSharePoint2010
DesarrolloAplicacionesSharePoint2010
DesarrolloAplicacionesSharePoint2010
DesarrolloAplicacionesSharePoint2010
DesarrolloAplicacionesSharePoint2010
DesarrolloAplicacionesSharePoint2010
DesarrolloAplicacionesSharePoint2010
DesarrolloAplicacionesSharePoint2010
DesarrolloAplicacionesSharePoint2010
DesarrolloAplicacionesSharePoint2010
DesarrolloAplicacionesSharePoint2010
DesarrolloAplicacionesSharePoint2010
DesarrolloAplicacionesSharePoint2010
DesarrolloAplicacionesSharePoint2010
DesarrolloAplicacionesSharePoint2010
DesarrolloAplicacionesSharePoint2010
DesarrolloAplicacionesSharePoint2010
DesarrolloAplicacionesSharePoint2010

Más contenido relacionado

La actualidad más candente

Introducción a SharePoint Foundation 2010
Introducción a SharePoint Foundation 2010Introducción a SharePoint Foundation 2010
Introducción a SharePoint Foundation 2010Juan Carlos Gonzalez
 
Cómo instalar Sharepoint Server 2013 en su empresa por Neiy Briceño
Cómo instalar Sharepoint Server 2013 en su empresa por Neiy BriceñoCómo instalar Sharepoint Server 2013 en su empresa por Neiy Briceño
Cómo instalar Sharepoint Server 2013 en su empresa por Neiy BriceñoNeiy Darry Rodriguez
 
Sharepoint 2010 novedades y mejoras MICTT
Sharepoint 2010  novedades y mejoras MICTTSharepoint 2010  novedades y mejoras MICTT
Sharepoint 2010 novedades y mejoras MICTTMICTT Palma
 
Introducción Desarrollo MOSS2007
Introducción Desarrollo MOSS2007Introducción Desarrollo MOSS2007
Introducción Desarrollo MOSS2007Eva Ordoñez Perez
 
SharePoint 2016 IT Preview
SharePoint 2016 IT PreviewSharePoint 2016 IT Preview
SharePoint 2016 IT PreviewMiguel Tabera
 
Resumen de Novedades en SharePoint 2013
Resumen de Novedades en SharePoint 2013Resumen de Novedades en SharePoint 2013
Resumen de Novedades en SharePoint 2013Juan Carlos Gonzalez
 
Sharepoint 2010 e Infopath 2010
Sharepoint 2010 e Infopath 2010Sharepoint 2010 e Infopath 2010
Sharepoint 2010 e Infopath 2010Eva Ordoñez Perez
 
¿Que es SharePoint?
¿Que es SharePoint?¿Que es SharePoint?
¿Que es SharePoint?Rick Taylor
 
Sharepoint server 2010 - La nueva colaboración
Sharepoint server 2010  - La nueva colaboraciónSharepoint server 2010  - La nueva colaboración
Sharepoint server 2010 - La nueva colaboraciónAndrés Iturralde
 
DBA para SharePoint
DBA para SharePointDBA para SharePoint
DBA para SharePointJoseph Lopez
 
¿Qué es SharePoint? ¿Es importante para tu negocio?
¿Qué es SharePoint? ¿Es importante para tu negocio?¿Qué es SharePoint? ¿Es importante para tu negocio?
¿Qué es SharePoint? ¿Es importante para tu negocio?Neiy Darry Rodriguez
 
Buenas prácticas en infraestructura en SharePoint 2013
Buenas prácticas en infraestructura en SharePoint 2013Buenas prácticas en infraestructura en SharePoint 2013
Buenas prácticas en infraestructura en SharePoint 2013Miguel Tabera
 
¿Merece la pena SharePoint 2016? Puntos de vista de un IT PRO, desarrollador ...
¿Merece la pena SharePoint 2016? Puntos de vista de un IT PRO, desarrollador ...¿Merece la pena SharePoint 2016? Puntos de vista de un IT PRO, desarrollador ...
¿Merece la pena SharePoint 2016? Puntos de vista de un IT PRO, desarrollador ...Miguel Tabera
 
Tipos de Sitios en SharePoint 2010
Tipos de Sitios en SharePoint 2010Tipos de Sitios en SharePoint 2010
Tipos de Sitios en SharePoint 2010SolidQ
 
Oracle WebCenter 11g : Novedades, Julio de 2009
Oracle WebCenter 11g : Novedades, Julio de 2009 Oracle WebCenter 11g : Novedades, Julio de 2009
Oracle WebCenter 11g : Novedades, Julio de 2009 Jaime Cid
 
Intranet informacion compartida
Intranet informacion compartidaIntranet informacion compartida
Intranet informacion compartidaJames Gonzales
 

La actualidad más candente (20)

Introducción a SharePoint Foundation 2010
Introducción a SharePoint Foundation 2010Introducción a SharePoint Foundation 2010
Introducción a SharePoint Foundation 2010
 
Cómo instalar Sharepoint Server 2013 en su empresa por Neiy Briceño
Cómo instalar Sharepoint Server 2013 en su empresa por Neiy BriceñoCómo instalar Sharepoint Server 2013 en su empresa por Neiy Briceño
Cómo instalar Sharepoint Server 2013 en su empresa por Neiy Briceño
 
Share point
Share pointShare point
Share point
 
Sharepoint 2010 novedades y mejoras MICTT
Sharepoint 2010  novedades y mejoras MICTTSharepoint 2010  novedades y mejoras MICTT
Sharepoint 2010 novedades y mejoras MICTT
 
Introducción Desarrollo MOSS2007
Introducción Desarrollo MOSS2007Introducción Desarrollo MOSS2007
Introducción Desarrollo MOSS2007
 
SharePoint 2016 IT Preview
SharePoint 2016 IT PreviewSharePoint 2016 IT Preview
SharePoint 2016 IT Preview
 
Resumen de Novedades en SharePoint 2013
Resumen de Novedades en SharePoint 2013Resumen de Novedades en SharePoint 2013
Resumen de Novedades en SharePoint 2013
 
Sharepoint 2010 e Infopath 2010
Sharepoint 2010 e Infopath 2010Sharepoint 2010 e Infopath 2010
Sharepoint 2010 e Infopath 2010
 
BI en SharePoint 2010
BI en SharePoint 2010BI en SharePoint 2010
BI en SharePoint 2010
 
¿Que es SharePoint?
¿Que es SharePoint?¿Que es SharePoint?
¿Que es SharePoint?
 
Sharepoint server 2010 - La nueva colaboración
Sharepoint server 2010  - La nueva colaboraciónSharepoint server 2010  - La nueva colaboración
Sharepoint server 2010 - La nueva colaboración
 
DBA para SharePoint
DBA para SharePointDBA para SharePoint
DBA para SharePoint
 
SharePoint 2013 general
SharePoint 2013 generalSharePoint 2013 general
SharePoint 2013 general
 
¿Qué es SharePoint? ¿Es importante para tu negocio?
¿Qué es SharePoint? ¿Es importante para tu negocio?¿Qué es SharePoint? ¿Es importante para tu negocio?
¿Qué es SharePoint? ¿Es importante para tu negocio?
 
Buenas prácticas en infraestructura en SharePoint 2013
Buenas prácticas en infraestructura en SharePoint 2013Buenas prácticas en infraestructura en SharePoint 2013
Buenas prácticas en infraestructura en SharePoint 2013
 
¿Merece la pena SharePoint 2016? Puntos de vista de un IT PRO, desarrollador ...
¿Merece la pena SharePoint 2016? Puntos de vista de un IT PRO, desarrollador ...¿Merece la pena SharePoint 2016? Puntos de vista de un IT PRO, desarrollador ...
¿Merece la pena SharePoint 2016? Puntos de vista de un IT PRO, desarrollador ...
 
SharePoint para Usuarios
SharePoint para UsuariosSharePoint para Usuarios
SharePoint para Usuarios
 
Tipos de Sitios en SharePoint 2010
Tipos de Sitios en SharePoint 2010Tipos de Sitios en SharePoint 2010
Tipos de Sitios en SharePoint 2010
 
Oracle WebCenter 11g : Novedades, Julio de 2009
Oracle WebCenter 11g : Novedades, Julio de 2009 Oracle WebCenter 11g : Novedades, Julio de 2009
Oracle WebCenter 11g : Novedades, Julio de 2009
 
Intranet informacion compartida
Intranet informacion compartidaIntranet informacion compartida
Intranet informacion compartida
 

Destacado

Gestión de pryectos con AgilePoint y Sharepoint
Gestión de pryectos con AgilePoint y SharepointGestión de pryectos con AgilePoint y Sharepoint
Gestión de pryectos con AgilePoint y SharepointMICProductivity
 
Como hacer que tus aplicaciones saquen mejor provecho a los procesadores disp...
Como hacer que tus aplicaciones saquen mejor provecho a los procesadores disp...Como hacer que tus aplicaciones saquen mejor provecho a los procesadores disp...
Como hacer que tus aplicaciones saquen mejor provecho a los procesadores disp...Andrés Iturralde
 
SharePoint 2010 Introducción para Desarrolladores
SharePoint 2010 Introducción para DesarrolladoresSharePoint 2010 Introducción para Desarrolladores
SharePoint 2010 Introducción para DesarrolladoresAndrés Iturralde
 
CSA - Web Parts en SharePoint 2010
CSA - Web Parts en SharePoint 2010CSA - Web Parts en SharePoint 2010
CSA - Web Parts en SharePoint 2010Comunidad SharePoint
 
Introducción a web matrix
Introducción a web matrixIntroducción a web matrix
Introducción a web matrixMICTT Palma
 
CRM on Demand for Higher Education: CRM for the Entire Constituent Life Cycle...
CRM on Demand for Higher Education: CRM for the Entire Constituent Life Cycle...CRM on Demand for Higher Education: CRM for the Entire Constituent Life Cycle...
CRM on Demand for Higher Education: CRM for the Entire Constituent Life Cycle...jpsells
 
Microsoft Dynamics CRM for Education!
Microsoft Dynamics CRM for Education!Microsoft Dynamics CRM for Education!
Microsoft Dynamics CRM for Education!Nerea
 
Microsoft Dynamics CRM for Education
Microsoft Dynamics CRM for EducationMicrosoft Dynamics CRM for Education
Microsoft Dynamics CRM for EducationNerea
 
Sharepoint 2010. Novedades y Mejoras.
Sharepoint 2010. Novedades y Mejoras.Sharepoint 2010. Novedades y Mejoras.
Sharepoint 2010. Novedades y Mejoras.MICTT Palma
 
Exprimiendo SharePoint 2010
Exprimiendo SharePoint 2010Exprimiendo SharePoint 2010
Exprimiendo SharePoint 2010Juan Pablo
 

Destacado (10)

Gestión de pryectos con AgilePoint y Sharepoint
Gestión de pryectos con AgilePoint y SharepointGestión de pryectos con AgilePoint y Sharepoint
Gestión de pryectos con AgilePoint y Sharepoint
 
Como hacer que tus aplicaciones saquen mejor provecho a los procesadores disp...
Como hacer que tus aplicaciones saquen mejor provecho a los procesadores disp...Como hacer que tus aplicaciones saquen mejor provecho a los procesadores disp...
Como hacer que tus aplicaciones saquen mejor provecho a los procesadores disp...
 
SharePoint 2010 Introducción para Desarrolladores
SharePoint 2010 Introducción para DesarrolladoresSharePoint 2010 Introducción para Desarrolladores
SharePoint 2010 Introducción para Desarrolladores
 
CSA - Web Parts en SharePoint 2010
CSA - Web Parts en SharePoint 2010CSA - Web Parts en SharePoint 2010
CSA - Web Parts en SharePoint 2010
 
Introducción a web matrix
Introducción a web matrixIntroducción a web matrix
Introducción a web matrix
 
CRM on Demand for Higher Education: CRM for the Entire Constituent Life Cycle...
CRM on Demand for Higher Education: CRM for the Entire Constituent Life Cycle...CRM on Demand for Higher Education: CRM for the Entire Constituent Life Cycle...
CRM on Demand for Higher Education: CRM for the Entire Constituent Life Cycle...
 
Microsoft Dynamics CRM for Education!
Microsoft Dynamics CRM for Education!Microsoft Dynamics CRM for Education!
Microsoft Dynamics CRM for Education!
 
Microsoft Dynamics CRM for Education
Microsoft Dynamics CRM for EducationMicrosoft Dynamics CRM for Education
Microsoft Dynamics CRM for Education
 
Sharepoint 2010. Novedades y Mejoras.
Sharepoint 2010. Novedades y Mejoras.Sharepoint 2010. Novedades y Mejoras.
Sharepoint 2010. Novedades y Mejoras.
 
Exprimiendo SharePoint 2010
Exprimiendo SharePoint 2010Exprimiendo SharePoint 2010
Exprimiendo SharePoint 2010
 

Similar a DesarrolloAplicacionesSharePoint2010

Introduccion a MOSS 2007
Introduccion a MOSS 2007Introduccion a MOSS 2007
Introduccion a MOSS 2007Luis Du Solier
 
Herramientas SharePoint para programadores .NET
Herramientas SharePoint para programadores .NETHerramientas SharePoint para programadores .NET
Herramientas SharePoint para programadores .NETHaaron Gonzalez
 
SharePoint Server #MDU2012
SharePoint Server #MDU2012SharePoint Server #MDU2012
SharePoint Server #MDU2012unicunditech
 
Contenido en Sharepoint 2010 Comercial
Contenido en Sharepoint 2010 ComercialContenido en Sharepoint 2010 Comercial
Contenido en Sharepoint 2010 ComercialEva Ordoñez Perez
 
Construyendo flujos de trabajo
Construyendo flujos de trabajoConstruyendo flujos de trabajo
Construyendo flujos de trabajoFabian Imaz
 
Bajo el Toldo con la Programabilidad de Microsoft SharePoint 2010
Bajo el Toldo con la Programabilidad de Microsoft SharePoint 2010Bajo el Toldo con la Programabilidad de Microsoft SharePoint 2010
Bajo el Toldo con la Programabilidad de Microsoft SharePoint 2010Andrés Iturralde
 
Enterprise 2.0 & SocialBPM
Enterprise 2.0 & SocialBPMEnterprise 2.0 & SocialBPM
Enterprise 2.0 & SocialBPMJaime Cid
 
Share Point Server 2007
Share Point Server 2007Share Point Server 2007
Share Point Server 2007VLADEMIRSS
 
Portales Enterprise 2.0 con WebCenter
Portales Enterprise 2.0 con WebCenterPortales Enterprise 2.0 con WebCenter
Portales Enterprise 2.0 con WebCenterJaime Cid
 
Bi share point 2010 performancepoint metro
Bi share point 2010 performancepoint metroBi share point 2010 performancepoint metro
Bi share point 2010 performancepoint metroFabian Imaz
 
Bi share point 2010 performancepoint metro
Bi share point 2010 performancepoint metroBi share point 2010 performancepoint metro
Bi share point 2010 performancepoint metroFabian Imaz
 
Estrategias de desarrollo en sharepoint
Estrategias de desarrollo en sharepointEstrategias de desarrollo en sharepoint
Estrategias de desarrollo en sharepointDaniel Laco
 
Novedades Sharepoint server 2010
Novedades Sharepoint server 2010Novedades Sharepoint server 2010
Novedades Sharepoint server 2010Eva Ordoñez Perez
 
Introducción al Desarrollo para SharePoint con Visual Studio 2008
Introducción al Desarrollo para SharePoint con Visual Studio 2008Introducción al Desarrollo para SharePoint con Visual Studio 2008
Introducción al Desarrollo para SharePoint con Visual Studio 2008juliocasal
 
Presentación SharePoint como plataforma multiuso
Presentación SharePoint como plataforma multiusoPresentación SharePoint como plataforma multiuso
Presentación SharePoint como plataforma multiusoRut Villagrasa
 
Entornos colaborativos en SharePoint 2010
Entornos colaborativos en SharePoint 2010Entornos colaborativos en SharePoint 2010
Entornos colaborativos en SharePoint 2010Raona
 
Una mirada en 360° a SharePoint 2010
Una mirada en 360° a SharePoint 2010Una mirada en 360° a SharePoint 2010
Una mirada en 360° a SharePoint 2010Andrés Iturralde
 
Share point
Share point Share point
Share point san11391
 

Similar a DesarrolloAplicacionesSharePoint2010 (20)

Introduccion a MOSS 2007
Introduccion a MOSS 2007Introduccion a MOSS 2007
Introduccion a MOSS 2007
 
Herramientas SharePoint para programadores .NET
Herramientas SharePoint para programadores .NETHerramientas SharePoint para programadores .NET
Herramientas SharePoint para programadores .NET
 
SharePoint Server #MDU2012
SharePoint Server #MDU2012SharePoint Server #MDU2012
SharePoint Server #MDU2012
 
Contenido en Sharepoint 2010 Comercial
Contenido en Sharepoint 2010 ComercialContenido en Sharepoint 2010 Comercial
Contenido en Sharepoint 2010 Comercial
 
Construyendo flujos de trabajo
Construyendo flujos de trabajoConstruyendo flujos de trabajo
Construyendo flujos de trabajo
 
Bajo el Toldo con la Programabilidad de Microsoft SharePoint 2010
Bajo el Toldo con la Programabilidad de Microsoft SharePoint 2010Bajo el Toldo con la Programabilidad de Microsoft SharePoint 2010
Bajo el Toldo con la Programabilidad de Microsoft SharePoint 2010
 
Enterprise 2.0 & SocialBPM
Enterprise 2.0 & SocialBPMEnterprise 2.0 & SocialBPM
Enterprise 2.0 & SocialBPM
 
Share Point Server 2007
Share Point Server 2007Share Point Server 2007
Share Point Server 2007
 
Portales Enterprise 2.0 con WebCenter
Portales Enterprise 2.0 con WebCenterPortales Enterprise 2.0 con WebCenter
Portales Enterprise 2.0 con WebCenter
 
Bi share point 2010 performancepoint metro
Bi share point 2010 performancepoint metroBi share point 2010 performancepoint metro
Bi share point 2010 performancepoint metro
 
Bi share point 2010 performancepoint metro
Bi share point 2010 performancepoint metroBi share point 2010 performancepoint metro
Bi share point 2010 performancepoint metro
 
(28.04) MOSSCA Invita - Bienvenidos a la casa de Sharepoint - Services 3
(28.04) MOSSCA Invita - Bienvenidos a la casa de Sharepoint - Services 3(28.04) MOSSCA Invita - Bienvenidos a la casa de Sharepoint - Services 3
(28.04) MOSSCA Invita - Bienvenidos a la casa de Sharepoint - Services 3
 
Estrategias de desarrollo en sharepoint
Estrategias de desarrollo en sharepointEstrategias de desarrollo en sharepoint
Estrategias de desarrollo en sharepoint
 
Novedades Sharepoint server 2010
Novedades Sharepoint server 2010Novedades Sharepoint server 2010
Novedades Sharepoint server 2010
 
Introducción al Desarrollo para SharePoint con Visual Studio 2008
Introducción al Desarrollo para SharePoint con Visual Studio 2008Introducción al Desarrollo para SharePoint con Visual Studio 2008
Introducción al Desarrollo para SharePoint con Visual Studio 2008
 
Presentación SharePoint como plataforma multiuso
Presentación SharePoint como plataforma multiusoPresentación SharePoint como plataforma multiuso
Presentación SharePoint como plataforma multiuso
 
Entornos colaborativos en SharePoint 2010
Entornos colaborativos en SharePoint 2010Entornos colaborativos en SharePoint 2010
Entornos colaborativos en SharePoint 2010
 
Una mirada en 360° a SharePoint 2010
Una mirada en 360° a SharePoint 2010Una mirada en 360° a SharePoint 2010
Una mirada en 360° a SharePoint 2010
 
Share point shirley xiomaraugaldegarro
Share point shirley xiomaraugaldegarroShare point shirley xiomaraugaldegarro
Share point shirley xiomaraugaldegarro
 
Share point
Share point Share point
Share point
 

Último

Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxJOSEFERNANDOARENASCA
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptJavierHerrera662252
 
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxAlexander López
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptMiguelAtencio10
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadMiguelAngelVillanuev48
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELmaryfer27m
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaarkananubis
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativaAdrianaMartnez618894
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 
Segunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxSegunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxMariaBurgos55
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx241523733
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.241514949
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxAlexander López
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx241522327
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son241514984
 

Último (20)

Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptx
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
 
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.ppt
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidad
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFEL
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en mina
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativa
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 
Segunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxSegunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptx
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
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
  • 7. Panorama del desarrollador de SharePoint  Áreas de trabajo en SharePoint Server 2010 7
  • 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
  • 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. 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
  • 34. Crear sitios utilizando SharePoint Designer  Editar sitios  Diseñar y desarrollar sitios 34
  • 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
  • 38. DEMO  SharePoint Designer 2010  SharePoint Manager 2010: http://spm.codeplex.com/ 38
  • 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
  • 46. Almacenamiento en listas  Definiciones de lista  Instancias de lista 46
  • 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
  • 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. 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. 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. 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
  • 62. DEMO  Visual Studio 2010 62
  • 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
  • 76. Trabajar programáticamente con sitios Web  Antes de ello… 76
  • 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
  • 84. Trabajar programáticamente con listas  Antes de ello… 84
  • 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. 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 Template SPList jobDef = thisWeb.Lists[jobDefGuid]; 86
  • 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 nada SPWeb 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. 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. Trabajar programáticamente con datos  Antes de ello… 89
  • 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
  • 97. DEMO  LINQ to SharePoint 97
  • 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
  • 121. DEMO  SharePoint Designer 2010 121
  • 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
  • 127. DEMO  Visual Studio 2010 127
  • 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
  • 136. DEMO  SharePoint Designer 2010 136
  • 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
  • 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. 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
  • 144. DEMO  Visual Studio 2010 144
  • 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
  • 148. Arquitectura del modelo de objetos de cliente  Arquitectura: 148
  • 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
  • 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. DEMO  Visual Studio 2010 160
  • 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
  • 172. DEMO  Visual Studio 2010  SharePoint Manager 2010: http://spm.codeplex.com/ 172
  • 173. Desarrollando aplicaciones Silverlight  Crear aplicaciones Silverlight  Desplegar y depurar aplicaciones Silverlight 173
  • 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
  • 179. Comunicación asíncrona  Ejemplo: 179
  • 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
  • 185. DEMO  Visual Studio 2010 185
  • 186. Desarrollando soluciones „sandbox‟  „Sandboxing‟ y soluciones de usuario  Restricciones para las soluciones de espacio aislado 186
  • 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
  • 194. Trabajando con perfiles y el API de taxonomía  Perfiles de usuario  Taxonomías 194
  • 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