Compartir a través de


Crear y borrar mensajes y recuperar la alimentación social usando el modelo de objetos de JavaScript en SharePoint

Aprenda a crear y borrar entradas de micro blog y a recuperar los feeds sociales usando el modelo de objetos JavaScript de SharePoint.

¿Qué son las fuentes sociales en SharePoint?

En SharePoint, una fuente social es una colección de subprocesos que representan conversaciones, publicaciones de microblog únicas o notificaciones. Los subprocesos contienen una entrada raíz y una colección de entradas de respuesta. En el modelo de objetos de JavaScript, las fuentes se representan mediante objetos SocialFeed , los subprocesos se representan mediante objetos SocialThread y los objetos post y replies se representan mediante objetos SocialPost . Para realizar tareas relacionadas con la fuente de núcleo, use el objeto SocialFeedManager . En este artículo, le mostraremos cómo crear una página de aplicación que usa el modelo de objetos de JavaScript para trabajar con fuentes sociales.

Para obtener más información sobre cómo trabajar con SocialFeedManager o para obtener información sobre el uso de otras API para trabajar con fuentes sociales, vea Trabajar con fuentes sociales en SharePoint.

Requisitos previos para configurar el entorno de desarrollo para trabajar con fuentes sociales en el modelo de objetos de JavaScript de SharePoint

Para crear una página de la aplicación que usa el modelo de objetos de JavaScript para trabajar con fuentes sociales, necesitará:

  • SharePoint con Mi sitio configurado como público, con sitios personales creados para el usuario actual y un usuario de destino, con el usuario actual siguiendo al usuario de destino y con algunas publicaciones escritas por el usuario de destino.

  • Visual Studio 2012 o Visual Studio 2013 con Office Developer Tools para Visual Studio 2013

  • Permisos de acceso de Control total a la aplicación de servicio Perfil de usuario y permisos para implementar una solución de granja para el usuario que inició la sesión

  • Aplicación de permisos suficientes para la cuenta de grupo de servidores de aplicaciones tener acceso a la base de datos de contenido de Mis sitios web

Creación de una página de aplicación que funcione con fuentes sociales mediante el modelo de objetos de JavaScript de SharePoint

  1. Abra Visual Studio y seleccione Archivo, Nuevo, Proyecto.

  2. En el cuadro de diálogo Nuevo proyecto, seleccione .NET Framework 4.5 en la lista desplegable situada en la parte superior del cuadro de diálogo.

  3. En la lista Plantillas , expanda Office SharePoint, elija la categoría Soluciones de SharePoint y, a continuación, elija la plantilla Proyecto de SharePoint .

  4. Asigne al proyecto el nombre SocialFeedJSOM y, a continuación, haga clic en el botón Aceptar.

  5. En el cuadro de diálogo Asistente para la personalización de SharePoint, elija Implementar como solución de granja y luego haga clic en el botón Finalizar.

  6. En el Explorador de soluciones, abra el menú contextual del proyecto SocialFeedJSOM y, a continuación, agregue una carpeta asignada "Diseños" de SharePoint.

  7. En la carpeta Diseños, abra el menú contextual de la carpeta SocialFeedJSOM y luego agregue una página de la aplicación de SharePoint denominadaSocialFeed.aspx.

Nota: Los ejemplos de código de este artículo definen código personalizado en el marcado de página, pero no usan la clase de código subyacente que Visual Studio crea para la página.

  1. Abra el menú contextual de la página SocialFeed.aspx y luego elija Establecer como elemento de inicio.

  2. En el marcado de la página SocialFeed.aspx, defina controles dentro de las etiquetas asp:Content "principales", como se muestra en el código siguiente.

<table width="100%" id="tblPosts"></table><br/>
<button id="btnDelete" type="button"></button><br />
<span id="spanMessage" style="color: #FF0000;"></span>

Nota: Es posible que estos controles no se usen en todos los escenarios. Por ejemplo, el escenario "Publicación de entradas y respuestas" solo usa el control span.

  1. Después de la etiqueta span de cierre, agregue controles SharePoint:ScriptLink, un control SharePoint:FormDigest y etiquetas script, como se muestra en el código siguiente. Las etiquetas SharePoint:ScriptLink hacen referencia a los archivos de la biblioteca de clases que definen el modelo de objetos de JavaScript que puede usar para el desarrollo de Mi sitio social. La etiqueta SharePoint:FormDigest genera una síntesis del mensaje para validación de seguridad cuando lo necesitan las operaciones que actualizan contenido del servidor.
