Criar e excluir postagens e recuperar o feed social utilizando o modelo de objeto JavaScript no SharePoint
Saiba como criar e excluir postagens de microblog e recuperar feeds sociais, usando o modelo de objeto JavaScript do SharePoint.
O que são feeds sociais no SharePoint?
No SharePoint, um feed social é uma coleção de threads que representam conversas, postagens de microblog único ou notificações. Threads contêm uma postagem raiz e uma coleção de postagens de resposta. No modelo de objeto JavaScript, os feeds são representados por objetos do SocialFeed , os threads são representados por objetos SocialThread e as postagens e respostas são representadas por objetos SocialPost . Para executar tarefas relacionadas a feeds do núcleo, use o objeto SocialFeedManager . Neste artigo, mostraremos a você como criar uma página de aplicativo que usa o modelo de objeto JavaScript para trabalhar com feeds sociais.
Para obter mais informações sobre como trabalhar com o SocialFeedManager ou para obter informações sobre como usar outras APIs para trabalhar com feeds sociais, consulte Trabalhar com feeds sociais no SharePoint.
Pré-requisitos para configurar seu ambiente de desenvolvimento para trabalhar com feeds sociais no modelo de objeto JavaScript do SharePoint
Para criar uma página de aplicativo que usa o modelo de objeto JavaScript para trabalhar com feeds sociais, você precisará de:
SharePoint com Meu Site configurado como público, com sites pessoais criados para o usuário atual e um usuário de destino, com o usuário atual seguindo o usuário de destino e com algumas postagens escritas pelo usuário de destino
Visual Studio 2012 ou Visual Studio 2013 com Office Developer Tools para Visual Studio 2013
Permissões de acesso de Controle total para o aplicativo de serviço de perfil de usuário e permissões para implantar uma solução de farm para o usuário conectado
Aplicativo web de permissões suficientes para a conta do pool de aplicativos acessar o banco de dados de conteúdo de Meus Sites
Criar uma página de aplicativo que funcione com feeds sociais usando o modelo de objeto JavaScript do SharePoint
Abra Visual Studio e escolha arquivo, novoprojeto.
Na caixa de diálogo Novo Projeto, escolha .NET Framework 4.5 na lista suspensa na parte superior da caixa de diálogo.
Na lista Modelos , expanda o Office SharePoint, escolha a categoria Soluções do SharePoint e escolha o modelo do Projeto do SharePoint .
Nome do projeto SocialFeedJSOMe escolha o botão OK.
Na caixa de diálogo Assistente de personalização do SharePoint, selecione implantar como uma solução de farm e, em seguida, escolha o botão Concluir.
No Solution Explorer, abra o menu de atalho para o projeto SocialFeedJSOM e, em seguida, adicione uma lista do SharePoint "Layouts" mapeado a pasta.
Na pasta Layouts, abra o menu de atalho para a pasta SocialFeedJSOM e, em seguida, adicione uma nova página de aplicativos do SharePoint denominadaSocialFeed.aspx.
Observação: os exemplos de código neste artigo definem código personalizado na marcação da página, mas não usam a classe code-behind que o Visual Studio cria para a página.
Abra o menu de atalho para a página SocialFeed.aspx e escolha definida como Item de inicialização.
Na marcação para a página SocialFeed.aspx, defina controles dentro das marcas de asp:Content "Main", conforme mostrado no código a seguir.
<table width="100%" id="tblPosts"></table><br/>
<button id="btnDelete" type="button"></button><br />
<span id="spanMessage" style="color: #FF0000;"></span>
Observação: esses controles podem não ser usados em todos os cenários. Por exemplo, o cenário "Publicar postagens e respostas" usa somente o controle span.
- Após o fechamento span marca, adicionar controles de SharePoint:ScriptLink, um controle SharePoint:FormDigest e script marcas, conforme mostrado no código a seguir. As marcas de SharePoint:ScriptLink referência os arquivos de biblioteca de classe que definem o modelo de objeto de JavaScript que você pode usar para o desenvolvimento de My Site Social. A marca SharePoint:FormDigest gera um resumo da mensagem para a validação de segurança quando exigido pela operações que atualizem o conteúdo do 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>
- Para adicionar a lógica para trabalhar com feeds, substitua o comentário entre as marcas de script com o exemplo de código de um dos seguintes cenários:
- Publicar postagens e respostas no feed social
- Recuperar os feeds sociais
- Excluir postagens e respostas do feed social
- Para testar a página de aplicativo, na barra de menus, escolha Depurar, Iniciar Depuração. Se você for solicitado a modificar o arquivo web.config, escolha o botão OK .
Se a resposta chama o método de retorno de falha, definir um ponto de interrupção no método e adicionar uma observação sobre o objeto args ou verifique os logs ULS e o Visualizador de eventos para obter mais informações.
Exemplo de código: publicar postagens e respostas no feed social usando o modelo de objeto JavaScript do SharePoint
O exemplo de código a seguir publica uma postagem e uma resposta. Ele mostra como:
Defina post conteúdo. Este exemplo inclui um link no post.
Publica uma postagem feed do usuário atual usando o método createPost e passando null como o parâmetro targetId.
Responder a uma postagem usando o método createPost e passando o identificador de thread como o parâmetro targetId.
Observação
[!OBSERVAçãO] Cole o seguinte código entre as marcas de script que você adicionou no procedimento criar a página do aplicativo .
// 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();
}
Exemplo de código: recuperar feeds sociais usando o modelo de objeto JavaScript 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 o Personal, Newse Timeline feed tipos para o usuário atual usando o método getFeed.
Obtenha o Personal feed de tipo para um usuário de destino usando 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, consulte Visão geral dos tipos de feed na API Social do Meu Site. Para obter mais informações sobre threads de referência, consulte Threads de referência e threads de digestão em feeds sociais do SharePoint.
Observação
[!OBSERVAçãO] Cole o seguinte código entre as marcas de script que você adicionou no procedimento criar a página do aplicativo . Em seguida, altere o valor de espaço reservado para a variável targetUser antes de executar o 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();
}
Exemplo de código: excluir postagens e respostas do feed social usando o modelo de objeto JavaScript do SharePoint
O exemplo de código a seguir exclui uma postagem ou uma resposta. Ele mostra como:
Obtenha o News feed de tipo para o usuário atual usando o método getFeed.
Percorrer as postagens e respostas no feed para obter a propriedade id que você usa para excluir a postagem ou resposta.
Excluir uma raiz postagem ou resposta usando o método deletePost (excluir uma postagem raiz exclui o segmento inteiro).
Observação
[!OBSERVAçãO] Cole o seguinte código entre as marcas de script que você adicionou no procedimento criar a página do aplicativo . Este exemplo pressupõe que o newsfeed do usuário atual contém pelo menos um post.
// 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();
}