La classe NsExecutionRequest décrit une demande d'exécution d'une sauvegarde par le serveur.
Une demande d'exécution permet de demander à un agent client d'exécuter une sauvegarde donnée. La demande est stockée dans une file de messages consultée périodiquement par l'agent client, ce qui explique que le déclenchement ne soit pas immédiat et que le logiciel propose des méthodes destinées à suivre le traitement des demandes d'exécution créées.
Depuis la version 8 du logiciel, il est possible de déclencher au choix des sauvegardes sur le serveur, et des sauvegardes locales. Si le champ ServerBackupID désigne une sauvegarde valide, la sauvegarde serveur sera déclenchée. Si le champ LocalBackupID désigne une sauvegarde locale valide, la sauvegarde locale sera déclenchée.
Comme les sauvegardes peuvent être attribuées à plusieurs utilisateurs, vous devez préciser à la fois l'identifiant de la sauvegarde (dans ServerBackupID) et de l'utilisateur (UserID) lors de la création d'une demande d'exécution.
Les demandes d'exécution sont créées en initialisant les champs de l'objet puis en appelant la méthode CreateExecutionRequest, via la méthode CreateExecutionRequestForUser d'un objet NsBackup, ou via la méthode CreateExecutionRequestForBackup d'un objet NsUser. Une fois créée, les paramètres de la requête ne peuvent être modifiés.
Si l'utilisateur cible est connecté, le logiciel essaie d'utiliser le canal serveur-à-client pour la faire exécuter immédiatement par l'utilisateur, sinon, la demande est déposée dans la file des demandes d'exécution à traiter par l'agent client.
Pour que les demandes d'exécution soient correctement traitées, le "Service d'exécution en arrière-plan" doit-être démarré sur le poste client.
L'identificateur unique de la demande d'exécution.
La date de création de la demande d'exécution sur le serveur de sauvegarde, au format UTC.
L'identificateur unique de la sauvegarde serveur (NsBackup) à exécuter.
L'identificateur unique de la sauvegarde locale (NsLocalBackup) à exécuter.
L'identificateur unique de l'utilisateur (NsUser) devant exécuter la sauvegarde. L'utilisateur doit posséder la sauvegarde et des droits d'écriture sur celle-ci.
Réservé.
Le statut actuel de la demande d'exécution.
Un nombre entre 0 et 100 représentant le pourcentage de progression de l'opération.
L'identificateur d'événement de l'opération, de type NsOperationSummary, si elle a eu lieu.
Indique si la dernière exécution est arrivée à son terme.
Indique si l'exécution a réussie, c'est à dire que la sauvegarde est arrivée à son terme sans reporter aucune erreur.
Le nombre de fichiers sauvegardés si l'opération a été exécutée.
Le volume de données sauvegardé si l'opération a été exécutée.
Charge en mémoire la demande d'exécution d'identificateur RequestID.
Créée la demande d'exécution décrite par l'objet.
Mets à jour les indicateurs d'une demande précédemment chargée.
Supprime la demande d'exécution décrite par l'objet.
Set connection = CreateObject("NsAPI.NsConnection") Set sysutils = CreateObject("NsAPI.NsScriptUtils") const nsExecutionRequestStateWaiting = 1 const nsExecutionRequestStateExecuting = 2 const nsExecutionRequestStateNeedRetry = 3 const nsExecutionRequestStateFinishedNormally = 4 const nsExecutionRequestStateFinishedNonCompleted = 5 ' Renvoit une sauvegarde à partir de son nom Function FindBackupByName(backups, name) set FindBackupByName = Nothing for each backup in backups if StrComp(backup.Name, name, vbTextCompare) = 0 then set FindBackupByName = backup Exit Function end if next End Function if connection.ConnectToLocalServer then set server = CreateObject("NsAPI.NsServer") if server.Load(connection) then ' Demander un nom de sauvegarde backupName = InputBox("Saisissez le nom d'une sauvegarde sur le serveur (ex : Ma sauvegarde) : ", "Test de l'API UB", "") ' L'utilisateur a t-il saisi un nom de backup ? if backupName <> "" then set backup = FindBackupByName(server.AllBackups(connection), backupName) ' Est ce qu'on a bien trouvé une sauvegarde valide ? if backup is Nothing then MsgBox "Erreur : la sauvegarde """ & backupName & """ n'a pu être trouvée sur le serveur." else ' En théorie, la sauvegarde devrait être associée à un seul utilisateur. ' Néanmoins, le logiciel permet de partager une tâche avec plusieurs utilisateurs, ' par conséquent, on cherche l'utilisateur qui a des droits d'écriture sur la ' sauvegarde. ' ' Charger les associations set backupAssociations = backup.Associations(connection) userID = -1 ' On cherche l'utilisateur qui a les droits d'écriture for each association in backupAssociations if association.CanBackup then userID = association.UserID ' Trouvé ! end if next ' On vérifie qu'on l'a trouvé if sysutils.CompareInt64(userID, -1) = 0 then MsgBox "Aucun utilisateur ne peut actuellement exécuter la sauvegarde." else ' Créer la demande d'exécution set execRequest = CreateObject("NsAPI.NsExecutionRequest") execRequest.ID = -1 ' Constante nécessaire pour la création execRequest.ServerBackupID = backup.ID ' Affectation de l'ID de la sauvegarde à exécuter execRequest.UserID = userID ' Affectiation de l'ID de l'utilisateur devant l'exécuter executed = false if execRequest.CreateExecutionRequest(connection) then ' Créer la demande d'exécution do while true if not execRequest.LoadFromID(connection, execRequest.ID) then ' Mise à jour des infos MsgBox "Echec lors de la mise à jour des informations." exit do end if select case execRequest.State ' Inspection de l'état actuel de la demande d'exécution... case nsExecutionRequestStateWaiting: MsgBox "Attente du contact avec l'agent client..." case nsExecutionRequestStateExecuting: MsgBox "Sauvegarde en cours d'exécution..." case nsExecutionRequestStateNeedRetry: MsgBox "Attente de réexécution de la sauvegarde par l'agent client..." case nsExecutionRequestStateFinishedNormally: executed = true ' Terminé, on sort de la boucle ! exit do case nsExecutionRequestStateFinishedNonCompleted: MsgBox "Sauvegarde interrompue dans son exécution. Elle va être redéclenchée." end select loop if executed then ' On veut afficher des informations sur le résultat de l'exécution ' On utilise l'objet NsOperationSummary. set operationInfo = CreateObject("NsAPI.NsOperationSummary") if not operationInfo.LoadFromID(connection, execRequest.OperationSummaryID) then MsgBox "Impossible de charger les informations sur l'exécution de la sauvegarde." else strSummary = "La sauvegarde a été exécutée avec succès ! " & vbCrLf strSummary = strSummary & sysutils.Int64ToStr(operationInfo.DeleteCount) & " fichier(s) supprimé(s)" & vbCrLf strSummary = strSummary & sysutils.Int64ToStr(operationInfo.UpdateCount) & " fichier(s) mis à jour" & vbCrLf strSummary = strSummary & sysutils.Int64ToStr(operationInfo.ErrorsCount) & " erreur(s)" & vbCrLf strSummary = strSummary & sysutils.SizeToStr(operationInfo.SentBytes) & " transférés." MsgBox strSummary end if end if else MsgBox "Impossible de créer la demande d'exécution." end if end if end if end if else MsgBox "Impossible de charger les informations serveur." end if connection.Disconnect else MsgBox "Connexion au serveur local impossible." end if