class NsExecPlanMember

La classe NsExecPlanMember représente un membre d'un plan d'exécution, pointant sur une sauvegarde, un utilisateur ou un groupe d'utilisateurs. Si le membre ne désigne pas directement une sauvegarde, la liste des sauvegardes à exécuter est déterminée en obtenant la liste complète des sauvegardes attribuées au membre lors du début du plan d'exécution.

ID : __int64

L'identificateur unique du membre du plan d'exécution. Les constantes suivantes peuvent-être utilisées :

  • THEXECPLANMEMBER_CREATE = -1 : l'objet n'existe pas et doit être créé.

ExecPlanID : __int64

L'identificateur unique du plan d'exécution parent, de type NsExecPlan.

MemberType : enum NsExecPlanMemberType

Le type du membre : sauvegarde, utilisateur, ou groupe d'utilisateurs.

MemberID : __int64

L'identifiant numérique du membre.

Options : long

Réservé.

VARIANT_BOOL LoadFromID(NsConnection Connection, __int64 ExecPlanMemberID)

Charge en mémoire le plan d'exécution d'identificateur ExecPlanMemberID.

VARIANT_BOOL Update(NsConnection Connection)

Met à jour le membre représenté par l'objet.

VARIANT_BOOL Delete(NsConnection Connection)

Supprime le membre représentée par l'objet.

Création d'un plan d'exécution avec une liste d'objets saisis par l'utilisateur

Set connection = CreateObject("NsAPI.NsConnection")
Set sysutils = CreateObject("NsAPI.NsScriptUtils")

const epdExecPlanDayNone = &h00000000
const epdExecPlanDayMonday = &h00000001
const epdExecPlanDayTuesday = &h00000002
const epdExecPlanDayWednesday = &h00000004
const epdExecPlanDayThursday = &h00000008
const epdExecPlanDayFriday = &h00000010
const epdExecPlanDaySaturday = &h00000020
const epdExecPlanDaySunday = &h00000040

const mtBackup = 1
const mtUser = 2
const mtGroup = 3