<SharePoint:ScriptLink ID="ScriptLink1" name="SP.js" runat="server" ondemand="false" localizable="false" loadafterui="true" />
<SharePoint:ScriptLink ID="ScriptLink2" name="SP.UserProfiles.js" runat="server" ondemand="false" localizable="false" loadafterui="true" />
<SharePoint:FormDigest id="FormDigest" runat="server"/>
<script type="text/javascript">
    // Replace this comment with the code for your scenario.
</script>
  1. Para agregar la lógica para trabajar con fuentes, reemplace el comentario entre las etiquetas script con el ejemplo de código de uno de los siguientes escenarios:
  1. Para probar la página de la aplicación, en la barra de menús, elija Depurar, Iniciar depuración. Si se le solicita que modifique el archivo web.config, haga clic en el botón Aceptar.

Si la respuesta llama al método de devolución de llamada de error, establezca un punto de interrupción en el método y agregar una inspección en el objeto args o compruebe los registros ULS y el Visor de eventos para obtener más información.

Ejemplo de código: Publicación de publicaciones y respuestas en la fuente social mediante el modelo de objetos de JavaScript de SharePoint

En el ejemplo de código siguiente se publica una entrada y una respuesta. Aquí se muestra cómo:

  • Definir el contenido de la entrada. En este ejemplo incluye un vínculo en la entrada.

  • Publique una entrada en la fuente del usuario actual con el método createPost y pase null como el parámetro targetId.

  • Responda a una entrada con el método createPost y pase el identificador del hilo como el parámetro targetId.

Nota:

[!NOTA] Pegue el código siguiente entre las etiquetas de script que agregó en el procedimiento de crear la página de aplicación .

// Ensure that the SP.UserProfiles.js file is loaded before the custom code runs.
SP.SOD.executeOrDelayUntilScriptLoaded(PublishPost, 'SP.UserProfiles.js');

// Declare global variables.
var clientContext;
var feedManager;
var resultThread;

function PublishPost() {

    // Initialize the current client context and the SocialFeedManager instance.
    clientContext = SP.ClientContext.get_current();
    feedManager = new SP.Social.SocialFeedManager(clientContext);

    // Create a link to include in the post.
    var linkDataItem = new SP.Social.SocialDataItem();
    linkDataItem.set_itemType(SP.Social.SocialDataItemType.link);
    linkDataItem.set_text('link');
    linkDataItem.set_uri('http://bing.com');
    var socialDataItems = [ linkDataItem ];

    // Create the post content.
    var postCreationData = new SP.Social.SocialPostCreationData();
    postCreationData.set_contentText('The text for the post, which contains a {0}.');
    postCreationData.set_contentItems(socialDataItems);

    // Publish the post. Pass null for the "targetId" parameter because this is a root post.
    resultThread = feedManager.createPost(null, postCreationData);
    clientContext.executeQueryAsync(PublishReply, PostFailed);
    }
function PublishReply(sender, args) {

    // Create the reply content.
    var postCreationData = new SP.Social.SocialPostCreationData();
    postCreationData.set_contentText('The text for the reply.');

    // Publish the reply.
    resultThread = feedManager.createPost(resultThread.get_id(), postCreationData);
    clientContext.executeQueryAsync(PostSucceeded, PostFailed);
}
function PostSucceeded(sender, args) {
    $get("spanMessage").innerText = 'The post and reply were published.';
}
function PostFailed(sender, args) {
    $get("spanMessage").innerText = 'Request failed: ' + args.get_message();
}

Ejemplo de código: Recuperación de fuentes sociales mediante el modelo de objetos de JavaScript de SharePoint

El siguiente ejemplo de código recupera las fuentes del usuario actual y de un usuario de destino. Aquí se muestra cómo:

  • Obtenga los tipos de fuentes Personal, News y Timeline del usuario actual con el método getFeed.

  • Obtenga el tipo de fuente Personal del usuario de destino con el método getFeedFor.

  • Iterar a través de las fuentes para encontrar todos los subprocesos sin referencia y para obtener información acerca de los subprocesos y entradas. Subprocesos de referencia representan las notificaciones que contienen información acerca de otro subproceso. Por ejemplo, si un usuario hace referencia a una persona de una entrada de blog, el servidor genera un MentionReference-escriba subproceso que contiene el vínculo a la publicación original y otros metadatos acerca de la entrada.

