Partager via


Créer et supprimer des publications et récupérer le flux social en utilisant le modèle d'objet JavaScript dans SharePoint

Découvrez comment créer et supprimer des publications de microblog et récupérer des flux sociaux à l'aide du modèle d'objet JavaScript SharePoint.

Que sont les flux sociaux dans SharePoint ?

Dans SharePoint, un flux social est une collection de threads qui représentent des conversations, des publications de microblog uniques ou des notifications. Les threads contiennent une publication racine et un ensemble d'articles de la réponse. Dans le modèle objet JavaScript, les flux sont représentés par des objets SocialFeed , les threads sont représentés par des objets SocialThread , et les publications et les réponses sont représentées par des objets SocialPost . Pour effectuer des tâches liées au flux de base, vous utilisez l'objet SocialFeedManager . Dans cet article, nous allons vous montrer comment créer une page d'application qui utilise le modèle d'objet JavaScript pour travailler avec des flux sociaux.

Pour plus d’informations sur l’utilisation de SocialFeedManager ou sur l’utilisation d’autres API pour utiliser des flux sociaux, voir Utiliser des flux sociaux dans SharePoint.

Conditions préalables à la configuration de votre environnement de développement pour qu’il fonctionne avec des flux sociaux dans le modèle objet JavaScript SharePoint

Pour créer une page d'application qui utilise le modèle d'objet JavaScript pour travailler avec des flux sociaux, vous aurez besoin :

  • SharePoint avec Mon site configuré comme public, avec des sites personnels créés pour l’utilisateur actuel et un utilisateur cible, avec l’utilisateur actuel suivant l’utilisateur cible et avec quelques billets écrits par l’utilisateur cible

  • Visual Studio 2012 ou Visual Studio 2013 avec Outils de développement Office pour Visual Studio 2013

  • Autorisations d'accès Contrôle total à l'application de service de profil utilisateur et les autorisations pour déployer une solution de batterie de serveurs pour l'utilisateur connecté

  • Application web des autorisations suffisantes pour le compte de pool d'applications accéder à la base de données de contenu de Mes Sites

Créer une page d’application qui fonctionne avec les flux sociaux à l’aide du modèle objet JavaScript SharePoint

  1. Ouvrez Visual Studio et choisissez Fichier, Nouveau, Projet.

  2. Dans la boîte de dialogue Nouveau projet, sélectionnez .NET Framework 4.5 dans la liste déroulante située en haut.

  3. Dans la liste Modèles , développez Office SharePoint, choisissez la catégorie Solutions SharePoint , puis choisissez le modèle Projet SharePoint .

  4. Nommez le projet SocialFeedJSOM, puis cliquez sur le bouton OK.

  5. Dans la boîte de dialogue Assistant Personnalisation de SharePoint, sélectionnez déployer en tant qu'une solution de batterie de serveurs, puis cliquez sur le bouton Terminer.

  6. Dans L'Explorateur de solutions, ouvrez le menu contextuel du projet SocialFeedJSOM , puis ajoutez un SharePoint dossier mappé « Dispositions ».

  7. Dans le dossier dispositions, ouvrez le menu contextuel pour le dossier SocialFeedJSOM , puis ajoutez une nouvelle page d'application SharePoint nomméeSocialFeed.aspx.

Remarque : les exemples de code de cet article définissent du code personnalisé dans le balisage de page, mais n’utilisent pas la classe code-behind que Visual Studio crée pour la page.

  1. Ouvrez le menu contextuel de la page SocialFeed.aspx, puis choisissez définir comme élément de démarrage.

  2. Dans le balisage de la page SocialFeed.aspx, définissent des contrôles dans les balises de asp:Content « Main », comme illustré dans le code suivant.

<table width="100%" id="tblPosts"></table><br/>
<button id="btnDelete" type="button"></button><br />
<span id="spanMessage" style="color: #FF0000;"></span>

Remarque : ces contrôles ne peuvent pas être utilisés dans tous les scénarios. Par exemple, le scénario « publier billets et réponses » utilise uniquement le contrôle span.

  1. Après la fermeture span, ajoutez les contrôles SharePoint:ScriptLink, un contrôle SharePoint:FormDigest et balises script, comme indiqué dans le code suivant. Les balises SharePoint:ScriptLink référencent les fichiers de bibliothèque de classes qui définissent le modèle d'objet JavaScript que vous pouvez utiliser pour le développement de Mon site social. La balise SharePoint:FormDigest génère un résumé du message de validation de la sécurité lorsque cela est nécessaire par les opérations qui mettent à jour le contenu du serveur.
<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. Pour ajouter la logique pour les flux de travail, remplacez le commentaire entre les balises de script avec l'exemple de code à partir d'un des scénarios suivants :
  1. Pour tester la page d'application, dans la barre de menus, choisissez Déboguer, Démarrer le débogage. Si vous êtes invité à modifier le fichier web.config, cliquez sur le bouton OK.

Si la réponse appelle la méthode de rappel d'échec, définissez un point d'arrêt dans la méthode et ajouter un espion dans l'objet args ou vérifier les journaux ULS et l'Observateur d'événements pour plus d'informations.

Exemple de code : Publier des publications et des réponses au flux social à l’aide du modèle objet JavaScript SharePoint

L'exemple de code suivant publie un billet et une réponse. Il montre comment :

  • Définissez valider le contenu. Cet exemple inclut un lien dans le billet de blog.

  • Publier un billet au flux RSS pour l'utilisateur actuel à l'aide de la méthode de createPost et de la transmission null en tant que paramètre targetId.

  • Répondre à une publication à l'aide de la méthode createPost et en transmettant l'identificateur du thread en tant que paramètre targetId.

Remarque

[!REMARQUE] Collez le code suivant entre les balises de script que vous avez ajoutée dans la procédure créer la page d'application .

// 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();
}

Exemple de code : Récupérer des flux sociaux à l’aide du modèle objet JavaScript SharePoint

L'exemple de code suivant récupère un flux pour l'utilisateur actuel et un utilisateur cible. Il montre comment :

  • Obtenir le Personal, Newset Timeline flux types pour l'utilisateur actuel en utilisant la méthode getFeed.

  • Obtenir le Personal flux type pour un utilisateur cible à l'aide de la méthode getFeedFor.

  • Itération dans les flux pour rechercher tous les threads non référence et pour obtenir des informations sur les threads et publications. Threads de référence représentent des notifications qui contiennent des informations sur un autre thread. Par exemple, si un utilisateur mentionne une personne dans un billet de blog, le serveur génère un MentionReference-tapez thread qui contient le lien vers le billet d'origine et autres métadonnées relatives à la publication.

Pour plus d’informations sur les types de flux, consultez Vue d’ensemble des types de flux dans l’API Mon site Social. Pour plus d’informations sur les threads de référence, voir Threads de référence et threads de synthèse dans les flux sociaux SharePoint.

Remarque

[!REMARQUE] Collez le code suivant entre les balises de script que vous avez ajoutée dans la procédure créer la page d'application . Ensuite, modifiez la valeur de l'espace réservé pour la variable targetUser avant d'exécuter le code.

// 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();
}

Exemple de code : Supprimer des publications et des réponses du flux social à l’aide du modèle objet JavaScript SharePoint

L'exemple de code suivant supprime une publication ou une réponse. Il montre comment :

  • Obtenir le News flux type pour l'utilisateur actuel en utilisant la méthode getFeed.

  • Effectuer une itération dans les billets et réponses dans le flux pour obtenir la propriété id qui vous permet de supprimer la publication ou une réponse.

  • Supprimer un billet racine ou répondre à l'aide de la méthode deletePost (un billet racine vous supprimez le thème entier).

Remarque

[!REMARQUE] Collez le code suivant entre les balises de script que vous avez ajoutée dans la procédure créer la page d'application . Cet exemple suppose qu'échange de News de l'utilisateur actif contienne au moins un billet.

// 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();
}

Voir aussi