' Renvoit une sauvegarde à partir de son nom
Function FindBackupByName(backups, connection, 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

' Renvoit un groupe d'utilisateurs à partir de son nom
Function FindGroupByName(groups, connection, name)
  set FindGroupByName = nothing

  for each group in groups
    if StrComp(group.Description, name, vbTextCompare) = 0 then
      set FindGroupByName = group
      Exit Function
    end if
  next
End Function

' Renvoit un utilisateur à partir de son nom
Function FindUserByName(groups, connection, name)
  set FindUserByName = nothing

  for each group in groups
    set users = group.Users(connection)
    
    for each user in users
      if StrComp(user.Description, name, vbTextCompare) = 0 then
        set FindUserByName = user
        Exit Function
      end if
    next
  next
End Function


if connection.ConnectToLocalServer then
  set server = CreateObject("NsAPI.NsServer")

  if server.Load(connection) then ' Chargement des infos serveur
    set groupsList = server.UserGroups(connection)
    set backupsList = server.AllBackups(connection)
  
    execPlanName = InputBox("Saisissez le nom du plan d'exécution à créer:", "Test de l'API UB", "")
    
    if execPlanName <> "" then
      set execPlan = CreateObject("NsAPI.NsExecPlan")

      execPlan.ID = -1 'Constante nécessaire pour créer le plan
      execPlan.Name = execPlanName
      execPlan.StartHour = 20 'Heure de début de plan: 20h
      execPlan.StopHour = 6 'Heure de fin de plan : 6h du matin
      execPlan.Days = epdExecPlanDayMonday or epdExecPlanDayTuesday or epdExecPlanDayWednesday or epdExecPlanDayThursday or epdExecPlanDayFriday ' Tous les jours de la semaine
      execPlan.AllBackups = false ' On va spécifier les membres manuellement
      execPlan.MaxConcurrentBackups = 3 '3 sauvegardes à la fois
      execPlan.MaxOperationsToKeep = 10 '10 exécutions à garder
      execPlan.ReportingMode = 0 'Pas d'e-mails de notification
      execPlan.Options = 0 'Pas d'options supplémentaires

     if not execPlan.Update(connection) then 'Création sur le serveur
       MsgBox "Impossible de créer le plan d'exécution."
     else
       set memberToAdd = CreateObject("NsAPI.NsExecPlanMember")
       do while true
         objectFound = false
         
         ' Demander à saisir le nom de l'objet à ajouter au plan d'exécution
         objectName = InputBox("Saisissez le nom d'un object à ajouter au plan :", "Test de l'API UB", "")
         
         if objectName = "" then
           Exit Do ' L'utilisateur a annulé la saisie. On sort de la boucle.
         end if
       
         ' D'abord, chercher une sauvegarde portant le nom saisi.
         set backupObj = FindBackupByName(backupsList, connection, objectName)
         
         ' Une sauvegarde correspond !
         if not backupObj is nothing then
            objectFound = true
           ' L'objet entré est une sauvegarde.
            memberToAdd.ID = -1
            memberToAdd.ExecPlanID = execPlan.ID
            memberToAdd.MemberType = mtBackup
            memberToAdd.MemberID = backupObj.ID
            memberToAdd.Options = 0
            
            if not memberToAdd.Update(connection) then ' Ajout du membre.
              MsgBox "Impossible d'ajouter la sauvegarde " & backupObj.Name & " au plan d'exécution."
            else
              If MsgBox("La sauvegarde " & backupObj.Name & " a été ajoutée avec succès. Souhaitez-vous ajouter d'autres membres ?", vbQuestion + vbYesNo + vbApplicationModal, "Test de l'API UB") = vbNo then
                Exit Do
              end if
            end if
         end if
         
         if not objectFound then
           ' Ensuite, chercher un utilisateur portant le nom saisi.
           set userObj = FindUserByName(groupsList, connection, objectName)
           
           if not userObj is nothing then
              objectFound = true
             ' L'objet entré est un utilisateur.
              memberToAdd.ID = -1
              memberToAdd.ExecPlanID = execPlan.ID
              memberToAdd.MemberType = mtUser
              memberToAdd.MemberID = userObj.ID
              memberToAdd.Options = 0

              if not memberToAdd.Update(connection) then ' Ajout du membre.
                MsgBox "Impossible d'ajouter l'utilisateur " & userObj.Description & " au plan d'exécution."
              else
                If MsgBox("L'utilisateur " & userObj.Description & " a été ajouté avec succès. Souhaitez-vous ajouter d'autres membres ?", vbQuestion + vbYesNo + vbApplicationModal, "Test de l'API UB") = vbNo then
                  Exit Do
                end if
              end if
           end if
         end if
         
         if not objectFound then
           ' Enfin, chercher un utilisateur portant le nom saisi.
           set groupObj = FindGroupByName(groupsList, connection, objectName)
         
           if not groupObj is nothing then
              objectFound = true
              ' L'objet entré est un groupe.
              memberToAdd.ID = -1
              memberToAdd.ExecPlanID = execPlan.ID
              memberToAdd.MemberType = mtGroup
              memberToAdd.MemberID = groupObj.ID
              memberToAdd.Options = 0

              if not memberToAdd.Update(connection) then ' Ajout du membre.
                MsgBox "Impossible d'ajouter le groupe " & groupObj.Description & " au plan d'exécution."
              else
                If MsgBox("Le groupe " & groupObj.Description & " a été ajouté avec succès. Souhaitez-vous ajouter d'autres membres ?", vbQuestion + vbYesNo + vbApplicationModal, "Test de l'API UB") = vbNo then
                  Exit Do
                end if
              end if
           end if
         end if
         
         ' Si on arrive ici, aucun objet pourtant le nom saisi n'a pu être trouvé.
         if not objectFound then
           MsgBox "Aucun utilisateur, groupe d'utilisateurs, ou sauvegarde portant le nom """ & objectName & """ n'a pu être trouvé."
         end if
       loop
       
       if not execPlan.Update(connection) then ' Mise à jour
         MsgBox "Impossible de mettre à jour le plan d'exécution."
       else
         MsgBox "Le plan d'exécution a été créé, il contient actuellement " & execPlan.members(connection).Count & " membres."
       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