Partager via


Procédures pas à pas : création d'une activité de workflow de site personnalisée

Cette procédure pas à pas montre comment créer une activité personnalisée pour un flux de travail au niveau du site à l'aide de Visual Studio. Les flux de travail au niveau du site s'appliquent au site entier et pas uniquement à une liste du site. L'activité personnalisée crée une liste Annonces de sauvegarde, puis y copie le contenu de la liste Annonces.

Cette procédure pas à pas présente les tâches suivantes :

  • Création d'un flux de travail au niveau du site.

  • Création d'une activité de flux de travail personnalisée.

  • Création et suppression d'une liste SharePoint.

  • Copie des éléments d'une liste à une autre.

  • Affichage d'une liste dans la barre d'outils Lancement rapide.

Notes

Il est possible que votre ordinateur affiche des noms ou des emplacements différents pour certains des éléments d'interface utilisateur de Visual Studio dans les instructions suivantes. L'édition de Visual Studio dont vous disposez et les paramètres que vous utilisez déterminent ces éléments. Pour plus d'informations, consultez Paramètres Visual Studio.

Composants requis

Pour exécuter cette procédure pas à pas, vous devez disposer des composants suivants :

Création d'un projet d'activité de flux de travail personnalisée au niveau du site

Commencez par créer le projet réservé au stockage et au test de l'activité de flux de travail personnalisée.

Pour créer un projet d'activité de flux de travail personnalisée au niveau du site

  1. Dans le menu Fichier, pointez sur Nouveau, puis cliquez sur Nouveau projet pour ouvrir la boîte de dialogue Nouveau projet.

  2. Développez le nœud SharePoint sous Visual C# ou Visual Basic, puis cliquez sur 2010.

  3. Dans le volet Modèles, sélectionnez Flux de travail séquentiel.

  4. Dans la zone Nom, tapez SauvegardeAnnonces, puis cliquez sur OK.

    L'Assistant Personnalisation de SharePoint s'affiche.

  5. Dans la page Quel site local voulez-vous utiliser pour le débogage, cliquez sur Suivant pour accepter le site par défaut.

    Cette étape définit également le niveau de confiance de la solution en considérant qu'il s'agit d'une solution de la batterie, la seule option disponible pour les projets de flux de travail.

  6. Dans la page Spécifier le nom du flux de travail pour le débogage, acceptez le nom proposé par défaut (SauvegardeAnnonces - Workflow1). Remplacez le type de modèle de flux de travail par Flux de travail de site, puis cliquez sur Suivant.

  7. Cliquez sur Terminer pour accepter les paramètres par défaut restants.

Ajout d'une classe d'activité de flux de travail personnalisée

Ajoutez ensuite une classe au projet afin d'y enregistrer le code de l'activité de flux de travail personnalisée.

