Partager via


Exemple de code : événement d’activité Envoyer un lien à vos collègues

Dernière modification : lundi 22 août 2011

S’applique à : SharePoint Server 2010

Dans cet article
Présentation des activités SharePoint
Création et publication des événements d’activité
Génération et exécution de l’exemple

Cet exemple montre comment créer des objets ActivityType et ActivityEvent, et comment insérer de nouveaux objets ActivityEvent dans les flux d’informations des utilisateurs. Il crée un formulaire simple qui permet aux utilisateurs de partager des liens avec leurs collègues en suivant quelques étapes simples. L’interface utilisateur inclut une zone contextuelle qui permet aux utilisateurs d’insérer des URL et des commentaires dans les flux d’informations de leurs collègues.

Exemple de code fourni par :Collaborateur MVP Mathew McDermott, Catapult Systems | Collaborateur MVP Andrew Connell, Critical Path Training, LLC

Installez cet exemple de code sur votre ordinateur en téléchargeant le Kit de développement logiciel SDK Microsoft SharePoint 2010 (éventuellement en anglais) ou en téléchargeant l’exemple à partir de la Galerie de code (éventuellement en anglais). Si vous téléchargez l’exemple SDK SharePoint 2010, il est installé à l’emplacement suivant sur votre système de fichiers : C:\Program Files\Microsoft SDKs\SharePoint 2010\Samples\Social Data and User Profiles.

Présentation des activités SharePoint

Microsoft SharePoint Server 2010 regroupe les événements et notifications surveillés dans le flux d’informations de l’hôte de sites Mon site. Cette nouvelle page et cette nouvelle fonctionnalité permettent à l’utilisateur d’accéder à toutes les actualités de l’entreprise en un seul et même endroit. L’utilisateur peut s’abonner aux actualités et accepter l’affichage convivial des informations, mises en forme en utilisant l’image de l’utilisateur et des liens vers des informations connexes. Ainsi, les flux d’informations constituent un emplacement utile pour transmettre des notifications d’application supplémentaires. Chaque élément de flux d’informations affiche le contenu d’un objet ActivityEvent.

Modèles d’activité

La conception de l’activité commence par une phrase simple. Par exemple, si nous créons un nouvel objet ActivityType indiquant qu’un collègue souhaite partager un lien avec vous, la phrase est similaire à la phrase suivante :

Jim Brown has sent you the following link of interest (Jim Brown vous a envoyé le lien suivant, susceptible de vous intéresser) : Super article sur SharePoint

La partie variable de l’activité est Jim Brown et le texte du lien est Super article sur SharePoint. Lors du développement d’un modèle de type d’activité, vous remplacez les parties variables par un jeton, comme dans l’exemple de modèle suivant :

{Publisher} has sent you the following link of interest: {Link}

L’application personnalisée que vous développez ajoute les informations nécessaires au jeton. Le texte du modèle est déployé vers les serveurs dans un fichier de ressources, pour faciliter la localisation dans les langues cibles de votre choix. Pour plus d’informations sur la création et l’utilisation de fichiers de ressources, voir Utilisation des fichiers de ressources (éventuellement en anglais).

Déploiement de cette solution

Le tableau 1 détaille les composants requis pour cette solution d’informations sur les activités.

Tableau 1. Composants requis par la solution d’informations sur les activités

Ressource de projet

Destination

Assembly de projet (*.dll)

Global Assembly Cache

Fichiers de ressources de modèle d’activité (*.resx)

Répertoire de ressources

Page d’application (*.aspx)

Template/Layouts/MSDN

Une fois que les ressources de l’activité ont été déployées, le nouvel objet ActivityType et l’objet ActivityTemplate associé doivent être créés par un récepteur d’événements qui associe les objets ActivityType et ActivityTemplate au fichier de ressources. L’exemple de projet réalise cette action lors du déploiement de la solution.

