Cette documentation est archivée et n’est pas conservée.

Procédure : restaurer le contenu par programmation

Windows SharePoint Services 3

Cette rubrique explique comment créer une application qui restaure un composant de contenu Windows SharePoint Services 3.0 à partir d'une sauvegarde. Cela suppose que vous connaissez les rubriques Vue d'ensemble de la sauvegarde et restauration des données dans Windows SharePoint Services et Programmation avec le modèle objet de sauvegarde/restauration de Windows SharePoint Services.

Pour restaurer un composant de contenu

  1. Ajoutez une référence à Windows SharePoint Services dans votre projet Visual Studio et ajoutez des instructions using pour les espaces de noms Microsoft.SharePoint.Administration et Microsoft.SharePoint.Administration.Backup du fichier du code.

  2. Dans la méthode Main, créez un objet SPRestoreSettings en utilisant la méthode statique GetRestoreSettings. Pour le premier paramètre, indiquez le chemin où est stockée la sauvegarde. Pour le deuxième paramètre, spécifiez une version de chaîne d'une des valeurs de SPRestoreMethodType.

    SPRestoreSettings settings = SPBackupRestoreSettings.GetRestoreSettings((@"\\Server\WSSBackups", "Overwrite");
    
  3. Demandez à l'utilisateur de spécifier le composant de contenu à restaurer et attribuez son nom à la propriété IndividualItem. Pour afficher une liste détaillée des noms des composants de votre batterie de serveurs qui étaient inclus dans la dernière sauvegarde complète et qui peuvent être les objets d'opérations de restauration, vous pouvez exécuter la commande stsadm -o restore -showtree au niveau de la ligne de commande du serveur. Pour spécifier un autre package de sauvegarde complète, utilisez le paramètre -backupid. Vous pouvez aussi consulter Opérations > Effectuer une restauration dans l'application Administration centrale. Pour spécifier la batterie de serveurs complète, utilisez le nom « Farm ». (Le fait de choisir la valeur null pour la propriété sélectionne également toute la batterie de serveurs pour la sauvegarde, du moins si vous utilisez IndividualItem dans le reste du code pour identifier par son nom le composant à restaurer. Vous trouverez un exemple d'utilisation de la méthode FindItems dans l'étape 9.)

    Console.Write("Enter name of component to restore (default is whole farm):");
    settings.IndividualItem = Console.ReadLine();
    
  4. Si vous souhaitez effectuer la restauration à partir d'une autre sauvegarde que la plus récente, identifiez le package de sauvegarde en affectant son GUID à la propriété BackupId. Un enregistrement de chaque opération de sauvegarde pour un emplacement de sauvegarde particulier est stocké dans spbrtoc.xml à la racine de l'emplacement. Chaque opération de sauvegarde et de restauration est représentée dans le fichier par un élément <SPHistoryObject>. S'il s'agit d'une sauvegarde, l'enfant <IsBackup> de l'élément <SPHistoryObject> a la valeur « True ». L'élément <SPId> de l'élément <SPHistoryObject> contient le GUID de la sauvegarde.

    Remarque Remarque :

    Pour obtenir grâce à la programmation la liste de toutes les opérations de sauvegarde et de restauration, utilisez la méthode GetHistory. Celle-ci renvoie un objet SPBackupRestoreHistoryList qui contient les objets SPBackupRestoreHistoryObject. Chacun de ces derniers représente une opération et stocke son GUID dans la propriété SelfId.

    settings.BackupId = new Guid("GUID");
    
  5. Vous pouvez définir l'une ou l'autre des propriétés IsVerbose et UpdateProgress, ou les deux. (Pour plus d'informations sur ces propriétés, voir les rubriques qui les concernent.)

    settings.IsVerbose = true;
    settings.UpdateProgress = 10;
    
  6. Au besoin, définissez les propriétés FarmAdminLoginName et FarmAdminLoginPassword.

    settings.FarmAdminLoginName = "Bob";
    settings.FarmAdminPassword = "7*j2U";
    
  7. Créez l'opération de restauration avec la méthode CreateBackupRestore. (Un objet historique est également créé pour l'opération.)

    Guid restore = SPBackupRestoreConsole.CreateBackupRestore(settings);
    
  8. Si votre interface utilisateur comporte des utilisateurs, tapez un nom de composant au lieu d'en sélectionner un dans une liste ; vous devez être sûr que le nom entré correspond exactement à un composant. Ajoutez la ligne suivante à votre méthode Main.

    SPBackupRestoreObject node = EnsureUniqueValidComponentName(settings, ref restore);
    
  9. Ajoutez l'implémentation suivante de votre méthode EnsureUniqueValidComponentName. Utilisez la méthode FindItems pour récupérer une collection d'objets de contenu dont le nom correspond au nom entré par l'utilisateur. S'il n'existe aucune correspondance, demandez à l'utilisateur de recommencer. S'il y en a plusieurs, invitez l'utilisateur à être plus précis. Si le nom du composant que l'utilisateur a entré est valide et sans ambiguïté, obtenez une référence à l'objet SPBackupRestoreObject qui représente le composant que l'utilisateur souhaite restaurer.

    private static SPBackupRestoreObject EnsureUniqueValidComponentName(SPBackupRestoreSettings settings, ref Guid operationGUID)
    {
        SPBackupRestoreObjectCollection list = SPBackupRestoreConsole.FindItems(operationGUID, settings.IndividualItem);
        SPBackupRestoreObject component = null;
    
        if (list.Count <= 0)
        {
            Console.WriteLine("There is no component with that name. Run again with a new name.");
            Console.WriteLine("Press Enter to continue.");
            Console.ReadLine();
        }
        else if (list.Count > 1)  // The component name specified is ambiguous. Prompt user to be more specific.
        {
            Console.WriteLine("More than one component matches the name you entered.");
            Console.WriteLine("Run again with one of the following:");
            for (int i = 0; i < list.Count; i++)
            {
                Console.WriteLine("\t{0}", list[i].ToString());
            }
            Console.WriteLine("Press Enter to continue.");
            Console.ReadLine();
        }
        else
        {
            component = list[0];
        }
    
        return component;
    
    }
    
  10. Dans la méthode Main, créez une structure conditionnelle qui ne s'exécute que si votre méthode EnsureUniqueValidComponentName a renvoyé un nœud valide.

    if (node != null)
    {
        // TODO: Set the restore operation as the active operation
        // and run it.
    }
    
  11. Remplacez la ligne « TODO » de l'étape précédente par le code suivant. Cela définit l'opération comme étant l'opération active avec la méthode SetActive et vérifie son succès. En cas d'échec, ce qui se produit si une autre opération de sauvegarde ou de restauration est déjà en cours d'exécution, une erreur est signalée sur l'interface utilisateur de votre application.

    if (SPBackupRestoreConsole.SetActive(restore) == true)
    {
        // TODO: Run the operation. See next step.
    }
    else
    {
        // Report through your UI that another backup
        // or restore operation is underway. 
        Console.WriteLine("Another backup or restore operation is already underway. Try again when it ends.");
    }
    
  12. Dans la branche de code qui s'exécute en cas de succès de l'appel SetActive, l'opération est exécutée avec la méthode Run. Vérifiez que l'opération réussit. En cas d'échec, un message signalant l'échec de l'opération s'affiche sur votre interface utilisateur. Le code suivant remplace la ligne « TODO » de l'étape précédente.

    if (SPBackupRestoreConsole.Run(restore, node) == false)
    {
        // Report "error" through your UI.
        String error = SPBackupRestoreConsole.Get(restore).FailureMessage;
        Console.WriteLine(error);
    }
    
  13. Nettoyez la restauration avec la méthode Remove. Ajoutez le code suivant juste avant l'accolade fermante que vous avez insérée à l'étape 10.

    // Clean up the operation.
    SPBackupRestoreConsole.Remove(restore);
    
    Console.WriteLine("Restore attempt complete. Press Enter to continue.");
    Console.ReadLine();
    
    

Exemple

Le code suivant indique comment programmer la restauration d'un composant de contenu. Remplacez l'espace réservé \\Server\WSSBackups par le chemin d'accès à l'emplacement de votre sauvegarde. L'exécutable y trouve automatiquement la sauvegarde la plus récente.

using System;
using Microsoft.SharePoint.Administration;
using Microsoft.SharePoint.Administration.Backup;

namespace MyCompany.SharePoint.Administration.Backup
{
    class Restore
    {
        static void Main(string[] args)
        {
            // Create the restore settings.
            SPRestoreSettings settings = SPBackupRestoreSettings.GetRestoreSettings(@"\\Server\WSSBackups", "Overwrite");

            // Identify the content component to restore.
            Console.Write("Enter name of component to restore (default is whole farm):");
            settings.IndividualItem = Console.ReadLine();
            
            // Set optional operation parameters.
            settings.IsVerbose = true;
            settings.UpdateProgress = 10;
            
            // Create the restore operation and return its ID.
            Guid restore = SPBackupRestoreConsole.CreateBackupRestore(settings);

            SPBackupRestoreObject node = EnsureUniqueValidComponentName(settings, ref restore);

            if (node != null)
            {
                // Set the restore as the active job and run it.
                if (SPBackupRestoreConsole.SetActive(restore) == true)
                {
                    if (SPBackupRestoreConsole.Run(restore, node) == false)
                    {
                        // Report "error" through your UI.
                        String error = SPBackupRestoreConsole.Get(restore).FailureMessage;
                        Console.WriteLine(error);
                    }
                }
                else
                {
                    // Report through your UI that another backup
                    // or restore operation is underway. 
                    Console.WriteLine("Another backup or restore operation is already underway. Try again when it ends.");
                }

                // Clean up the operation.
                SPBackupRestoreConsole.Remove(restore);

                Console.WriteLine("Restore attempt complete. Press Enter to continue.");
                Console.ReadLine();
            }
        }// end Main

        private static SPBackupRestoreObject EnsureUniqueValidComponentName(SPBackupRestoreSettings settings, ref Guid operationGUID)
        {
            SPBackupRestoreObjectCollection list = SPBackupRestoreConsole.FindItems(operationGUID, settings.IndividualItem);
            SPBackupRestoreObject component = null;

            if (list.Count <= 0)
            {
                Console.WriteLine("There is no component with that name. Run again with a new name.");
                Console.WriteLine("Press Enter to continue.");
                Console.ReadLine();
            }
            else if (list.Count > 1)  // The component name specified is ambiguous. Prompt user to be more specific.
            {
                Console.WriteLine("More than one component matches the name you entered.");
                Console.WriteLine("Run again with one of the following:");
                for (int i = 0; i < list.Count; i++)
                {
                    Console.WriteLine("\t{0}", list[i].ToString());
                }
                Console.WriteLine("Press Enter to continue.");
                Console.ReadLine();
            }
            else
            {
                component = list[0];
            }

            return component;

        }// end EnsureUniqueValidComponentName

    }// end Restore class
}// end namespace

Voir aussi

Afficher: