Compartir a través de


Crear y borrar publicaciones y recuperar la fuente social usando el modelo de objetos de cliente .NET en SharePoint

Aprenda a crear y borrar entradas de micro blog y a recuperar las fuentes sociales usando el modelo de objeto cliente de SharePoint .NET.

¿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, y representan conversaciones, entradas de microblog individuales o notificaciones. En el modelo de objetos de cliente de .NET, las fuentes se representan mediante objetos SocialFeed , los subprocesos se representan mediante objetos SocialThread y las publicaciones y respuestas se representan mediante objetos SocialPost . Para realizar las principales tareas relativas a la fuente en el modelo de objetos de cliente .NET, se utiliza el objeto SocialFeedManager . En este artículo, mostraremos cómo crear una aplicación de consola que usa el modelo de objetos de cliente .NET 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 mediante el modelo de objetos de cliente .NET de SharePoint

Para crear una aplicación de consola que usa el modelo de objetos de cliente .NET para trabajar con fuentes sociales, necesitará:

  • SharePoint con Mi sitio configurado, 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

  • Permisos de acceso Control total sobre la aplicación de servicio Perfil de usuario para el usuario que ha iniciado sesión

Nota:

Si no está desarrollando en el equipo que ejecuta SharePoint, obtenga la descarga componentes de cliente de SharePoint que contiene ensamblados de cliente de SharePoint.

Creación de una aplicación de consola que funcione con fuentes sociales mediante el modelo de objetos de cliente de .NET 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, seleccione Windows y, después, elija la plantilla Aplicación de consola.

  4. Asigne el nombre SocialFeedCSOM al proyecto y seleccione el botón Aceptar.

  5. Agregue referencias a los ensamblados siguientes:

    • Microsoft.SharePoint.Client
    • Microsoft.SharePoint.ClientRuntime
    • Microsoft.SharePoint.Client.UserProfiles
  6. Reemplace el contenido de la clase Program con el ejemplo de código de uno de los siguientes escenarios:

  7. Para probar la aplicación de consola, en la barra de menús, seleccione Depurar, Iniciar depuración.

Ejemplo de código: Publicar publicaciones y respuestas en la fuente social mediante el modelo de objetos de cliente .NET de SharePoint

El siguiente ejemplo de código publica una entrada y una respuesta del usuario actual. Muestra cómo:

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

  • Publique una publicación en la fuente del usuario actual mediante el método CreatePost y pase null como parámetro targetId .

  • Obtenga el tipo de fuenteNoticias para el usuario actual mediante el método GetFeed.

  • Iterar por la fuente para encontrar todos los subprocesos a los que se puede responder y para obtener información acerca de subprocesos y entradas.

  • Responda a una publicación mediante el método CreatePost y pase el identificador de subproceso como parámetro targetId .

Nota:

[!NOTA] Cambie el valor del marcador de la variable serverUrl antes de ejecutar el código.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SharePoint.Client;
using Microsoft.SharePoint.Client.Social;

namespace SocialFeedCSOM
{
    class Program
    {
        static void Main(string[] args)
        {
            // Replace the following placeholder value with the target server URL.
            const string serverUrl = "http://serverName/";

            Console.Write("Type your post text:  ");

            // Create a link to include in the post.
            SocialDataItem linkDataItem = new SocialDataItem();
            linkDataItem.ItemType = SocialDataItemType.Link;
            linkDataItem.Text = "link";
            linkDataItem.Uri = "http://bing.com";

            // Define properties for the post.
            SocialPostCreationData postCreationData = new SocialPostCreationData();
            postCreationData.ContentText = Console.ReadLine() + " Plus a {0}.";
            postCreationData.ContentItems = new SocialDataItem[1] { linkDataItem };

            // Get the client context.
            ClientContext clientContext = new ClientContext(serverUrl);

            // Get the SocialFeedManager instance.
            SocialFeedManager feedManager = new SocialFeedManager(clientContext);

            // Publish the post. This is a root post, so specify null for the
            // targetId parameter. 
            feedManager.CreatePost(null, postCreationData); 
            clientContext.ExecuteQuery();

            Console.WriteLine("\\nCurrent user's newsfeed:");

            // Set parameters for the feed content that you want to retrieve.
            SocialFeedOptions feedOptions = new SocialFeedOptions();

            // Get the target owner's feed and then run the request on the server.
            ClientResult<SocialFeed> feed = feedManager.GetFeed(SocialFeedType.News, feedOptions);
            clientContext.ExecuteQuery();

            // Create a dictionary to store the Id property of each thread. This 
            // code example stores the Id so you can select a thread to reply to.
            Dictionary<int, string> idDictionary = new Dictionary<int, string>();

            // Iterate through each thread in the feed.
            for (int i = 0; i < feed.Value.Threads.Length; i++)
            {
                SocialThread thread = feed.Value.Threads[i];

                // Keep only the threads that can be replied to.
                if (thread.Attributes.HasFlag(SocialThreadAttributes.CanReply))
                {
                    idDictionary.Add(i, thread.Id);

                    // Get properties from the root post and thread.
                    // 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 SocialFeedManager.GetFullThread.
                    SocialPost rootPost = thread.RootPost;
                    SocialActor author = thread.Actors[rootPost.AuthorIndex];
                    Console.WriteLine(string.Format("{0}. {1} said \\"{2}\\" ({3} replies)",
                        (i + 1), author.Name, rootPost.Text, thread.TotalReplyCount));
                }
            }
            Console.Write("\\nWhich thread number do you want to reply to?  ");

            string threadToReplyTo = "";
            int threadNumber = int.Parse(Console.ReadLine()) - 1;
            idDictionary.TryGetValue(threadNumber, out threadToReplyTo);

            Console.Write("Type your reply:  ");

            // Define properties for the reply. This example reuses the 
            // SocialPostCreationData object that was used to create a post.
            postCreationData.ContentText = Console.ReadLine();

            // Publish the reply and make the changes on the server.
            ClientResult<SocialThread> result = feedManager.CreatePost(threadToReplyTo, postCreationData);
            clientContext.ExecuteQuery();

            Console.WriteLine("\\nThe reply was published. The thread now has {0} replies.", result.Value.TotalReplyCount);
            Console.ReadLine();
         }
    }
}