private void SetupCustomActivity(SPSite site)
{
  try
  {
    //Get a Service Context from the site.
    SPServiceContext context = SPServiceContext.GetContext(site);
    //We need a User Profile Manager to work with Activities.
    UserProfileManager upm = new UserProfileManager(context);
    //Grab the current user's profile.
    UserProfile p = upm.GetUserProfile(true);

    Debug.WriteLine("Got the User Profile for: " + p.DisplayName);
    //Grab an activity manager.
    ActivityManager am = new ActivityManager(p, context);
    //Ensure that we have permission to do this.
    bool hasrights = am.PrepareToAllowSchemaChanges();
    Debug.WriteLine("Does installer have Admin rights to change the schema? " + hasrights);

    // Create our activity application.
    Debug.WriteLine("Create our Activity Application");
    ActivityApplication app = am.ActivityApplications["Send Link to Colleague"];
    if (app == null)
    {
      app = am.ActivityApplications.Create("Send Link to Colleague");
      app.Commit();
    }
    Debug.WriteLine("Send Link to Colleague App id: " + app.ApplicationId);

    //Create our Colleagues Activity Type, but first check to see whether it already exists.
    Debug.WriteLine("Activity Type: SendColleagueUrlNote");
    ActivityType activityType = app.ActivityTypes["SendColleagueUrlNote"];
    if (activityType == null)
    {
      activityType = app.ActivityTypes.Create("SendColleagueUrlNote");
      activityType.ActivityTypeNameLocStringResourceFile = resFile;
      activityType.ActivityTypeNameLocStringName = "ActivityFeed_SendColleagueUrlNote_Type_Display";
      activityType.IsPublished = true;
      activityType.IsConsolidated = true;
      activityType.Commit();
    }
    //SendColleagueUrlNote Activity Template.
    Debug.WriteLine("SendColleagueUrlNote Activity Single Value Template");
    ActivityTemplate urlTemplateSV = activityType.ActivityTemplates[ActivityTemplatesCollection.CreateKey(false)];
    if (urlTemplateSV == null)
    {
      urlTemplateSV = activityType.ActivityTemplates.Create(false);
      urlTemplateSV.TitleFormatLocStringResourceFile = resFile;
      urlTemplateSV.TitleFormatLocStringName = "ActivityFeed_SendColleagueUrlNote_SV_Template";
      urlTemplateSV.Commit();
     }

Création et publication des événements d’activité

L’objectif de conception de l’exemple d’application est de mettre à la disposition des utilisateurs un formulaire qui leur permet de partager des liens avec leurs collègues en suivant quelques étapes simples. Modélisée à partir de la fonction Balises et notes, la fonction Envoyer un lien à mes collègues ajoute un élément de menu au menu personnel, comme illustré dans la figure 1.

Figure 1. Détails du menu Envoyer un lien à mes collègues

Détails du menu Envoyer un lien à mes collègues

Lorsque l’utilisateur sélectionne cet élément de menu, le formulaire Envoyer un lien à mes collègues s’affiche.

Figure 2. Page Envoyer un lien à mes collègues

Page Envoyer un lien à mes collègues

Le script ECMAScript (JavaScript, JScript) utilisé pour lancer le formulaire fournit l’URL de la fenêtre actuelle et la transmet en tant que paramètre au formulaire, qui affiche dans la section de débogage les valeurs transmises. Pour envoyer l’activité personnalisée à ses collègues, l’utilisateur ajoute une note dans la zone de texte et clique sur Publier.

Création d’activités

L’exemple d’application crée des activités pour l’utilisateur dans la méthode CreateActivity. Cette méthode accepte comme arguments le profil utilisateur du propriétaire de l’activité et le profil d’utilisateur de l’éditeur de l’activité. Elle crée ensuite un objet MinimalPerson pour chaque utilisateur, puis transmet ces deux objets à la méthode CreateActivityEvent. Le lien de l’activité est créé à partir de l’URL et de la note fournie par l’utilisateur.

public ActivityEvent CreateActivity(UserProfile ownerProfile, UserProfile publisherProfile, ActivityType activityType, string linkText, string linkUrl)
{
  //Get the Owner and Publisher Profile.
  Entity ownerMP = new MinimalPerson(ownerProfile).CreateEntity(activityManager);
  Entity publisherMP = new MinimalPerson(publisherProfile).CreateEntity(activityManager);

  //Create the activity and set some properties.
  ActivityManager am = new ActivityManager();
  ActivityEvent activityEvent = ActivityEvent.CreateActivityEvent(am, activityType.ActivityTypeId, ownerMP, publisherMP);

  Debug.WriteLine("Got my ActivityEvent");
  activityEvent.Name = activityType.ActivityTypeName;
  activityEvent.ItemPrivacy = (int)Privacy.Public;
  activityEvent.Owner = ownerMP;
  activityEvent.Publisher = publisherMP;
           
  //Create the link for the activity.
  Link link = new Link();
  link.Href = linkUrl;
  link.Name = linkText;
  activityEvent.Link = link;
  //Save your work.
  activityEvent.Commit();

  Debug.WriteLine("End of Activity event: " + activityType.ActivityTypeName);
  return activityEvent;
}

Envoi de l’événement d’activité aux collègues de l’utilisateur

Cette solution utilise les méthodes de traitement par lots fournies par l’objet ActivityFeedGathererpour procéder à la multidiffusion de l’activité auprès de tous les collègues de l’utilisateur.

//Send activity to the Owner’s Colleagues.
//Create Dictionary objects that will be output parameters for the batch gatherer methods.
  Dictionary<long, MinimalPerson> owners;
  Dictionary<long, List<MinimalPerson>> colleaguesOfOwners;
//Create List objects that contain the ActivityEvent and its publisher.
  List<ActivityEvent> events = new List<ActivityEvent>();
  events.Add(activityEvent);
  List<long> publishers = new List<long>();
  publishers.Add(activityEvent.Owner.Id);
  ActivityFeedGatherer.GetUsersColleaguesAndRights(activityManager, publishers, out owners, out colleaguesOfOwners);
  Dictionary<long, List<ActivityEvent>> eventsConsolidatedPerOwner;
  ActivityFeedGatherer.MulticastActivityEvents(activityManager, events, colleaguesOfOwners, out eventsConsolidatedPerOwner);
  List<ActivityEvent> eventsConsolidated;
  ActivityFeedGatherer.CollectActivityEventsToConsolidate(eventsConsolidatedPerOwner, out eventsConsolidated);
  ActivityFeedGatherer.BatchWriteActivityEvents(eventsConsolidated, 0, events.Count);

Génération et exécution de l’exemple

Les étapes suivantes montrent comment tester ce projet sur le site de développement ou de test.

Pour générer l’exemple

  1. Créez un dossier appelé Microsoft.SDK.Server.Samples, puis décompressez dans ce dossier le fichier SharePoint 2010 Activity Feeds - Code.zip.

  2. Démarrez Visual Studio 2010, puis ouvrez le fichier SendColleagueURLNote.sln qui se trouve dans le dossier créé à l’étape 1.

  3. Dans la fenêtre Propriétés, spécifiez la valeur d’URL de site correspondant à l’adresse absolue de votre site de test ou de développement (par exemple, http:// monsite/). Pensez à inclure la barre oblique de fermeture.

  4. Dans le fichier SendColleagueURLNote.EventReceiver.cs, dans la méthode SendColleagueURLNoteEventReceiver, spécifiez l’URL de votre site Administration centrale de SharePoint.

  5. Si elles ne sont pas déjà présentes, ajoutez au projet des références aux assemblys suivants :

    • Microsoft.SharePoint.dll

    • Microsoft.Office.Server.dll

    • Microsoft.Office.Server.UserProfiles.dll

  6. Ajoutez les fichiers de ressources dans le répertoire Resources (URLNote.fr-FR.resx et URLNote.resx) de votre répertoire \Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\Resources.

  7. Dans le menu Générer, sélectionnez Déployer la solution. Une fois la génération terminée, la page d’application est installée sur votre site de test ou de développement.

Pour exécuter l’exemple

  1. Une fois la solution générée et déployée, accédez à une page de votre site SharePoint Server 2010. Dans le menu déroulant qui se trouve dans le coin supérieur droit de la page, sélectionnez Envoyer un lien à mes collègues.

  2. Tapez une note facultative dans la zone de texte, puis cliquez sur Publier pour insérer la note et le lien dans le flux d’informations de vos collègues.

Voir aussi

Référence

Microsoft.Office.Server.ActivityFeed

Concepts

Utilisation de flux d’activité avec le modèle objet