Page 1 sur 1

jongler avec les agents schedule en LS

MessagePublié: 02 Déc 2009 à 11:06
par Ahamay
Hello @ll

Objectif : Attaquer les Agents schedules d'une Db afin de les bidouiller en back (les passer enable/ disable, récupérer et changer leur propriétés -genre fréquence d'execution, server d'execution.... etc)

une piste ?

Merci d'avance (j'fais le gros fléau aujourd'hui, je vous demande avant même d'avoir chercher. m'enfin, ya des jours avec et des jours sans ! )

:dormir042:

MessagePublié: 02 Déc 2009 à 11:50
par Michael DELIQUE
salut

une début
Code : Tout sélectionner
 Function AgentConvert(wDB As NotesDatabase, wPseudoAgent As String, wConverTO As String) As Integer
   
   'permet une cnversion privé <=> partagé des agents
   
   'Déclaration Variable
   Dim Doc As NotesDOcument
   Dim agent As NotesAgent
   Dim ConverTO As String
   Dim DBCible As NotesDatabase
   Dim FullName As String
   Dim i As Long
   Dim Flags As String
   Dim AssistFlags As String
   Dim lstAssistFlags List As String
   Dim lstFlags List As String
   Dim nbPrivate As Integer
   
   On Error Goto ErreurHandle
   
   'détect si un pseudo est passé en parametre
   If Trim(wPseudoAgent) = "" Then
      Error 9999,"wPseudoAgent vide"
      AgentConvert = False
      Exit Function
   End If
   
   'détect vers quelle type d'agent l'on veut passer
   Select Case Ucase(Trim(wConverTO))
   Case "P","PRI","PRIVE","PRIVATE"
      ConverTO = "P"
   Case "S","SHA","SHARE","SHARED","PAR","PARTAGE","PARTAGER"
      ConverTO = "S"
   Case Else
      'conversion automatique dans l'autre état
      ConverTO = ""
   End Select
   
   'initialise la base ou est l'agent
   If Not wDB Is Nothing Then
      Set DBCible = wDB
   Else
      If Session Is Nothing Then
         Set Session = New NotesSession
      End If
      Set DBCible = Session.CUrrentdatabase
   End If
   
   'connextion a l'agent pour tester s'il existe et recupérer son nom
   Set Agent = Nothing
   Set Agent = DBCible.GetAgent(Trim(wPseudoAgent))
   If  Agent Is Nothing Then
      AgentConvert = False
      Exit Function
   End If
   
   FullName = Trim(Cstr(Agent.Name))
   Set Agent = Nothing
   
   AssistFlags = ""
   Flags = ""
   
   lstFlags(1) = ""
   lstFlags(2) = ""
   lstFlags(3) = ""
   
   lstAssistFlags(1) = ""
   lstAssistFlags(2) = ""
   lstAssistFlags(3) = ""
   
   'passe en revue tous les document possibles
   For i = 1 To 65535
      On Error Resume Next
      Set Doc = DBCible.GetDocumentByID (Cstr(Hex( i)))
      On Error Goto ErreurHandle
      If Not Doc Is Nothing Then
         If Doc.HasItem ("$AssistFlags") Then   
            If Trim(Cstr(Doc.GetItemValue("$TITLE")(0))) = FullName Then
               
            'récupere les information permettant de déclarer un agent privé ou paratgé
               AssistFlags = Trim(Cstr(Doc.GetItemValue("$AssistFlags")(0)))
               Flags = Trim(Cstr(Doc.GetItemValue("$Flags") (0)))
               
               If Len(AssistFlags) = 3 Then
               'l'agent est privé
                  lstAssistFlags(1) = Left(Trim(AssistFlags),1)
                  lstAssistFlags(2) = Mid(Trim(AssistFlags),2,1)
                  lstAssistFlags(3) = Right(Trim(AssistFlags),1)
                  nbPrivate = True
               Else
               'l'agent est partagé
                  lstAssistFlags(1) = Left(Trim(AssistFlags),1)
                  lstAssistFlags(2) = ""
                  lstAssistFlags(3) = Right(Trim(AssistFlags),1)
                  nbPrivate = False
               End If
               
               If Len(Flags) = 3 Then
                  lstFlags(1) = Left(Trim(Flags),1)
                  lstFlags(2) = Mid(Trim(Flags),2,1)
                  lstFlags(3) = Right(Trim(Flags),1)
               Else
                  lstFlags(1) = Left(Trim(Flags),1)
                  lstFlags(2) = ""
                  lstFlags(3) = Right(Trim(Flags),1)
               End If
               
               AssistFlags = ""
               Flags = ""
               
               Select Case ConverTO
               Case "P"
                  If nbPrivate = True Then
                     'si l'agent est déja privé rien a faire
                     AgentConvert = True
                     Exit Function
                  End If
                  'converti les parametres
                  AssistFlags = lstAssistFlags(1)+lstAssistFlags(3)
                  Flags = lstFlags(1)+lstFlags(3)
               Case "S"
                  If nbPrivate = False Then
                     'si l'agent est déja partagé rien a faire
                     AgentConvert = True
                     Exit Function
                  End If
                  'converti les parametres
                  AssistFlags = lstAssistFlags(1)+"P"+lstAssistFlags(3)
                  Flags = lstFlags(1)+"V"+lstFlags(3)
               Case Else
                  'conversion automatique dans l'autre état
                  If nbPrivate = True Then
                     AssistFlags = lstAssistFlags(1)+lstAssistFlags(3)
                     Flags = lstFlags(1)+lstFlags(3)
                  Else
                     AssistFlags = lstAssistFlags(1)+"P"+lstAssistFlags(3)
                     Flags = lstFlags(1)+"V"+lstFlags(3)
                  End If
               End Select
               
               'passe et enregistre les paramtres
               Call Doc.ReplaceItemValue("$AssistFlags", AssistFlags)
               Call Doc.ReplaceItemValue("$Flags", Flags)
               Call Doc.save(True,False)
               
               AssistFlags = ""
               Flags = ""
               Set Doc = Nothing
               Set DBCible = Nothing
               FullName = ""
               Erase lstAssistFlags
               Erase lstFlags
               i = 0
               
               'sort de la fonction
               AgentConvert = True
               Exit Function
            End If
         End If
      End If
      Set Doc = Nothing
   Next
   
   Set DBCible = Nothing
   FullName = ""
   Erase lstAssistFlags
   Erase lstFlags
   
   AgentConvert = False
   Exit Function