Ejemplo de código: Recuperación de fuentes sociales mediante el modelo de objetos de cliente .NET de SharePoint

El siguiente ejemplo de código recupera las fuentes del usuario actual y de un usuario de destino. Muestra cómo:

  • Obtenga los tipos de fuentePersonal, Noticias y Escala de tiempo para el usuario actual mediante el método GetFeed.

  • Obtenga el tipo de fuentePersonal para un usuario de destino mediante 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 más información sobre los tipos de fuentes, consulte Información general de los tipos de fuentes. 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] Cambie los valores de marcador de posición de las variables serverUrl y targetUser antes de ejecutar el código.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SharePoint.Client;
using Microsoft.SharePoint.Client.Social;

namespace SocialFeedCSOM
{
    class Program
    {
        static string owner;
        static void Main(string[] args)
        {

            // Replace the following placeholder values with the target
            // server URL and target thread owner.
            const string serverUrl = "http://serverName/";
            const string targetUser = "domainName\\\\userName";

            // Get the client context.
            ClientContext clientContext = new ClientContext(serverUrl);

            // Get the SocialFeedManager instance. 
            // Load the instance to get the Owner property.
            SocialFeedManager feedManager = new SocialFeedManager(clientContext);
            clientContext.Load(feedManager, f => f.Owner);

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

            // Get all feed types for current user and get the Personal feed
            // for the target user.
            ClientResult<SocialFeed> personalFeed = feedManager.GetFeed(SocialFeedType.Personal, feedOptions);
            ClientResult<SocialFeed> newsFeed = feedManager.GetFeed(SocialFeedType.News, feedOptions);
            ClientResult<SocialFeed> targetUserFeed = feedManager.GetFeedFor(targetUser, feedOptions);

            // Change the sort order to optimize the Timeline feed results.
            feedOptions.SortOrder = SocialFeedSortOrder.ByCreatedTime;
            ClientResult<SocialFeed> timelineFeed = feedManager.GetFeed(SocialFeedType.Timeline, feedOptions);

            // Run the request on the server.
            clientContext.ExecuteQuery();

            // Get the name of the current user within this instance.
            owner = feedManager.Owner.Name;

            // Iterate through the feeds and write the content.
            IterateThroughFeed(personalFeed.Value, SocialFeedType.Personal, true);
            IterateThroughFeed(newsFeed.Value, SocialFeedType.News, true);
            IterateThroughFeed(timelineFeed.Value, SocialFeedType.Timeline, true);
            IterateThroughFeed(targetUserFeed.Value, SocialFeedType.Personal, false);

            Console.ReadKey(false);
        }

        // Iterate through the feed and write to the console window.
        static void IterateThroughFeed(SocialFeed feed, SocialFeedType feedType, bool isCurrentUserOwner)
        {
            SocialThread[] threads = feed.Threads;

            // If this is the target user's feed, get the user's name.
            // A user is the owner of all threads in his or her Personal feed.
            if (!isCurrentUserOwner)
            {
                SocialThread firstThread = threads[0];
                owner = firstThread.Actors[firstThread.OwnerIndex].Name;
            }
            Console.WriteLine(string.Format("\\n{0} feed type for {1}:", feedType.ToString(), owner));

            // Iterate through each thread in the feed.
            foreach (SocialThread thread in threads)
            {

                // Ignore reference thread types.
                if (thread.ThreadType == SocialThreadType.Normal)
                {

                    // Get properties from the root post and thread. 
                    // 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 SocialFeedManager.GetFullThread.
                    SocialPost rootPost = thread.RootPost;
                    SocialActor author = thread.Actors[rootPost.AuthorIndex];
                    Console.WriteLine(string.Format("  - {0} posted \\"{1}\\" on {2}. This thread has {3} replies.",
                        author.Name, rootPost.Text, rootPost.CreatedTime.ToShortDateString(), thread.TotalReplyCount));
                }
            }
        }
    }
}

