Как создавать и удалять записи, а также получать веб-каналы социальных медиа, используя объектную модель JavaScript в SharePoint
Узнайте, как создавать и удалять записи микроблогов, а также получать веб-каналы социальных медиа, используя объектную модель JavaScript для SharePoint.
Что такое социальные каналы в SharePoint?
В SharePoint социальная лента представляет собой набор потоков, которые представляют беседы, отдельные записи микроблогов или уведомления. Потоки имеют корневой post и коллекцию публикации в ответ. В объектной модели JavaScript веб-каналов, представленные объектами SocialFeed , потоки, представленные объектами SocialThread и публикации и ответы, представленные объектами SocialPost . Для выполнения основных задач, связанных с веб-канал, используйте объект SocialFeedManager . В этой статье мы покажем, как создать страницу приложения, использующего JavaScript объектной модели для работы с социальными веб-каналами.
Дополнительные сведения о работе с SocialFeedManager или об использовании других API для работы с социальными каналами см. в SharePoint .
Необходимые условия для настройки среды разработки для работы с социальными каналами в объектной SharePoint JavaScript
Чтобы создать страницу приложения, использующего JavaScript объектной модели для работы с социальными веб-каналов, то необходимо:
SharePoint с моим сайтом, настроенным как общедоступный, с личными сайтами, созданными для текущего пользователя и целевого пользователя, с текущим пользователем, следующим за целевым пользователем, и с несколькими сообщениями, написанными целевым пользователем
Visual Studio 2012 или Visual Studio 2013 с Инструменты разработчика Office для Visual Studio 2013
Полный доступ для приложения-службы профилей пользователей и разрешения на развертывание решения фермы для пользователя, вошедшего в систему
Достаточные разрешения для учетной записи пула приложений для доступа к базе данных контента личных сайтов веб-приложения
Создание страницы приложения, которая работает с социальными каналами с помощью SharePoint объектной модели JavaScript
Откройте Visual Studio и в меню Файл последовательно выберите элементы Создать и Проект.
В диалоговом окне Новый проект выберите .NET Framework 4.5 из раскрывающегося списка в верхней части окна.
В списке Шаблоны расширь Office SharePoint, выберите категорию SharePoint solutions, а затем выберите SharePoint Project шаблона.
Назовите проект SocialFeedJSOMи затем нажмите кнопку ОК.
В диалоговом окне Мастер настройки SharePoint выберите Развернуть как решение фермы и затем нажмите кнопку Готово.
В Обозревателе решений откройте контекстное меню для проектаSocialFeedJSOM и добавьте SharePoint "Макеты" сопоставленная папка.
В папке Layouts откройте контекстное меню для папкиSocialFeedJSOM и добавьте новую страницу приложения SharePoint с именемSocialFeed.aspx.
Примечание. Примеры кода в этой статье определяют пользовательский код в разметки страниц, но не используют класс кода, который Visual Studio для страницы.
Откройте контекстное меню для страницы SocialFeed.aspx и затем выберите команду назначить элемент.
В разметке страницы SocialFeed.aspx определяющие элементы управления внутри тегов asp:Content «Главная», как показано в следующем коде.
<table width="100%" id="tblPosts"></table><br/>
<button id="btnDelete" type="button"></button><br />
<span id="spanMessage" style="color: #FF0000;"></span>
Примечание. Эти элементы управления могут использоваться не во всех сценариях. Например «опубликовать публикации и ответы» сценарий только использует элемент управления span.
- После закрывающего тега span, добавьте элементы управления SharePoint:ScriptLink, элемент управления SharePoint:FormDigest и script тегов, как показано в следующем коде. Теги SharePoint:ScriptLink ссылку файлов библиотеки классов, которые определяют JavaScript объектной модели, которые можно использовать для разработки Личный сайт. Тег SharePoint:FormDigest создает сообщение дайджеста для проверки подлинности при необходимости в операции, обновлять содержимое сервера.
<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>
- Чтобы добавить логику для работы с веб-каналами, замените комментарий между тегами script с пример кода из одного из следующих сценариев:
- Публикация сообщения и ответы, которые социальные веб-канал
- Извлечение социальных веб-каналов
- Удаление публикации и ответы из социальных канала
- Тестирование страницы приложения в строке меню выберите Отладка, Начать отладку. Если запрос на изменение файла web.config, нажмите кнопку ОК.
Если ответ вызывает метод обратного вызова сбоя, задайте точку останова в методе и Добавить контрольное значение в объекте args или проверьте журналы ULS и средство просмотра событий для получения дополнительных сведений.
Пример кода. Публикация сообщений и ответов в социальной сети с помощью объектной SharePoint JavaScript
В следующем примере кода публикует сообщение и ее в ответ. В нем показано, как:
После определения содержимого. В этом примере ссылка в записи.
Публикация post на канал для текущего пользователя, используя метод createPost и передача null в качестве параметра targetId.
Ответ на публикацию с помощью метода createPost, передав в качестве параметра targetId идентификатор потока.
Примечание
[!Примечание] Вставьте следующий код в тегах script, которые добавлены в процедуре "создать приложение" .
// 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();
}
Пример кода. Извлечение социальных каналов с помощью SharePoint объектной модели JavaScript
В следующем примере кода показано получение веб-каналов для текущего пользователя и конечного пользователя. В нем показано, как:
Получите Personal, News и Timeline канал типов для текущего пользователя с помощью метода getFeed.
Получите Personal канал типа для конечного пользователя с помощью метода getFeedFor.
Выполните итерацию по веб-каналы, чтобы найти все потоки, не являющиеся ссылку и для получения сведений о потоков и публикации. Справочник по потоков представляют уведомлений, которые содержат сведения о другого потока. Например, если пользователь упоминания другого пользователя в записи, сервера создает MentionReference-введите поток, который содержит ссылки на исходное сообщение и другие метаданные о post.
Дополнительные сведения о типах веб-канала активности можно Overview of feed types in the Личный сайт API. Дополнительные сведения о справочных потоках см. в справочных потоках и дайджест-потоках в SharePoint социальных каналах.
Примечание
[!Примечание] Вставьте следующий код в тегах script, которые добавлены в процедуре "создать приложение" . Измените значение заполнитель для переменной targetUser до выполнения этого кода.
// 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();
}
Пример кода. Удаление сообщений и ответов из социальной сети с помощью объектной SharePoint JavaScript
В следующем примере кода удаляется публикация или ответ. В нем показано, как:
Получите News канал типа для текущего пользователя с помощью метода getFeed.
Выполните итерацию по публикации и ответы в веб-канал, чтобы получить свойство id, которая используется для удаления публикация или ответ.
Удаление корневого публикация или ответ с помощью метода deletePost (корневой post при удалении весь поток).
Примечание
[!Примечание] Вставьте следующий код в тегах script, которые добавлены в процедуре "создать приложение" . В этом примере предполагается, что текущий пользователь канал новостей содержит по крайней мере один 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();
}