Para obtener más información sobre los tipos de fuente, consulte Información general sobre los tipos de fuente en My Site Social API. Para obtener más información sobre los subprocesos de referencia, vea Subprocesos de referencia y subprocesos de síntesis en fuentes sociales de SharePoint.

Nota:

[!NOTA] Pegue el código siguiente entre las etiquetas de script que agregó en el procedimiento de crear la página de aplicación . A continuación, cambie el valor de marcador de posición de la variable targetUser antes de ejecutar el código.

// Replace the placeholder value with the account name of the target user.
var targetUser = 'domainName\\\\userName';

// Ensure that the SP.UserProfiles.js file is loaded before the custom code runs.
SP.SOD.executeOrDelayUntilScriptLoaded(GetFeeds, 'SP.UserProfiles.js');

// Declare global variables.
var clientContext;
var feedManager;
var personalFeed;
var newsFeed;
var timelineFeed;
var targetUserFeed;

function GetFeeds() {

    // Initialize the current client context and the SocialFeedManager instance.
    clientContext = SP.ClientContext.get_current();
    feedManager = new SP.Social.SocialFeedManager(clientContext);

    // Set parameters for the feed content that you want to retrieve.
    var feedOptions = new SP.Social.SocialFeedOptions();
    feedOptions.set_maxThreadCount(10); // default is 20

    // Get all feed types for current user and get the Personal feed
    // for the target user.
    personalFeed = feedManager.getFeed(SP.Social.SocialFeedType.personal, feedOptions);
    newsFeed = feedManager.getFeed(SP.Social.SocialFeedType.news, feedOptions);
    targetUserFeed = feedManager.getFeedFor(targetUser, feedOptions);

    // Change the sort order to optimize the Timeline feed results.
    feedOptions.set_sortOrder(SP.Social.SocialFeedSortOrder.byCreatedTime); 
    timelineFeed = feedManager.getFeed(SP.Social.SocialFeedType.timeline, feedOptions);

    clientContext.load(feedManager);
    clientContext.executeQueryAsync(CallIterateFunctionForFeeds, RequestFailed);
}
function CallIterateFunctionForFeeds() {
    IterateThroughFeed(personalFeed, "Personal", true);
    IterateThroughFeed(newsFeed, "News", true);
    IterateThroughFeed(timelineFeed, "Timeline", true); 
    IterateThroughFeed(targetUserFeed, "Personal", false);
}
function IterateThroughFeed(feed, feedType, isCurrentUser) {
    tblPosts.insertRow().insertCell();
    var feedHeaderRow = tblPosts.insertRow();
    var feedOwner = feedManager.get_owner().get_name();

    // Iterate through the array of threads in the feed.
    var threads = feed.get_threads();
    for (var i = 0; i < threads.length ; i++) {
        var thread = threads[i];
        var actors = thread.get_actors();

        if (i == 0) {

            // Get the name of the target user for the feed header row. Users are 
            // owners of all threads in their Personal feed.
            if (!isCurrentUser) {
                feedOwner = actors[thread.get_ownerIndex()].get_name();
            }
            feedHeaderRow.insertCell().innerText = feedType.toUpperCase() + ' FEED FOR '
                + feedOwner.toUpperCase();
        }

        // Use only Normal-type threads and ignore reference-type threads. (SocialThreadType.Normal = 0)
        if (thread.get_threadType() == 0) {

            // Get the root post's author, content, and number of replies.
            var post = thread.get_rootPost();
            var authorName = actors[post.get_authorIndex()].get_name();
            var postContent = post.get_text();
            var totalReplies = thread.get_totalReplyCount();

            var postRow = tblPosts.insertRow();
            postRow.insertCell().innerText = authorName + ' posted \\"' + postContent
                + '\\" (' + totalReplies + ' replies)';

            // If there are any replies, iterate through the array and
            // get the author and content. 
            // If a thread contains more than two replies, the server
            // returns a thread digest that contains only the two most
            // recent replies. To get all replies, call the 
            // SocialFeedManager.getFullThread method.
            if (totalReplies > 0) {
                var replies = thread.get_replies();

                for (var j = 0; j < replies.length; j++) {
                    var replyRow = tblPosts.insertRow();

                    var reply = replies[j];
                    replyRow.insertCell().innerText = '  - ' + actors[reply.get_authorIndex()].get_name()
                        + ' replied \\"' + reply.get_text() + '\\"';
                }
            }
        }
    }
}
function RequestFailed(sender, args) {
    $get("spanMessage").innerText = 'Request failed: ' + args.get_message();
}

