Partilhar via


Criar e excluir postagens e recuperar o feed social usando o modelo de objeto do cliente .NET no SharePoint

Saiba como criar e excluir postagens de microblog e recuperar feeds sociais, usando o modelo de objeto do cliente .NET do SharePoint.

O que são feeds de redes sociais no SharePoint?

No SharePoint, um feed social é uma coleção de tópicos que representam conversações, mensagens de microblog individuais ou notificações. Threads contêm uma postagem raiz e uma coleção de postagens de resposta e representam conversas, postagens de microblog único ou notificações. No modelo de objeto de cliente .NET, os feeds são representados por objetos SocialFeed , os threads são representados por objetos SocialThread e as publicações e respostas são representadas por objetos SocialPost . Para executar tarefas relacionadas a feeds do núcleo do modelo de objeto do cliente .NET, use o objeto SocialFeedManager . Neste artigo, mostraremos a você como criar um aplicativo de console que usa o modelo de objeto do cliente .NET para trabalhar com feeds sociais.

Para obter mais informações sobre como trabalhar com o SocialFeedManager ou para obter informações sobre como utilizar outras APIs para trabalhar com feeds de redes sociais, consulte Trabalhar com feeds sociais no SharePoint.

Pré-requisitos para configurar o ambiente de desenvolvimento para trabalhar com feeds sociais com o modelo de objeto de cliente .NET do SharePoint

Para criar um aplicativo de console que usa o modelo de objeto do cliente .NET para trabalhar com feeds sociais, você precisará de:

  • SharePoint com O Meu Site configurado, com sites pessoais criados para o utilizador atual e um utilizador de destino, com o utilizador atual a seguir o utilizador de destino e com algumas mensagens escritas pelo utilizador de destino

  • Visual Studio 2012

  • Permissões de acesso de Controle total para o aplicativo de serviço de perfil de usuário para o usuário conectado

Observação

Se não estiver a desenvolver no computador que está a executar o SharePoint, obtenha a transferência dos Componentes de Cliente do SharePoint que contém assemblagens de cliente do SharePoint.

Criar uma aplicação de consola que funcione com feeds de redes sociais com o modelo de objeto de cliente .NET do SharePoint

  1. Abra Visual Studio e escolha arquivo, novoprojeto.

  2. Na caixa de diálogo Novo projeto, escolha o .NET Framework 4.5 da lista suspensa na parte superior da caixa de diálogo.

  3. Na lista de modelos, escolha Windows e, em seguida, escolha o modelo de Aplicativo de Console.

  4. Nome do projeto SocialFeedCSOMe escolha o botão OK.

  5. Adicione referências a assemblies a seguir:

    • Microsoft.SharePoint.Client
    • Microsoft.SharePoint.ClientRuntime
    • Microsoft.SharePoint.Client.UserProfiles
  6. Substitua o conteúdo da classe Program o exemplo de código de um dos seguintes cenários:

  7. Para testar o aplicativo de console, na barra de menus, escolha Depurar, Iniciar depuração.

Exemplo de código: publicar publicações e respostas no feed de redes sociais com o modelo de objeto de cliente .NET do SharePoint

O exemplo de código a seguir publica uma postagem e uma resposta do usuário atual. Ele mostra como:

  • Defina post conteúdo. Este exemplo inclui um link no post.

  • Publique uma publicação no feed do utilizador atual com o método CreatePost e transmitindo nulo como o parâmetro targetId .

  • Obtenha otipo de Feed de notícias para o utilizador atual com o método GetFeed .

  • Percorrer o feed para encontrar todos os threads que podem ser respondidos e para obter mais informações sobre threads e postagens.

  • Responda a uma mensagem utilizando o método CreatePost e transmitindo o identificador de thread como o parâmetro targetId .

Observação

[!OBSERVAçãO] Altere o valor de espaço reservado para a variável serverUrl antes de executar o 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();
         }
    }
}

Exemplo de código: obter feeds de redes sociais com o modelo de objeto de cliente .NET do SharePoint

O exemplo de código a seguir recupera feeds para o usuário atual e um usuário de destino. Ele mostra como:

  • Obtenha os tipos de feedPessoal, Notícias e Linha Cronológica para o utilizador atual com o método GetFeed.

  • Obtenha o tipo de feedPessoal para um utilizador de destino com o método GetFeedFor.

  • Percorrer os feeds para encontrar todos os threads de referência não e para obter mais informações sobre threads e postagens. Threads de referência representam notificações que contêm informações sobre outro thread. Por exemplo, se um usuário mencionar que alguém em uma postagem, o servidor gera um MentionReference-digite segmento que contém o link para postagem e outros metadados sobre postagem.

Para obter mais informações sobre tipos de feed, veja Descrição geral dos tipos de feed. Para obter mais informações sobre threads de referência, veja Tópicos de referência e threads de resumo em feeds sociais do SharePoint.

Observação

[!OBSERVAçãO] Altere os valores de espaço reservado para as variáveis $ serverUrl e targetUser antes de executar o 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));
                }
            }
        }
    }
}

Exemplo de código: eliminar mensagens e respostas do feed de redes sociais com o modelo de objeto de cliente .NET do SharePoint

O exemplo de código a seguir exclui uma postagem ou uma resposta do feed de pessoal do usuário atual. Ele mostra como:

  • Obtenha o tipo de feedPessoal para o utilizador atual com o método GetFeed.

  • Percorrer os threads no feed para obter mais informações sobre a postagem de raiz e respostas.

  • Elimine uma mensagem de raiz, uma resposta ou um thread com o método DeletePost (eliminar uma mensagem de raiz elimina todo o thread).

Observação

[!OBSERVAçãO] Altere o valor de espaço reservado para a variável serverUrl antes de executar o 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);
        }
    }
}

Próximas etapas

Como: Incluir menções, etiquetas e ligações para sites e documentos em publicações no SharePoint

Confira também