Pour ajouter une classe d'activité de flux de travail personnalisée

  1. Cliquez sur Ajouter un nouvel élément dans le menu Projet pour afficher la boîte de dialogue Ajouter un nouvel élément.

  2. Dans l'arborescence Modèles installés, cliquez sur le nœud Code, puis sur Classe dans la liste des modèles d'élément de projet. Employez le nom par défaut Class1.

  3. Remplacez l'intégralité du code dans Class1 par le code suivant :

    Imports System
    Imports System.Collections.Generic
    Imports System.Linq
    Imports System.Text
    Imports Microsoft.SharePoint
    
    Namespace AnnouncementBackup
        ' This custom activity will back up all of the announcements 
        ' in the Announcements list on the SharePoint site.
        Public Class Class1
            Inherits System.Workflow.ComponentModel.Activity
            Public Sub New()
                MyBase.New()
            End Sub
    
            ' Triggers when the activity is executed.
            Protected Overrides Function Execute(ByVal executionContext As System.Workflow.ComponentModel.ActivityExecutionContext) As System.Workflow.ComponentModel.ActivityExecutionStatus
                Try
                    ' Get a reference to the SharePoint site.
                    Dim site As SPSite = New SPSite(("http://" + System.Environment.MachineName))
                    Dim web As SPWeb = site.OpenWeb("/")
                    ' Reference the original Announcements list.
                    Dim aList As SPList = web.GetList("/Lists/Announcements")
                    ' If the Announcements Backup list already exists, delete it.
                    Try
                        Dim bList As SPList = web.GetList("/Lists/Announcements Backup")
                        bList.Delete()
                    Catch
                    End Try
                    ' Create a new backup Announcements list and reference it.
                    Dim newAnnID As Guid = web.Lists.Add("Announcements Backup", "A backup Announcements list.", SPListTemplateType.Announcements)
                    Dim bakList As SPList = web.Lists(newAnnID)
                    ' Copy announcements from original to backup Announcements list.
                    For Each item As SPListItem In aList.Items
                        Dim newAnnItem As SPListItem = bakList.Items.Add
                        For Each field As SPField In aList.Fields
                            If Not field.ReadOnlyField Then
                                newAnnItem(field.Id) = item(field.Id)
                            End If
                        Next
                        newAnnItem.Update()
                    Next
                    ' Put the Backup Announcements list on the QuickLaunch bar.
                    bakList.OnQuickLaunch = True
                    bakList.Update()
                Catch errx As Exception
                    System.Diagnostics.Debug.WriteLine(("Error: " + errx.ToString))
                End Try
                Return MyBase.Execute(executionContext)
            End Function
        End Class
    End Namespace
    
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using Microsoft.SharePoint;
    
    namespace AnnouncementBackup
    {
        // This custom activity will back up all of the announcements in 
        // the Announcements list on the SharePoint site.
        public class Class1 : System.Workflow.ComponentModel.Activity
            {
            public Class1()
            { }
    
            // Triggers when the activity is executed.
            protected override System.Workflow.ComponentModel.ActivityExecutionStatus Execute(System.Workflow.ComponentModel.ActivityExecutionContext executionContext)
            {
                try
                {
                    // Get a reference to the SharePoint site.
                    SPSite site = new SPSite("http://" + System.Environment.MachineName);
                    SPWeb web = site.OpenWeb("/");
    
                    // Reference the original Announcements list.
                    SPList aList = web.GetList("/Lists/Announcements");
    
                    // If the Announcements Backup list already exists, delete it.
                    try
                    {
                        SPList bList = web.GetList("/Lists/Announcements Backup");
                        bList.Delete();
                    }
                    catch
                    { }
    
                    // Create a new backup Announcements list and reference it.
                    Guid newAnnID = web.Lists.Add("Announcements Backup", "A backup Announcements list.", SPListTemplateType.Announcements);
                    SPList bakList = web.Lists[newAnnID];
    
                    // Copy announcements from original to backup Announcements list.
                    foreach (SPListItem item in aList.Items)
                    {
                        SPListItem newAnnItem = bakList.Items.Add();
                        foreach (SPField field in aList.Fields)
                        {
                            if (!field.ReadOnlyField)
                                newAnnItem[field.Id] = item[field.Id];
                        }
                        newAnnItem.Update();
                    }
    
                    // Put the Backup Announcements list on the QuickLaunch bar.
                    bakList.OnQuickLaunch = true;
                    bakList.Update();
    
                }
    
                catch (Exception errx)
                {
                    System.Diagnostics.Debug.WriteLine("Error: " + errx.ToString());
                }
    
                return base.Execute(executionContext);
            }
    
    
        }
    }
    
  4. Enregistrez le projet, puis cliquez sur Générer la solution dans le menu Générer.

    Class1 s'affiche en tant qu'action personnalisée dans la Boîte à outils sous l'onglet Flux de travail SharePoint de la Boîte à outils.

Ajout de l'activité personnalisée au flux de travail de site

Ajoutez, à présent, une activité au flux de travail afin d'y inclure le code personnalisé.

Pour ajouter une activité personnalisée au flux de travail de site

  1. Ouvrez Workflow1 dans le Concepteur de flux de travail en mode Design.

  2. Faites glisser la classe Class1 de la Boîte à outils jusqu'à l'activité onWorkflowActivated1.

  3. Enregistrez le projet.

Test de l'activité de flux de travail personnalisée au niveau du site

Exécutez le projet et démarrez le flux de travail de site. L'activité personnalisée crée une liste Annonces de sauvegarde, puis y copie le contenu de la liste Annonces actuelle. Le code vérifie, au préalable, s'il existe déjà une liste de sauvegarde avant d'en créer une et la supprime le cas échéant. Le code ajoute également un lien à la nouvelle liste dans la barre de lancement rapide du site SharePoint.

Pour tester l'activité de flux de travail personnalisée au niveau du site

  1. Appuyez sur F5 pour exécuter le projet et le déployer sur SharePoint.

  2. Cliquez sur Listes dans la barre de lancement rapide pour afficher toutes les listes disponibles sur le site SharePoint. Vous pouvez remarquer qu'il existe une seule liste pour les annonces appelée Annonces.

  3. En haut de la page Web SharePoint, cliquez sur le bouton Actions du site, puis cliquez sur Flux de travail d'un site.

  4. Dans la section Démarrer un nouveau flux de travail, cliquez sur le lien SauvegardeAnnonces - Workflow1 afin de lancer le flux de travail de site et d'exécuter le code de l'action personnalisée.

  5. Cliquez sur le lien appelé SauvegardeAnnonces dans la barre de lancement rapide. Notez que toutes les annonces figurant dans la liste Annonces ont été copiées dans cette nouvelle liste.

Voir aussi

Tâches

Comment : créer un récepteur d'événements

Autres ressources

Développement de solutions SharePoint