Ejemplo de código: Elimina entradas y respuestas de la fuente social mediante el modelo de objetos de cliente .NET de SharePoint

El siguiente ejemplo de código elimina una entrada o una respuesta de la fuente personal del usuario actual. Muestra cómo:

  • Obtenga el tipo de fuentePersonal para el usuario actual mediante el método GetFeed.

  • Iterar por los subprocesos de la fuente para obtener información sobre la entrada raíz y las respuestas.

  • Elimine una publicación, una respuesta o un subproceso raíz mediante el método DeletePost (al eliminar una publicación raíz se elimina todo el subproceso).

Nota:

[!NOTA] Cambie el valor del marcador de la variable serverUrl antes de ejecutar el código.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SharePoint.Client;
using Microsoft.SharePoint.Client.Social;

namespace SocialFeedCSOM
{
    class Program
    {
        static void Main(string[] args)
        {

            // Replace the following placeholder value with the target SharePoint server.
            const string serverUrl = "http://serverName/";

            // Get the client context.
            ClientContext clientContext = new ClientContext(serverUrl);

            // Get the SocialFeedManager instance.
            SocialFeedManager feedManager = new SocialFeedManager(clientContext);

            Console.WriteLine("\\nCurrent user's personal feed:");

            // Set the parameters for the feed content that you want to retrieve.
            SocialFeedOptions feedOptions = new SocialFeedOptions();

            // Get the target owner's feed (posts and activities) and
            // then run the request on the server.
            ClientResult<SocialFeed> feed = feedManager.GetFeed(SocialFeedType.Personal, feedOptions);
            clientContext.ExecuteQuery();

            // Create a dictionary to store the Id property of each post and
            // reply. This code example stores the Id so you can select a post
            // or a reply to delete.
            Dictionary<int, string> idDictionary = new Dictionary<int, string>();

            // Iterate through each thread in the feed.
            for (int i = 0; i < feed.Value.Threads.Length; i++)
            {
                SocialThread thread = feed.Value.Threads[i];
                SocialPost rootPost = thread.RootPost;

                // Only keep posts that can be deleted.
                if (rootPost.Attributes.HasFlag(SocialPostAttributes.CanDelete)) 
                {
                    idDictionary.Add(i, rootPost.Id);

                    Console.WriteLine(string.Format("{0}. \\"{1}\\" has {2} replies.",
                        (i + 1), rootPost.Text, thread.TotalReplyCount));

                    // Get the replies.
                    // 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 SocialFeedManager.GetFullThread.
                    if (thread.TotalReplyCount > 0)
                    {
                        foreach (SocialPost reply in thread.Replies)
                        {

                            // Only keep replies that can be deleted.
                            if (reply.Attributes.HasFlag(SocialPostAttributes.CanDelete)) 
                            {
                                i++;
                                idDictionary.Add(i, reply.Id);

                                SocialActor author = thread.Actors[reply.AuthorIndex];
                                Console.WriteLine(string.Format("\\t{0}. {1} replied \\"{2}\\"",
                                    (i + 1), author.Name, reply.Text));
                            }
                        }
                    }
                }
            }
            Console.Write("\\nEnter the number of the post or reply to delete. "
                + "(If you choose a root post, the whole thread is deleted.)");
            string postToDelete = "";
            int postNumber = int.Parse(Console.ReadLine()) - 1;
            idDictionary.TryGetValue(postNumber, out postToDelete);

            // Delete the reply and make the changes on the server.
            ClientResult<SocialThread> result = feedManager.DeletePost(postToDelete);
            clientContext.ExecuteQuery();

            // DeletePost returns digest thread if the deleted post is not the
            // root post. If it is the root post, the whole thread is deleted
            // and DeletePost returns null.
            if (result.Value != null)
            {
                SocialThread threadResult = result.Value;
                Console.WriteLine("\\nThe reply was deleted. The thread now has {0} replies.", threadResult.TotalReplyCount);
            }
            else
            {
                Console.WriteLine("\\nThe post and thread were deleted.");
            }
            Console.ReadKey(false);
        }
    }
}

Pasos siguientes

Cómo: Incluir menciones, etiquetas y vínculos a sitios y documentos en publicaciones en SharePoint

Vea también