Ejemplo de código: Eliminar entradas y respuestas de la fuente social mediante el modelo de objetos de JavaScript de SharePoint

En el ejemplo de código siguiente se elimina una entrada o una respuesta. Aquí se muestra cómo:

  • Obtenga el tipo de fuente News del usuario actual con el método getFeed.

  • Procese una iteración a través de las entradas y las respuestas de la fuente para obtener la propiedad id que se usa para eliminar la entrada o la respuesta.

  • Elimine una respuesta o una entrada raíz con el método deletePost (al eliminar una entrada raíz se elimina todo el hilo).

Nota:

[!NOTA] Pegue el código siguiente entre las etiquetas de script que agregó en el procedimiento de crear la página de aplicación . En este ejemplo se supone que el suministro de noticias del usuario actual contiene al menos una entrada.

// Ensure that the SP.UserProfiles.js file is loaded before the custom code runs.
SP.SOD.executeOrDelayUntilScriptLoaded(GetFeeds, 'SP.UserProfiles.js');

// Declare global variables.
var clientContext;
var feedManager;
var feed;
var postOrReplyToDelete;

function GetFeeds() {

    // Initialize the current client context and the SocialFeedManager instance.
    clientContext = SP.ClientContext.get_current();
    feedManager = new SP.Social.SocialFeedManager(clientContext);

    // Set parameters for the feed content that you want to retrieve.
    var feedOptions = new SP.Social.SocialFeedOptions();
    feedOptions.set_maxThreadCount(10); // default is 20

    // Get all the News feed type for current user.
    feed = feedManager.getFeed(SP.Social.SocialFeedType.news, feedOptions);
    clientContext.executeQueryAsync(IterateThroughFeed, RequestFailed);
}
function IterateThroughFeed() {

    // Iterate through the array of threads in the feed.
    var threads = feed.get_threads();
    for (var i = 0; i < threads.length ; i++) {
        var thread = threads[i];
        var actors = thread.get_actors();

        // Get the root post's author, content, and number of replies.
        var post = thread.get_rootPost();

        var authorName = actors[post.get_authorIndex()].get_name();
        var postContent = post.get_text();
        var totalReplies = thread.get_totalReplyCount();

        var postRow = tblPosts.insertRow();
        postRow.insertCell().innerText = authorName + ' posted \\"' + postContent
            + '\\" (' + totalReplies + ' replies)';
        postOrReplyToDelete = post.get_id();

        // If there are any replies, iterate through the array and
        // get the author and content.
            // If a thread contains more than two replies, the server
            // returns a thread digest that contains only the two most
            // recent replies. To get all replies, call the 
            // SocialFeedManager.getFullThread method.
        if (totalReplies > 0) {
            var replies = thread.get_replies();
            for (var j = 0; j < replies.length; j++) {
                var replyRow = tblPosts.insertRow();

                var reply = replies[j];
                replyRow.insertCell().innerText = '  - ' + actors[reply.get_authorIndex()].get_name()
                    + ' replied \\"' + reply.get_text() + '\\"';
                postOrReplyToDelete = reply.get_id();
            }
        }

        // Initialize button properties.
        $get("btnDelete").onclick = function () { DeletePostOrReply(); };
        $get("btnDelete").innerText = 'Click to delete the last post or reply';
    }
}

// Delete the last post or reply listed on the page.
function DeletePostOrReply() {
    feedManager.deletePost(postOrReplyToDelete);
    clientContext.executeQueryAsync(DeleteSucceeded, RequestFailed);
}
function DeleteSucceeded(sender, args) {
    $get("spanMessage").innerText = 'The post or reply was deleted. Refresh the page to see your changes.';
}
function RequestFailed(sender, args) {
    $get("spanMessage").innerText = 'Request failed: ' + args.get_message();
}

Vea también