Categorías: sharepoint 2013 Yammer

[SharePoint 2013] Extendiendo características sociales Parte II

Continuando con el anterior post sobre características sociales vamos a profundizar sobre todas las opciones que trae la API «Social» de SharePoint y como incluirla en nuestros desarrollos. De esta forma, donde SharePoint no tenga implementadas las características que ofrecen diversas redes sociales Twitter, Facebook o Yammer, sabremos implementar dicha solución para que a los usuarios dentro de una empresa no noten la diferencia de si están en Facebook o bien en SharePoint 🙂 Además no olvidemos que el objetivo de SharePoint NO es competir con estas redes sociales, sino sacarle partido a estas características con la finalidad de dar un mayor uso de la plataforma.

En el post de hoy voy a contar diversos «tips» para facilitar un poco la vida en la primera toma de contacto con la API Social de SharePoint

Si analizamos las opciones que nos da, vemos una gran cantidad de opciones como las siguientes:

  • Obtener información sobre el usuario actual/especifico
  • Obtener la actividad del usuario actual/especifico
  • Obtener la alimentación de la actividad por parte del usuario actual/especifico y por las personas y el contenido que el usuario actual/especifico está siguiendo
  • Obtener los Post que al usuario actual/especifico le gustan
  • Obtener los Post en los que mencionan al usuario actual
  • Obtener las Menciones que el usuario actual no ha leído
  • Crear/modificar/eliminar/Contestar/ gustar-No gustar/seguir-dejar de seguir un Post de un feed de un determinado usuario
  • Etc…

Es decir,  SharePoint incluye todos los ingredientes de base que tiene una Red Social, y lo mejor de todo es que los podemos utilizar para nuestro beneficio. Pero como no es oro todo lo que reluce, no todo es realizar llamadas a la API Rest.

Tip 1
¿Como hacemos para enviar una mención al publicar un post? La primera idea que se nos viene a la cabeza es incluirla en el texto que voy a enviar si añado la @ y pongo el nombre de usuario, con eso funciona fijo. Si lo comprobáis os daréis cuenta de que SharePoint no es tan listo. Bueno, en parte si que tiene esa inteligencia, pero para ello cuando nosotros enviemos un post en el que vamos a realizar una mención, tendremos que realizar una modificación en la llamada Rest e indicarle que dentro de los valores que se envían se realiza una mención, tal y como se muestra en nuestro código:

 Name = followers[id];
        Name = remplazar(Name, '#', '%23');
        valor = "@{0} " + valor;
        var feedManagerEndpoint = appweburl + "/_api/social.feed";
        $.ajax({
            url: feedManagerEndpoint + "/actor(item=@v)/Feed/Post?@v='" + Name + "'",
            type: "POST",
            data: JSON.stringify({
                'restCreationData': {
                    '__metadata': {
                        'type': 'SP.Social.SocialRestPostCreationData'
                    },
                    'ID': null,
                    'creationData': {
                        '__metadata': {
                            'type': 'SP.Social.SocialPostCreationData'
                        },
                        'ContentItems': {
                            'results': [
                                {
                                    '__metadata': {
                                        'type': 'SP.Social.SocialDataItem'
                                    },
                                    'AccountName': followers[id],
                                    'ItemType': 0,
                                    'Uri': null
                                }
                            ]
                        },
                        'ContentText': valor,
                        'UpdateStatusText': false
                    }
                }
            }),
            headers: {
                "accept": "application/json;odata=verbose",
                "content-type": "application/json;odata=verbose",
                "X-RequestDigest": digest
            },
            success: function () { },
            error: function (xhr, ajaxOptions, thrownError) {
                alert("POST error:\n" + xhr.status + "\n" + thrownError);
            }
        });

Tip 2
Otra de las cosas curiosas que nos encontramos cuando empezamos a jugar con la API Rest y es que por defecto cuando nosotros solicitamos la información de un determinado POST, si este tiene muchas respuestas solo nos trae dos. ¿Porqué?

Este funcionamiento está enfocado a la nueva forma de desarrollar en la que solo pedimos lo que vamos a utilizar y cuanta menos información se envie, pues mucho mejor. En casi todas las redes sociales esto funciona como si fuera un estándar: en las conversaciones con más de 3 respuestas se agrupan y solo se muestran las dos últimas respuestas:

Si ya queremos profundizar sobre el contenido de la conversación, tenemos que pulsar encima del texto para leer la información completa. Para ello, en la API REST tenemos dos opciones, por un lado, ésta consulta en la que solo se muestran dos respuestas como mucho:

   var feedManagerEndpoint = appweburl + "/_api/social.feed";
            $.ajax({
                url: feedManagerEndpoint + "/actor(item=@v)/Feed/Post?@v='" + Name + "'",
                type: "POST",
                data: JSON.stringify({
                    'restCreationData': {
                        '__metadata': {
                            'type': 'SP.Social.SocialRestPostCreationData'
                        },
                        'ID': null,
                        'creationData': {
                            '__metadata': {
                                'type': 'SP.Social.SocialPostCreationData'
                            },
                            'ContentText': valor,
                            'UpdateStatusText': false
                        }
                    }
                }),
                headers: {
                    "accept": "application/json;odata=verbose",
                    "content-type": "application/json;odata=verbose",
                    "X-RequestDigest": $("#__REQUESTDIGEST").val()
                },
                success: getMyFeed(selectFollow),
                error: function (xhr, ajaxOptions, thrownError) {
                    alert("POST error:\n" + xhr.status + "\n" + thrownError);
                }
            });

Ahora bien, si lo que queremos es obtener todo el contenido de un determinado post podemos obtenerlo realizando la siguiente acción:

//http://<mySiteUri>/_api/social.feed/Post
    sel = id;
    var feedManagerEndpoint = appweburl + "/_api/social.feed";
    $.ajax({
        url: feedManagerEndpoint + "/Post",
        type: "POST",
        data: JSON.stringify({
                'ID': guidPost[id]
            }
        ),
        headers: {
            "accept": "application/json;odata=verbose",
            "content-type": "application/json;odata=verbose",
            "X-RequestDigest": $("#__REQUESTDIGEST").val()
        },
        success: feedPost,
        error: function (xhr, ajaxOptions, thrownError) {
            alert("POST error:\n" + xhr.status + "\n" + thrownError);
        }
    });

Como podemos ver, la única diferencia entre uno y otro es que le enviamos el ID del Post que queremos ver y en otro obtenemos toda la información de todos los post.

Conclusión

Tras estos dos artículos hemos comprobado que los aspectos sociales que hay en SharePoint son muy útiles para los desarrolladores y que también le podemos sacar mucho valor añadido a lo que ya viene por defecto en SharePoint.

En los próximos días espero que se publique una aplicación en la Office Store llamada FollowTalk en la que podremos ver todas estas características en funcionamiento y que posteriormente la iremos completando con muchas más utilidades.

Referencia
Msdn: http://msdn.microsoft.com/en-us/library/dn155789.aspx

Compartir
Publicado por
Adrián Díaz

Este sitio web utiliza cookies para que tengas la mejor experiencia de usuario. Si continuas navegando, estás dando tu consentimiento para aceptar las cookies y también nuestra política de cookies (esperemos que no te empaches con tanta cookie 😊)