Как создавать и удалять записи, а также получать веб-каналы социальных медиа, используя объектную модель 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

  1. Откройте Visual Studio и в меню Файл последовательно выберите элементы Создать и Проект.

  2. В диалоговом окне Новый проект выберите .NET Framework 4.5 из раскрывающегося списка в верхней части окна.

  3. В списке Шаблоны расширь Office SharePoint, выберите категорию SharePoint solutions, а затем выберите SharePoint Project шаблона.

  4. Назовите проект SocialFeedJSOMи затем нажмите кнопку ОК.

  5. В диалоговом окне Мастер настройки SharePoint выберите Развернуть как решение фермы и затем нажмите кнопку Готово.

  6. В Обозревателе решений откройте контекстное меню для проектаSocialFeedJSOM и добавьте SharePoint "Макеты" сопоставленная папка.

  7. В папке Layouts откройте контекстное меню для папкиSocialFeedJSOM и добавьте новую страницу приложения SharePoint с именемSocialFeed.aspx.

Примечание. Примеры кода в этой статье определяют пользовательский код в разметки страниц, но не используют класс кода, который Visual Studio для страницы.

  1. Откройте контекстное меню для страницы SocialFeed.aspx и затем выберите команду назначить элемент.

  2. В разметке страницы 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.

  1. После закрывающего тега 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>
  1. Чтобы добавить логику для работы с веб-каналами, замените комментарий между тегами script с пример кода из одного из следующих сценариев:
  1. Тестирование страницы приложения в строке меню выберите Отладка, Начать отладку. Если запрос на изменение файла 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();
}

См. также