{"id":193,"date":"2013-04-02T10:00:09","date_gmt":"2013-04-02T09:00:09","guid":{"rendered":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/?p=193"},"modified":"2013-07-16T10:08:00","modified_gmt":"2013-07-16T09:08:00","slug":"compartimoss-notificaciones-a-aplicaciones-windows-phone-desde-sharepoint-parte-ii","status":"publish","type":"post","link":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/compartimoss-notificaciones-a-aplicaciones-windows-phone-desde-sharepoint-parte-ii\/","title":{"rendered":"[CompartiMOSS] Notificaciones a Aplicaciones Windows Phone desde SharePoint Parte II"},"content":{"rendered":"<p>La pasada semana salio publicada el n\u00famero 15 de la revista digital <a href=\"http:\/\/www.compartimoss.com\" target=\"_blank\">Compartimoss<\/a>, es la primera revista en habla hispana que se habla sobre SharePoint y en la que he tenido el placer de publicar un art\u00edculo, el cual, os muestro a continuaci\u00f3n:<\/p>\n<p><strong>Notificaciones a Aplicaciones Windows Phone desde SharePoint Parte II <\/strong><br \/>\nEste art\u00edculo es la continuaci\u00f3n del art\u00edculo del n\u00famero pasado en el explic\u00e1bamos como enviar notificaciones PUSH desde SharePoint. En este n\u00famero vamos a explicar c\u00f3mo tenemos que desarrollar una APP de Windows Phone 7.5 y 8 para poder recibir las notificaciones desde SharePoint tanto en su versi\u00f3n 2010 como en la nueva versi\u00f3n 2013.<!--more--><\/p>\n<p><strong>Requisitos Previos<\/strong><\/p>\n<p>Descargar el SDK Client SharePoint para Windows Phone 7.1 que facilita la comunicaci\u00f3n de la aplicaci\u00f3n m\u00f3vil con SharePoint<\/p>\n<p><strong>Desarrollo de la APP de Windows Phone<\/strong><\/p>\n<p>La APP que vamos a desarrollar solamente incluye dos partes. Por un lado vamos a explicar c\u00f3mo habilitar nuestra aplicaci\u00f3n para poder recibir notificaciones PUSH y por otro lado como podemos leer los datos de las Listas que hay en SharePoint. Dados estos requerimientos podemos realizar una aplicaci\u00f3n que funcione tanto para Windows Phone 7.5 y Windows Phone 8; primero tenemos que saber que tendremos que hacer dos aplicaciones distintas, pero no hace falta que dupliquemos todo el c\u00f3digo. La cuesti\u00f3n es utilizar los elementos comunes que tienen ambas versiones y de esta forma hacer una aplicaci\u00f3n que nos cueste mucho menos de mantener, sea escalable y de esta forma llegue a un n\u00famero mayor de usuarios.<\/p>\n<p>Para hacer que el c\u00f3digo que realicemos sea compatible en ambas versiones lo que vamos a realizar en primer lugar es crearnos un proyectos de Bibliotecas portables en el que vamos a poner los elementos comunes que van a tener ambas APP. Que va a ser todo a excepci\u00f3n de las Vistas ya que no es lo mismo dise\u00f1ar para una APP que tiene distinto tama\u00f1o de pantalla; el resto del c\u00f3digo fuente va a ser igual.<\/p>\n<p>Seleccionamos el tipo de SO que vamos a utilizar para crear la aplicaci\u00f3n eligiendo la versi\u00f3n 7.1. Lo hacemos as\u00ed porque en la versi\u00f3n 8 incluye todo lo que hab\u00eda antes y adem\u00e1s las nuevas mejoras que conlleva.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignleft\" alt=\"\" src=\"http:\/\/www.compartimoss.com\/PublishingImages\/Numero15\/Notificaciones-Aplicaciones-Windows-Phone-SharePoint\/image1.png\" width=\"263\" height=\"233\" \/>A este proyecto le tenemos que a\u00f1adir las siguientes referencias (Microsoft.Phone, Microsoft.Phone.Interop y Microsoft.SharePoint.Client.Phone)<\/p>\n<p>\u200b<\/p>\n<p>En primer lugar lo que vamos a implementar es una clase \u00abNotification\u00bb que tendr\u00e1 una variable de tipo HttpNotificationChannel que es la que se encargara de comunicarse con el MPNS. En primer lugar nos crearemos un m\u00e9todo OpenNotificationChannel cuya funci\u00f3n es buscar si el canal de comunicaci\u00f3n esta creado. En caso de que no est\u00e9 creado se debe crear. Hay que saber que una aplicaci\u00f3n de WP solo puede tener un \u00fanico canal de comunicaciones abierto y este no se puede comunicar con el resto de aplicaciones que hay en el tel\u00e9fono. Adem\u00e1s se le a\u00f1adir\u00e1n manejadores a los siguientes eventos:<br \/>\n\u2022ChannelUriUpdate que se lanzar\u00e1 si el MPNS cambia la direcci\u00f3n URI de notificaciones.<br \/>\n\u2022ErrorOcurred se lanzar\u00e1 si ocurre un error en la aplicaci\u00f3n.<br \/>\n\u2022httpChannel_ShellToastNotificationReceived se lanzar\u00e1 en el momento que recibamos una notificaci\u00f3n TOAST.<\/p>\n<p>La primera vez que ejecutamos el canal no tenemos a\u00fan la direcci\u00f3n URI y solo tendremos una direcci\u00f3n URI valida en el momento que se lance el evento ChannelUriUpdate, por lo que hasta que no tengamos esta direcci\u00f3n valida no podremos registrar nuestro dispositivo en la aplicaci\u00f3n.<\/p>\n<blockquote><p>public static void OpenNotificationChannel(bool isInitialRegistration)<br \/>\n{<br \/>\ntry {<br \/>\n\/\/ Buscamos si el canal ya esta creado<br \/>\nhttpChannel = HttpNotificationChannel.Find(ChannelName);<br \/>\n\/\/ Si no se encuentra el canal creamos uno<br \/>\nif (httpChannel == null)<br \/>\n{<br \/>\nhttpChannel = new HttpNotificationChannel(ChannelName);<br \/>\n\/\/A\u00f1adimos los eventos asociados al HttpNotificationChannel<br \/>\n\/\/ Hasta que no salte el evento ChannelUriUpdate como no tenemos URI<br \/>\n\/\/ no podemos subscribir el dispositivo Sharepoint<br \/>\nAddChannelEventHandlers();<br \/>\nhttpChannel.Open();<br \/>\n}<br \/>\nelse<br \/>\n{<br \/>\n\/\/En caso de que el canal ya exista asociamos los eventos al HttpNotificationChannal<br \/>\nAddChannelEventHandlers();<br \/>\n\/\/ En caso de que sea la primera vez que se ejecute suscribiremos al Servicio<br \/>\nif (isInitialRegistration)<br \/>\n{<br \/>\nSubscribeToService();<br \/>\n}<br \/>\n}<br \/>\n}<br \/>\ncatch (Exception ex)<br \/>\n{<br \/>\nMessageBox.Show(ex.Message, \u00abError Abriendo el Canal\u00bb, MessageBoxButton.OK);<br \/>\nCloseChannel();<br \/>\n}<br \/>\n}<\/p><\/blockquote>\n<p>Una vez ya tenemos el canal abierto, el siguiente paso a realizar es implementar los manejadores:<\/p>\n<p>ChannelUriUpdate: En este evento lo que vamos a realizar es que cada vez que se ejecute, subscribiremos este dispositivo. Pueden darse dos situaciones: la primera vez en la que registramos el dispositivo y para la que valdr\u00eda el siguiente m\u00e9todo. En la segunda, simplemente realizamos la subscripci\u00f3n.<\/p>\n<blockquote><p>\/\/\/<br \/>\n\/\/\/ Suscribir el servicio en una lista de Sharepoint<\/p>\n<p>private static void SubscribeToService()<br \/>\n{<br \/>\nGuid deviceAppInstanceId = GetSettingValue(DeviceAppIdKey, false);<br \/>\nContext.Load(Context.Web, w =&gt; w.Title, w =&gt; w.Description);<br \/>\nPushNotificationSubscriber pushSubscriber =<br \/>\nContext.Web.RegisterPushNotificationSubscriber(deviceAppInstanceId, httpChannel.ChannelUri.AbsoluteUri);<br \/>\nContext.Load(pushSubscriber);<br \/>\nContext.ExecuteQueryAsync((object sender, ClientRequestSucceededEventArgs args) );<br \/>\n{<br \/>\nSetRegistrationStatus(true);<br \/>\nif (!httpChannel.IsShellTileBound) {httpChannel.BindToShellTile();}<br \/>\nif (!httpChannel.IsShellToastBound) {httpChannel.BindToShellToast();}<br \/>\nShowMessage(string.Format(\u00abSubscripcion Correcta registrada: {0}\u00bb, pushSubscriber.User.LoginName),\u00bbRealizado\u00bb);<br \/>\n},<br \/>\n(object sender, ClientRequestFailedEventArgs args) =&gt;<br \/>\n{<br \/>\nShowMessage(args.Exception.Message, \u00abError Subscribiendo\u00bb);<br \/>\n});<br \/>\n}<\/p><\/blockquote>\n<p>Pero el problema es que la direcci\u00f3n URI puede cambiar, \u00bfy entonces que hacemos cuando se modifica un direcci\u00f3n? Pues bien primero llamaremos a la siguiente funci\u00f3n que lo que hace es actualizar la Direcci\u00f3n URI en SharePoint, en caso de que no exista no hace nada. Posteriormente, si procede, llamamos a la funci\u00f3n de arriba.<\/p>\n<blockquote><p>\/\/\/ Actualizo el Canar Uri en el Servidor<\/p>\n<p>private static void UpdateChannelUriOnServer()<br \/>\n{<br \/>\nGuid deviceAppInstanceId = GetSettingValue(DeviceAppIdKey, false);<br \/>\nContext.Load(Context.Web, w =&gt; w.Title, w =&gt; w.Description);<br \/>\nPushNotificationSubscriber subscriber = Context.Web.GetPushNotificationSubscriber(deviceAppInstanceId);<br \/>\nContext.Load(subscriber);<br \/>\nContext.ExecuteQueryAsync(<br \/>\n(object sender1, ClientRequestSucceededEventArgs args1) =&gt;<br \/>\n{<br \/>\nsubscriber.ServiceToken = httpChannel.ChannelUri.AbsolutePath;<br \/>\nsubscriber.Update();<br \/>\nContext.ExecuteQueryAsync(<br \/>\n(object sender2, ClientRequestSucceededEventArgs args2) =&gt;<br \/>\n{<br \/>\nShowMessage(\u00abChannel URI updated on server.\u00bb, \u00abSuccess\u00bb);<br \/>\n},<br \/>\n(object sender2, ClientRequestFailedEventArgs args2<br \/>\n) =&gt;<br \/>\n{<br \/>\nShowMessage(args2.Exception.Message, \u00abError Upating Channel URI\u00bb);<br \/>\n});<br \/>\n},<br \/>\n(object sender1, ClientRequestFailedEventArgs args1) =&gt;<br \/>\n{<br \/>\n});<br \/>\n}<br \/>\n\/\/\/<br \/>\n\/\/\/ En el momento que recibimos una notificacion Toast<br \/>\n\/\/\/<br \/>\nstatic void httpChannel_ShellToastNotificationReceived(object sender, NotificationEventArgs e)<br \/>\n{<br \/>\nif (e.Collection != null)<br \/>\n{<br \/>\nDictionary&lt;string, string&gt; collection = (Dictionary&lt;string, string&gt;)e.Collection;<br \/>\nShellToast toast = new ShellToast();<br \/>\ntoast.Title = collection[\u00abwp:Text1\u00bb];<br \/>\ntoast.Content = collection[\u00abwp:Text2\u00bb];<br \/>\nShowMessage(string.Format(\u00abTitulo: {0}\\r\\nAutor: {1}\u00bb, toast.Title, toast.Content), \u00abToast Notification\u00bb);<br \/>\n}<br \/>\n}<\/p><\/blockquote>\n<p>Para almacenar el GUID de la aplicaci\u00f3n, y si hemos registrado o no la aplicaci\u00f3n, hemos utilizado el almacenamiento local que nos ofrece Windows Phone ya que nos proporciona un grado de seguridad alt\u00edsimo, puesto que ninguna otra aplicaci\u00f3n puede acceder a zonas de memoria usadas por el sistema o por otras aplicaciones.<\/p>\n<p>El siguiente paso que le a\u00f1adiremos a esta biblioteca es crearnos el ViewModel que vamos a realizar en primer lugar nos creamos una clase ItemArticleViewModel que va a contener las propiedades que queremos mostrar en nuestro caso \u00abTitulo\u00bb del articulo y \u00abAutor\u00bb la clase quedar\u00eda de la siguiente forma (hay que a\u00f1adirle la parte de notificaci\u00f3n para que se modifiquen los valores en los bindings de la capa de vista); el resto es como si fuera una clase normal:<\/p>\n<blockquote><p>public class ItemArticleViewModel : INotifyPropertyChanged<\/p>\n<p>{<br \/>\npublic string Title { get; set; }<br \/>\npublic string Author { get; set; }<br \/>\npublic event PropertyChangedEventHandler PropertyChanged;<br \/>\nprivate void NotifyPropertyChanged(String propertyName)<br \/>\n{<br \/>\nPropertyChangedEventHandler handler = PropertyChanged;<br \/>\nif (null != handler)<br \/>\n{<br \/>\nhandler(this, new PropertyChangedEventArgs(propertyName));<br \/>\n}<br \/>\n}<br \/>\n}<\/p><\/blockquote>\n<p>Una vez creado la definici\u00f3n del modelo nos creamos la capa de donde se obtienen los datos y ah\u00ed es donde entra en juego SharePoint. Antes de empezar a ver c\u00f3mo hacerlos. Hay que saber las opciones que tenemos para obtener los datos de un SharePoint:<br \/>\n1.A trav\u00e9s del SDK de SharePoint para Windows Phone 7.5 (que es compatible tambi\u00e9n para la versi\u00f3n 8).<br \/>\n2.Utilizando el API REST de SharePoint.<\/p>\n<p>En este ejemplo vamos a realizarlo a trav\u00e9s la opci\u00f3n 1, entonces nos creamos una clase MainArticleViewModel que va a tener una esctructura como la siguiente:<\/p>\n<blockquote><p>public class MainArticleViewModel : INotifyPropertyChanged<br \/>\n{<br \/>\npublic MainArticleViewModel()<br \/>\n{<br \/>\nthis.Items = new ObservableCollection();<br \/>\n}<br \/>\n\/\/\/<br \/>\n\/\/\/ Colecci\u00f3n para objetos ItemViewModel.<br \/>\n\/\/\/<br \/>\npublic ObservableCollection Items { get; private set; }<br \/>\npublic string SampleProperty<br \/>\n{<br \/>\nget;<br \/>\nset;<br \/>\n}<br \/>\npublic bool IsDataLoaded<br \/>\n{<br \/>\nget;<br \/>\nprivate set;<br \/>\n}<br \/>\npublic event PropertyChangedEventHandler PropertyChanged;<br \/>\nprivate void NotifyPropertyChanged(String propertyName)<br \/>\n{<br \/>\nPropertyChangedEventHandler handler = PropertyChanged;<br \/>\nif (null != handler)<br \/>\n{<br \/>\nhandler(this, new PropertyChangedEventArgs(propertyName));<br \/>\n}<br \/>\n}<\/p><\/blockquote>\n<p>Y para completar esta clase le falta la funci\u00f3n LoadData( ). En esta funci\u00f3n es donde vamos a realizar la llamada a SharePoint, y se hace de una forma muy similar a la que se utiliza en las llamadas Cliente en 2010 y convertiremos los elementos de la lista en objetos de nuestro ViewModel. La funci\u00f3n quedar\u00eda as\u00ed:<\/p>\n<blockquote><p>public void LoadData()<br \/>\n{<br \/>\nClientContext context = new ClientContext(\u00abhttp:\/\/compartimoos\u00bb);<br \/>\ncontext.Credentials = new Authenticator();<br \/>\nList articlesList = context.Web.Lists.GetByTitle(\u00abArticulos\u00bb);<br \/>\nCamlQuery query = new CamlQuery();<br \/>\nquery.ViewXml = @\u00bb<br \/>\n&#8216;Numero13&#8217;<br \/>\n\u00ab;<br \/>\nListItemCollection itemsList = articlesList.GetItems(query);<br \/>\ncontext.Load(itemsList);<br \/>\ncontext.ExecuteQuery();<br \/>\nif (itemsList.Count &gt; 0)<br \/>\n{<br \/>\nforeach (ListItem item in itemsList)<br \/>\n{<br \/>\nItemArticleViewModel itemArticle= new ItemArticleViewModel();<br \/>\nitemArticle.Author=item[\u00abAuthor\u00bb].ToString();<br \/>\nitemArticle.Title=item[\u00abTitle\u00bb].ToString();<br \/>\nthis.Items.Add(itemArticle);<br \/>\n}<br \/>\n}<\/p><\/blockquote>\n<p><strong>Creando las aplicaciones<\/strong><br \/>\nUna vez tenemos la clase con toda la funcionalidad disponible vamos a crear la aplicaci\u00f3n de Windows Phone. Lo primero que tenemos que hacer es agregar la referencia a la librer\u00eda que hab\u00edamos creado anteriormente.<\/p>\n<p>A continuaci\u00f3n nos vamos a la p\u00e1gina MainPage.xaml y a la p\u00e1gina le a\u00f1adimos un objeto de tipo \u00abPivots \u00bb y en los \u00abBindings\u00bb tendremos que poner los nombres de los campos de nuestro modelo en nuestro caso Article y Phone<\/p>\n<p><!--Elemento Pivot uno--><\/p>\n<p><!--Lista de l\u00edneas dobles con ajuste de texto--><\/p>\n<p>El siguiente paso es irnos a al APP.CS y a\u00f1adir este propiedad:<\/p>\n<blockquote><p>public static MainArticleViewModel ViewModel<br \/>\n{<br \/>\nget<br \/>\n{<br \/>\n\/\/ Retrasar la creaci\u00f3n del modelo de vista hasta que sea necesario<br \/>\nif (viewModel == null)<br \/>\nviewModel = new MainArticleViewModel();<br \/>\nreturn viewModel;<br \/>\n}<br \/>\n}<\/p><\/blockquote>\n<p>Y dentro del evento cuando se active a\u00f1adir esta llamada:<\/p>\n<blockquote><p>if (!App.ViewModel.IsDataLoaded)<br \/>\n{<br \/>\nApp.ViewModel.LoadData();<br \/>\n}<\/p><\/blockquote>\n<p>Ahora nos dirigimos a la MainPage.cs y aqu\u00ed tendremos que establecer el contexto de esta pantalla que con el View Model quedar\u00eda de la siguiente forma:<\/p>\n<blockquote><p>\/\/ Constructor<br \/>\npublic MainPage()<br \/>\n{<br \/>\nInitializeComponent();<br \/>\n\/\/ Establecer el contexto de datos del control ListBox control en los datos de ejemplo<br \/>\nDataContext = App.ViewModel;<br \/>\nthis.Loaded += new RoutedEventHandler(MainPage_Loaded);<br \/>\n}<br \/>\n\/\/ Cargar datos para los elementos ViewModel<br \/>\nprivate void MainPage_Loaded(object sender, RoutedEventArgs e)<br \/>\n{<br \/>\nif (!App.ViewModel.IsDataLoaded)<br \/>\n{<br \/>\nApp.ViewModel.LoadData();<br \/>\n}<br \/>\n}<\/p><\/blockquote>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignleft\" alt=\"\" src=\"http:\/\/www.compartimoss.com\/PublishingImages\/Numero15\/Notificaciones-Aplicaciones-Windows-Phone-SharePoint\/image2.png\" width=\"373\" height=\"700\" \/>Una vez realizado esto si ejecutamos nuestra aplicaci\u00f3n se visualizar\u00e1 la siguiente pantalla:<\/p>\n<p>Ahora lo que falta es a\u00f1adir que esta aplicaci\u00f3n pueda recibir notificaciones PUSH dentro de nuestra aplicaci\u00f3n, para ello en el main llamamos al m\u00e9todo OpenNotificacion de la clase Notificacion. Como hemos visto anteriormente, lo que hace es lo siguiente:<br \/>\n\u2022Crear el Canal de comunicaciones.<br \/>\n\u2022En el momento que tenemos una direcci\u00f3n URI valida subscribimos la aplicaci\u00f3n a SharePoint.<br \/>\n\u2022Cuando recibimos una notificaci\u00f3n la mostramos en la aplicaci\u00f3n (en caso de que tengamos la aplicaci\u00f3n cerrada se visualizara la notificaci\u00f3n en la parte superior de la pantalla como en las siguientes im\u00e1genes):<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignleft\" alt=\"\" src=\"http:\/\/www.compartimoss.com\/PublishingImages\/Numero15\/Notificaciones-Aplicaciones-Windows-Phone-SharePoint\/image3.png\" width=\"381\" height=\"714\" \/><img decoding=\"async\" alt=\"\" src=\"http:\/\/www.compartimoss.com\/PublishingImages\/Numero15\/Notificaciones-Aplicaciones-Windows-Phone-SharePoint\/image4.png\" \/><br \/>\nEsto solo es un ejemplo de como se pueden enviar notificaciones desde una lista de Sharepoint a aplicaciones Windows Phone. Para una aplicaci\u00f3n \u00abprofesional\u00bb tendriamos que crear una pantalla de configuraci\u00f3n de estas notificaciones para que el usuario tenga la potestad de elegir si quiere o no quiere recibir notificaciones. Tambien quedaria pendiente la forma en la que se deja de recibir notificiaciones (hay un metodo unsubscriber tambien) . Otra cosa a tener en cuenta es que con aplicaciones de Windows Phone, no hay notificaci\u00f3n de eventos cuando una aplicaci\u00f3n se desinstala por lo que en tendremos que implementar alguna funci\u00f3n que nos haga saber si todos los dispositivos m\u00f3viles que tenemos registrados estan \u00abactivos\u00bb. Pero esto ya se deja a la intriga del lector.<\/p>\n<p><strong>\u00bfC\u00f3mo implementamos la aplicaci\u00f3n si estamos trabajando con un SharePoint 2010?<\/strong><\/p>\n<p>El desarrollo es al 90% igual para un sistema que para el otro, la \u00fanica diferencia es que en 2010 no tenemos el m\u00e9todo de subscribir al dispositivo a una lista y por lo tanto lo tendremos que hacer de forma manual. Viendo la soluci\u00f3n que hab\u00eda planteado con anterioridad esta claro lo que tenemos que hacer. Hay que insertar un elemento en una lista de SharePoint y esto utilizando las librer\u00edas clientes de SharePoint es muy sencillo de hacer.<\/p>\n<p>Lo que va a realizar la siguiente funci\u00f3n es: en primer lugar consultamos si tenemos este elemento en la lista y en caso que afirmativo actualizamos la direcci\u00f3n URI y sino existe insertamos el elemento en la lista.<\/p>\n<blockquote><p>private void SubscribeToService(string Guid, string ChannelUri)<br \/>\n{<br \/>\nClientContext context = new ClientContext(\u00abhttp:\/\/compartimoos\u00bb);<br \/>\nif (!existGuid(Guid, context))<br \/>\n{<br \/>\nInsertData(Guid, ChannelUri, context);<br \/>\n}<br \/>\nelse<br \/>\n{<br \/>\nUpadteData(Guid, ChannelUri, context);<br \/>\n}<br \/>\n}<\/p>\n<p>private bool existGuid(string Guid, ClientContext context)<br \/>\n{<br \/>\nbool res = false;<br \/>\nList mensajesList = context.Web.Lists.GetByTitle(\u00abSubscriptores\u00bb);<br \/>\nCamlQuery query = new CamlQuery();<br \/>\nquery.ViewXml = string.Format(@\u00bb<br \/>\n{0}<br \/>\n\u00ab,Guid);<br \/>\nListItemCollection itemsList = mensajesList.GetItems(query);<br \/>\ncontext.Load(itemsList);<br \/>\ncontext.ExecuteQuery();<br \/>\nif (itemsList.Count &gt; 0) { res = true; }<br \/>\nreturn res;<br \/>\n}<\/p>\n<p>private static void InsertData(string Guid, string ChannelUri, ClientContext context)<br \/>\n{<br \/>\nList mensajesList = context.Web.Lists.GetByTitle(\u00abSubscriptores\u00bb);<br \/>\nListItemCreationInformation itemCreateInfo = new ListItemCreationInformation();<br \/>\nListItem oListItem = mensajesList.AddItem(itemCreateInfo);<br \/>\noListItem[\u00abGuid\u00bb] = Guid;<br \/>\noListItem[\u00abChannelUri\u00bb] = ChannelUri;<br \/>\noListItem.Update();<br \/>\ncontext.ExecuteQuery();<br \/>\n}<\/p><\/blockquote>\n<p><strong>Conclusiones<\/strong><br \/>\nEn este articulos hemos visto lo sencillo que es crear Apps para Windows Phone tanto en la versi\u00f3n 7.5 y versi\u00f3n 8 con el origen de datos almacenados en SharePoint tanto en la versi\u00f3n 2010 como en la 2013. Ademas se le puede a\u00f1adir complementos para que la interacci\u00f3n APP con SharePoint este presente y de esta forma el usuario pueda estar al tanto de lo que se realiza. Con lo que es un muy buen punto para incluir dentro de nuestros desarrollos profesionales.<\/p>\n<p><strong>Referencias<\/strong><br \/>\n\u2022Windows Phone 7.5 Desarrollo de aplicaciones en Silverlight- Josu\u00e9 Yeray Julian.<br \/>\n\u2022Notificaciones de empuje para el desarrollo de Windows Phone http:\/\/blogs.ligasilverlight.com<br \/>\n\u2022Push Notifications with SharePoint 2013-based Windows Phone apps http:\/\/www.deviantpoint.com\/post\/2012\/07\/27\/Push-Notifications-with-SharePoint-2013-based-Windows-Phone-apps.aspx<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content --><span class=\"et_bloom_bottom_trigger\"><\/span>","protected":false},"excerpt":{"rendered":"<p>La pasada semana salio publicada el n\u00famero 15 de la revista digital Compartimoss, es la primera revista en habla hispana que se habla sobre SharePoint y en la que he tenido el placer de publicar un art\u00edculo, el cual, os &hellip; <a href=\"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/compartimoss-notificaciones-a-aplicaciones-windows-phone-desde-sharepoint-parte-ii\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":8,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5,11,39],"tags":[41,151,40],"class_list":["post-193","post","type-post","status-publish","format-standard","hentry","category-desarrollo","category-sharepoint-2013","category-windows-phone","tag-notificaciones-push","tag-sharepoint-2013","tag-windows-phone-2"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v18.2.1 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>[CompartiMOSS] Notificaciones a Aplicaciones Windows Phone desde SharePoint Parte II - Desarrollando sobre SharePoint<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/compartimoss-notificaciones-a-aplicaciones-windows-phone-desde-sharepoint-parte-ii\/\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:title\" content=\"[CompartiMOSS] Notificaciones a Aplicaciones Windows Phone desde SharePoint Parte II - Desarrollando sobre SharePoint\" \/>\n<meta name=\"twitter:description\" content=\"La pasada semana salio publicada el n\u00famero 15 de la revista digital Compartimoss, es la primera revista en habla hispana que se habla sobre SharePoint y en la que he tenido el placer de publicar un art\u00edculo, el cual, os &hellip; Continue reading &rarr;\" \/>\n<meta name=\"twitter:image\" content=\"http:\/\/www.compartimoss.com\/PublishingImages\/Numero15\/Notificaciones-Aplicaciones-Windows-Phone-SharePoint\/image1.png\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Adri\u00e1n D\u00edaz\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/compartimoss-notificaciones-a-aplicaciones-windows-phone-desde-sharepoint-parte-ii\\\/#article\",\"isPartOf\":{\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/compartimoss-notificaciones-a-aplicaciones-windows-phone-desde-sharepoint-parte-ii\\\/\"},\"author\":{\"name\":\"Adri\u00e1n D\u00edaz\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/#\\\/schema\\\/person\\\/c9bfaede1bfba9564bb7f500788782bb\"},\"headline\":\"[CompartiMOSS] Notificaciones a Aplicaciones Windows Phone desde SharePoint Parte II\",\"datePublished\":\"2013-04-02T09:00:09+00:00\",\"dateModified\":\"2013-07-16T09:08:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/compartimoss-notificaciones-a-aplicaciones-windows-phone-desde-sharepoint-parte-ii\\\/\"},\"wordCount\":2357,\"commentCount\":0,\"image\":{\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/compartimoss-notificaciones-a-aplicaciones-windows-phone-desde-sharepoint-parte-ii\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/www.compartimoss.com\\\/PublishingImages\\\/Numero15\\\/Notificaciones-Aplicaciones-Windows-Phone-SharePoint\\\/image1.png\",\"keywords\":[\"notificaciones push\",\"sharepoint 2013\",\"windows phone\"],\"articleSection\":[\"desarrollo\",\"sharepoint 2013\",\"Windows phone\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/compartimoss-notificaciones-a-aplicaciones-windows-phone-desde-sharepoint-parte-ii\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/compartimoss-notificaciones-a-aplicaciones-windows-phone-desde-sharepoint-parte-ii\\\/\",\"url\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/compartimoss-notificaciones-a-aplicaciones-windows-phone-desde-sharepoint-parte-ii\\\/\",\"name\":\"[CompartiMOSS] Notificaciones a Aplicaciones Windows Phone desde SharePoint Parte II - Desarrollando sobre SharePoint\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/compartimoss-notificaciones-a-aplicaciones-windows-phone-desde-sharepoint-parte-ii\\\/#primaryimage\"},\"image\":{\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/compartimoss-notificaciones-a-aplicaciones-windows-phone-desde-sharepoint-parte-ii\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/www.compartimoss.com\\\/PublishingImages\\\/Numero15\\\/Notificaciones-Aplicaciones-Windows-Phone-SharePoint\\\/image1.png\",\"datePublished\":\"2013-04-02T09:00:09+00:00\",\"dateModified\":\"2013-07-16T09:08:00+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/#\\\/schema\\\/person\\\/c9bfaede1bfba9564bb7f500788782bb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/compartimoss-notificaciones-a-aplicaciones-windows-phone-desde-sharepoint-parte-ii\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/compartimoss-notificaciones-a-aplicaciones-windows-phone-desde-sharepoint-parte-ii\\\/#primaryimage\",\"url\":\"http:\\\/\\\/www.compartimoss.com\\\/PublishingImages\\\/Numero15\\\/Notificaciones-Aplicaciones-Windows-Phone-SharePoint\\\/image1.png\",\"contentUrl\":\"http:\\\/\\\/www.compartimoss.com\\\/PublishingImages\\\/Numero15\\\/Notificaciones-Aplicaciones-Windows-Phone-SharePoint\\\/image1.png\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/#website\",\"url\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/\",\"name\":\"Desarrollando sobre SharePoint\",\"description\":\"Arquitectura, buenas pr\u00e1cticas y desarrollo sobre la nueva herramienta de Microsoft SharePoint 2016\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/#\\\/schema\\\/person\\\/c9bfaede1bfba9564bb7f500788782bb\",\"name\":\"Adri\u00e1n D\u00edaz\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/fe10b9eaf8ce4565ec75fba5a0d121c16186696e515cad2bedd42f6cf54e2007?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/fe10b9eaf8ce4565ec75fba5a0d121c16186696e515cad2bedd42f6cf54e2007?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/fe10b9eaf8ce4565ec75fba5a0d121c16186696e515cad2bedd42f6cf54e2007?s=96&d=mm&r=g\",\"caption\":\"Adri\u00e1n D\u00edaz\"},\"description\":\"Adri\u00e1n D\u00edaz es Ingeniero Inform\u00e1tico por la Universidad Polit\u00e9cnica de Valencia. Es MVP de Microsoft en la categor\u00eda Office Development desde 2014, MCPD de SharePoint 2010, Microsoft Active Profesional y Microsoft Comunity Contribuitor 2012. Cofundador del grupo de usuarios de SharePoint de Levante LevaPoint. Lleva desarrollando con tecnolog\u00edas Microsoft m\u00e1s de 10 a\u00f1os y desde hace 3 a\u00f1os est\u00e1 centrado en el desarrollo sobre SharePoint. Actualmente es Software &amp; Cloud Architect Lead en ENCAMINA.\",\"url\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/author\\\/desarrollandosobresharepoint\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"[CompartiMOSS] Notificaciones a Aplicaciones Windows Phone desde SharePoint Parte II - Desarrollando sobre SharePoint","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/compartimoss-notificaciones-a-aplicaciones-windows-phone-desde-sharepoint-parte-ii\/","twitter_card":"summary_large_image","twitter_title":"[CompartiMOSS] Notificaciones a Aplicaciones Windows Phone desde SharePoint Parte II - Desarrollando sobre SharePoint","twitter_description":"La pasada semana salio publicada el n\u00famero 15 de la revista digital Compartimoss, es la primera revista en habla hispana que se habla sobre SharePoint y en la que he tenido el placer de publicar un art\u00edculo, el cual, os &hellip; Continue reading &rarr;","twitter_image":"http:\/\/www.compartimoss.com\/PublishingImages\/Numero15\/Notificaciones-Aplicaciones-Windows-Phone-SharePoint\/image1.png","twitter_misc":{"Escrito por":"Adri\u00e1n D\u00edaz","Tiempo de lectura":"12 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/compartimoss-notificaciones-a-aplicaciones-windows-phone-desde-sharepoint-parte-ii\/#article","isPartOf":{"@id":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/compartimoss-notificaciones-a-aplicaciones-windows-phone-desde-sharepoint-parte-ii\/"},"author":{"name":"Adri\u00e1n D\u00edaz","@id":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/#\/schema\/person\/c9bfaede1bfba9564bb7f500788782bb"},"headline":"[CompartiMOSS] Notificaciones a Aplicaciones Windows Phone desde SharePoint Parte II","datePublished":"2013-04-02T09:00:09+00:00","dateModified":"2013-07-16T09:08:00+00:00","mainEntityOfPage":{"@id":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/compartimoss-notificaciones-a-aplicaciones-windows-phone-desde-sharepoint-parte-ii\/"},"wordCount":2357,"commentCount":0,"image":{"@id":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/compartimoss-notificaciones-a-aplicaciones-windows-phone-desde-sharepoint-parte-ii\/#primaryimage"},"thumbnailUrl":"http:\/\/www.compartimoss.com\/PublishingImages\/Numero15\/Notificaciones-Aplicaciones-Windows-Phone-SharePoint\/image1.png","keywords":["notificaciones push","sharepoint 2013","windows phone"],"articleSection":["desarrollo","sharepoint 2013","Windows phone"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/compartimoss-notificaciones-a-aplicaciones-windows-phone-desde-sharepoint-parte-ii\/#respond"]}]},{"@type":"WebPage","@id":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/compartimoss-notificaciones-a-aplicaciones-windows-phone-desde-sharepoint-parte-ii\/","url":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/compartimoss-notificaciones-a-aplicaciones-windows-phone-desde-sharepoint-parte-ii\/","name":"[CompartiMOSS] Notificaciones a Aplicaciones Windows Phone desde SharePoint Parte II - Desarrollando sobre SharePoint","isPartOf":{"@id":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/#website"},"primaryImageOfPage":{"@id":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/compartimoss-notificaciones-a-aplicaciones-windows-phone-desde-sharepoint-parte-ii\/#primaryimage"},"image":{"@id":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/compartimoss-notificaciones-a-aplicaciones-windows-phone-desde-sharepoint-parte-ii\/#primaryimage"},"thumbnailUrl":"http:\/\/www.compartimoss.com\/PublishingImages\/Numero15\/Notificaciones-Aplicaciones-Windows-Phone-SharePoint\/image1.png","datePublished":"2013-04-02T09:00:09+00:00","dateModified":"2013-07-16T09:08:00+00:00","author":{"@id":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/#\/schema\/person\/c9bfaede1bfba9564bb7f500788782bb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/compartimoss-notificaciones-a-aplicaciones-windows-phone-desde-sharepoint-parte-ii\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/compartimoss-notificaciones-a-aplicaciones-windows-phone-desde-sharepoint-parte-ii\/#primaryimage","url":"http:\/\/www.compartimoss.com\/PublishingImages\/Numero15\/Notificaciones-Aplicaciones-Windows-Phone-SharePoint\/image1.png","contentUrl":"http:\/\/www.compartimoss.com\/PublishingImages\/Numero15\/Notificaciones-Aplicaciones-Windows-Phone-SharePoint\/image1.png"},{"@type":"WebSite","@id":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/#website","url":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/","name":"Desarrollando sobre SharePoint","description":"Arquitectura, buenas pr\u00e1cticas y desarrollo sobre la nueva herramienta de Microsoft SharePoint 2016","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Person","@id":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/#\/schema\/person\/c9bfaede1bfba9564bb7f500788782bb","name":"Adri\u00e1n D\u00edaz","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/fe10b9eaf8ce4565ec75fba5a0d121c16186696e515cad2bedd42f6cf54e2007?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/fe10b9eaf8ce4565ec75fba5a0d121c16186696e515cad2bedd42f6cf54e2007?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/fe10b9eaf8ce4565ec75fba5a0d121c16186696e515cad2bedd42f6cf54e2007?s=96&d=mm&r=g","caption":"Adri\u00e1n D\u00edaz"},"description":"Adri\u00e1n D\u00edaz es Ingeniero Inform\u00e1tico por la Universidad Polit\u00e9cnica de Valencia. Es MVP de Microsoft en la categor\u00eda Office Development desde 2014, MCPD de SharePoint 2010, Microsoft Active Profesional y Microsoft Comunity Contribuitor 2012. Cofundador del grupo de usuarios de SharePoint de Levante LevaPoint. Lleva desarrollando con tecnolog\u00edas Microsoft m\u00e1s de 10 a\u00f1os y desde hace 3 a\u00f1os est\u00e1 centrado en el desarrollo sobre SharePoint. Actualmente es Software &amp; Cloud Architect Lead en ENCAMINA.","url":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/author\/desarrollandosobresharepoint\/"}]}},"_links":{"self":[{"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/posts\/193","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/users\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/comments?post=193"}],"version-history":[{"count":0,"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/posts\/193\/revisions"}],"wp:attachment":[{"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/media?parent=193"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/categories?post=193"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/tags?post=193"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}