Desarrollando Soluciones para Microsoft SharePoint Server 2010 Utilizando el Modelo de Objeto de ClienteAndrés IturraldeSenior Consultant - IKOMaiturralde@ikom.clhttp://aiturralde.com
Tecnologías de DatosListasfuertementetipadasListasdebilmentetipadasMétodos, MOSSClientOMWeb ServicesREST APIsClientePlataforma de DatosFarmSiteList DataExternal ListsServerOMListasdebilmentetipadasServidorLINQListasfuertementetipadasNuevo en 2010Mejorado
AgendaModelo de objetos de clienteLo básicoQueriesÁmbito de ExcepcionesCargacondicionalAccesodatos en Silverlight cross-site
Modelo de objetos de cliente: Lo básicoLibrería de ladoclienteparallamarremotamente a SharePointSubconjunto de objetos del lado del servidorUsable en JavaScript, .net CLR, Silverlight CLRRequests son encoladosparamejorrendimientoUsadopor  UI de SharePoint UI paraoperacionescomoeliminación en batch
Empezando con el modelo de objetos de cliente.NET CLR:  14\ISAPI Silverlight: 14\TEMPLATE\LAYOUTS\ClientBinEmpaquetado en .XAPJavaScript: Usa <ScriptLink>/SP.SOD.executeparaagregararchivos JS
Empezando: 3 cosas a saber1. ClientContextes el objeto central2. Antes de leer unapropiedad, debespreguntarporella3. Todos los request son enviados en un batchclientContext = new ClientContext(“http://MiSitio”);clientContext.Load(list);clientContext.ExecuteQuery();
HolaMundo! Modelo de objetos JavaScriptModelo de objetos Silverlight
C#private ClientContext context;private Web web;private void TestButton_Click(object sender, RoutedEventArgs e){	context = ClientContext.Current;	web = context.Web;context.Load(web);context.ExecuteQueryAsync(TitleRetrievedContinue, null);}private void TitleRetrievedContinue(object sender, ClientRequestSucceededEventArgsargs){web.Title = web.Title + " + Silverlight";web.Update();context.ExecuteQueryAsync(SayDone, null);}
JavaScriptvar context;var web;function testButtonClick(){	context = new SP.ClientContext();	web = context.get_web();context.load(web)context.executeQueryAsync(titleRetrievedContinue);}function titleRetrievedContinue(){web.set_title(web.get_title() + " + JavaScript");web.update();context.executeQueryAsync(sayDone);}
Accesando a datosAplicaciónClienteAplicaciónClienteWPF/WinForm/OfficeSilverlightJavaScriptAPI ClienteClienteExecuteQuery()XMLJSONServidorWeb ServiceClient.svcAplicaciónServidorSharePoint APIData SharePoint
Objetosimportantes en Modelo de objetosclienteSiteWebContentTypeChangeListNavigationFormNavigationNodeViewUserCustomActionFieldRoleDefinitionListItemRoleAssignmentFolderUser InterfaceWorkflowAssociationData and SchemaFileWorkflowTemplateLogicWebPartSecurity
Items no cubiertospormodelo de objetosclientePerfiles de Usuario
Personas
Búsqueda
MetadaEmpresarial
Web services REST Excel
Publicación
AdministraciónLimitaciones del módelo de objetosclienteNo puedeserusado en el servidorparahablar con el mismoservidorAúnesnecesariomanejarsemánticas de sincronización/actualización  (log de cambiospuedeayudar)No existencapacidadesparaelevación de privilegiosLos request son regulados.net CLR tienemétodossincronicos; Silverlight CLR y Jscript son asincronos
Obtención de ConsultasPor default, .Load obtendralaspropiedadesmás simples de un objetoExplicitamenteesnecesarioobtenerobjetoscliente o coleccioneshijasPuedesusarLinqparadefinir la forma de tu queryQuépropiedadesincluirQue sub-objetosretornarItems de listasaúnnecesitanusar queries CAML
PropiedadesWeb: Operaciones DefaultboolAllowRssFeedsboolAllowRssFeedsboolAllowRssFeedsGroup AssociatedMemberGroupDateTimeCreatedDateTimeCreatedContentTypeCollectionContentTypesDateTimeCreatedUser CurrentUserString DescriptionString DescriptionString DescriptionGuidIdGuidIdGuidIdFieldCollectionFieldsList ListsboolRecycleBinEnabledList ListsboolRecycleBinEnabledboolRecycleBinEnabledFolder RootFolderString TitleFolder RootFolderString TitleString TitleclientContext.Load(web);clientContext.Load(web.RootFolder);clientContext.Load(web.Lists);
Queries avanzadosusandoLinQ
LinQvar query = from list in clientContext.Web.Lists         where list.Title != null         select list; var result = clientContext.LoadQuery(query);clientContext.ExecuteQuery();
MétodoclientContext.Load(oList,list=> list.Fields    .Where(field => field.Hidden == false &&field.Filterable== true));clientContext.ExecuteQuery();
Modos de Consulta: Fill vs. Query“Fill”: context.Load(object, paramsLinqExpression)Llena los objetos en el contexto: in-place“Query”:context.LoadQuery(IQueryable)UsaconsultalinqpararetornarobjetospersonalizadosNo llenados en el contexto
Lo básico de sintaxistipoMétodoUsa el método.Where para:Filtrar los items retornados en unacolecciónUsa el método.Includepara:Explicitamenteseleccionarpropiedades u objetoshijos a retornarUsa el método.Take para:Restringir el número de items retornados
Queries y Filtros
Tópicosavanzados del modelo de objetosclienteManejo de excepcionesSirveparareaccionar a excepciones en un batchScope Condicional + RetornosSirveparachequearcondiciones antes de hacercargas, en el servidordentro de un batchPara significarcomo los métodos son filtradosutiliza scopes y sentencias “using” (IDisposable)
Manejo de excepciones y cargascondicionales
Accesodatos cross-site con SilverlightEl problema:Quiereshostearaplicacionespoderosassobre SharePoint queusen data en otroservidorQuieresminimizar el impacto en el deploy de SharePointSilverlight es (generalmente) limitado a llamadassobre un dominioUnasolución: hospeda XAP en el servidorexterno y delega un token de usuario

SharePoint 2010 Client Object Model

  • 1.
    Desarrollando Soluciones paraMicrosoft SharePoint Server 2010 Utilizando el Modelo de Objeto de ClienteAndrés IturraldeSenior Consultant - IKOMaiturralde@ikom.clhttp://aiturralde.com
  • 2.
    Tecnologías de DatosListasfuertementetipadasListasdebilmentetipadasMétodos,MOSSClientOMWeb ServicesREST APIsClientePlataforma de DatosFarmSiteList DataExternal ListsServerOMListasdebilmentetipadasServidorLINQListasfuertementetipadasNuevo en 2010Mejorado
  • 3.
    AgendaModelo de objetosde clienteLo básicoQueriesÁmbito de ExcepcionesCargacondicionalAccesodatos en Silverlight cross-site
  • 4.
    Modelo de objetosde cliente: Lo básicoLibrería de ladoclienteparallamarremotamente a SharePointSubconjunto de objetos del lado del servidorUsable en JavaScript, .net CLR, Silverlight CLRRequests son encoladosparamejorrendimientoUsadopor UI de SharePoint UI paraoperacionescomoeliminación en batch
  • 5.
    Empezando con elmodelo de objetos de cliente.NET CLR: 14\ISAPI Silverlight: 14\TEMPLATE\LAYOUTS\ClientBinEmpaquetado en .XAPJavaScript: Usa <ScriptLink>/SP.SOD.executeparaagregararchivos JS
  • 6.
    Empezando: 3 cosasa saber1. ClientContextes el objeto central2. Antes de leer unapropiedad, debespreguntarporella3. Todos los request son enviados en un batchclientContext = new ClientContext(“http://MiSitio”);clientContext.Load(list);clientContext.ExecuteQuery();
  • 7.
    HolaMundo! Modelo deobjetos JavaScriptModelo de objetos Silverlight
  • 8.
    C#private ClientContext context;privateWeb web;private void TestButton_Click(object sender, RoutedEventArgs e){ context = ClientContext.Current; web = context.Web;context.Load(web);context.ExecuteQueryAsync(TitleRetrievedContinue, null);}private void TitleRetrievedContinue(object sender, ClientRequestSucceededEventArgsargs){web.Title = web.Title + " + Silverlight";web.Update();context.ExecuteQueryAsync(SayDone, null);}
  • 9.
    JavaScriptvar context;var web;functiontestButtonClick(){ context = new SP.ClientContext(); web = context.get_web();context.load(web)context.executeQueryAsync(titleRetrievedContinue);}function titleRetrievedContinue(){web.set_title(web.get_title() + " + JavaScript");web.update();context.executeQueryAsync(sayDone);}
  • 10.
    Accesando a datosAplicaciónClienteAplicaciónClienteWPF/WinForm/OfficeSilverlightJavaScriptAPIClienteClienteExecuteQuery()XMLJSONServidorWeb ServiceClient.svcAplicaciónServidorSharePoint APIData SharePoint
  • 11.
    Objetosimportantes en Modelode objetosclienteSiteWebContentTypeChangeListNavigationFormNavigationNodeViewUserCustomActionFieldRoleDefinitionListItemRoleAssignmentFolderUser InterfaceWorkflowAssociationData and SchemaFileWorkflowTemplateLogicWebPartSecurity
  • 12.
    Items no cubiertospormodelode objetosclientePerfiles de Usuario
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
    AdministraciónLimitaciones del módelode objetosclienteNo puedeserusado en el servidorparahablar con el mismoservidorAúnesnecesariomanejarsemánticas de sincronización/actualización (log de cambiospuedeayudar)No existencapacidadesparaelevación de privilegiosLos request son regulados.net CLR tienemétodossincronicos; Silverlight CLR y Jscript son asincronos
  • 19.
    Obtención de ConsultasPordefault, .Load obtendralaspropiedadesmás simples de un objetoExplicitamenteesnecesarioobtenerobjetoscliente o coleccioneshijasPuedesusarLinqparadefinir la forma de tu queryQuépropiedadesincluirQue sub-objetosretornarItems de listasaúnnecesitanusar queries CAML
  • 20.
    PropiedadesWeb: Operaciones DefaultboolAllowRssFeedsboolAllowRssFeedsboolAllowRssFeedsGroupAssociatedMemberGroupDateTimeCreatedDateTimeCreatedContentTypeCollectionContentTypesDateTimeCreatedUser CurrentUserString DescriptionString DescriptionString DescriptionGuidIdGuidIdGuidIdFieldCollectionFieldsList ListsboolRecycleBinEnabledList ListsboolRecycleBinEnabledboolRecycleBinEnabledFolder RootFolderString TitleFolder RootFolderString TitleString TitleclientContext.Load(web);clientContext.Load(web.RootFolder);clientContext.Load(web.Lists);
  • 21.
  • 22.
    LinQvar query =from list in clientContext.Web.Lists         where list.Title != null         select list; var result = clientContext.LoadQuery(query);clientContext.ExecuteQuery();
  • 23.
    MétodoclientContext.Load(oList,list=> list.Fields .Where(field => field.Hidden == false &&field.Filterable== true));clientContext.ExecuteQuery();
  • 24.
    Modos de Consulta:Fill vs. Query“Fill”: context.Load(object, paramsLinqExpression)Llena los objetos en el contexto: in-place“Query”:context.LoadQuery(IQueryable)UsaconsultalinqpararetornarobjetospersonalizadosNo llenados en el contexto
  • 25.
    Lo básico desintaxistipoMétodoUsa el método.Where para:Filtrar los items retornados en unacolecciónUsa el método.Includepara:Explicitamenteseleccionarpropiedades u objetoshijos a retornarUsa el método.Take para:Restringir el número de items retornados
  • 26.
  • 27.
    Tópicosavanzados del modelode objetosclienteManejo de excepcionesSirveparareaccionar a excepciones en un batchScope Condicional + RetornosSirveparachequearcondiciones antes de hacercargas, en el servidordentro de un batchPara significarcomo los métodos son filtradosutiliza scopes y sentencias “using” (IDisposable)
  • 28.
    Manejo de excepcionesy cargascondicionales
  • 29.
    Accesodatos cross-site conSilverlightEl problema:Quiereshostearaplicacionespoderosassobre SharePoint queusen data en otroservidorQuieresminimizar el impacto en el deploy de SharePointSilverlight es (generalmente) limitado a llamadassobre un dominioUnasolución: hospeda XAP en el servidorexterno y delega un token de usuario
  • 30.
    Página en elnavegador (http://sharepoint/page.aspx)2. Páginaesinstanciada con un token especialSilverlight XAP(http://scrum/myscrum.xap)3. XAP llama a un Web Service personalizado en el servidorhuesped con el TokenClienteServidorhttp://sharepointhttp://scrum1. Web Part esinsertado en la página con markup queindicaque el server huéspedes http://scrum4. Servidor de aplicacionespuededireccionar request al modelo de objeto de cliente de parte del usuario
  • 31.
    Acceso a datoscross-site: conceptosprincipalesAplicaciónprincipalSPUserquerepresenta la cuenta con el request entrantePermisosefectivos de Silverlight con Modelo de objetocliente = Permisos de la aplicación principal y usuarioiniciadorXML de la aplicaciónContieneinformación del servidor de alojamientoProveedor de aplicacionesexternasPuedeserinstalado en el servidoralojadorparaproveerexperienciapersonalizada al agregaraplicacionesRedireccionador de requestCódigoinstalado en el servidorremotopararedireccionar requests
  • 32.
    Tecnologías de DatosListasfuertementetipadasListasdebilmentetipadasMétodos,MOSSClientOMWeb ServicesREST APIsClientePlataforma de DatosFarmSiteList DataExternal ListsServerOMListasdebilmentetipadasServidorLINQListasfuertementetipadasNuevo en 2010Mejorado
  • 34.