ErreurHandle:
   Erase lstAssistFlags
   Erase lstFlags
   Set Doc = Nothing
   Set DBCible = Nothing
   Set Agent = Nothing
   FullName = ""
   AssistFlags = ""
   Flags = ""
   i = 0
   Msgbox "("+Cstr(Getthreadinfo (1))+" Call by "+Cstr(Getthreadinfo(10))+")"+Chr(10)+"Erreur " + Str(Err) + " : "+Chr(10) + Cstr(Error)+". "+Chr(10)+"Ligne N° "+Cstr(Erl),16," ERREUR !"
   Exit Function
End Function

MessagePublié: 02 Déc 2009 à 11:57
par Michael DELIQUE

MessagePublié: 02 Déc 2009 à 13:29
par Ahamay
Comme d'hab' : un BIG :merci: Michael

MessagePublié: 08 Déc 2009 à 12:24
par d.bugger
Solution alternative :
- crée qu'un seul agent
- avec tous les agents comme fonctions
- l'agent sera toujours actif
- il ouvre un doc profil
- dans le doc profil tu peux paramétrer quelle fonction devrait être exécutée et quand

Très "clean"...

MessagePublié: 08 Déc 2009 à 15:12
par Ahamay
@d.bugger : Bin ouaip, tres clean, mais quand tu récupères une bonne centaines de bases développées à la va-comme-jte-pousse suceptibles d'etres archivées et donc nécessitant de désactiver tous les agents schedulés..... :mur:

MessagePublié: 08 Déc 2009 à 15:29
par d.bugger
Tell AMGR Quit

:D

MessagePublié: 08 Déc 2009 à 15:31
par Michael DELIQUE
Format c:\

MessagePublié: 08 Déc 2009 à 15:42
par Ahamay
p'tits joueurs......
un bon gros electro-aimant sur l'uc.....

Bon ceci dit, mon besoin c'était donc de disable les agent schedulés.... bin c'est tout bon.

Et un autre tip, un :)

http://forum.dominoarea.org/viewtopic,p,123425.html#123425