Agent qui se lance, mais ne se lance pas ??!

Forum destiné aux questions sur le développement : Formules, LotusScript, Java ...

Agent qui se lance, mais ne se lance pas ??!

Messagepar souscolline » 08 Juin 2010 à 08:51

Bonjour,

J'ai un agent sur plusieurs bases Lotus et sur plusieurs serveurs.
Sur certaines bases/serveurs tout va bien et je suis ravie :) .

Par contre sur une des bases, l'agent semble se lancer, quand je regarde l'historique de l'agent il me dit bien qu'il s'est lancé à 8:45 AM le 08/06, mais quand je regarde dans une vue de controle avec les documents qui auraient dus être modifiés par l'agent, catastrophe ils sont toujours là !!!

J'ai créé un bouton qui se contente de lancer l'agent **§@!! et là ça fonctionne l'agent se lance et traite mes documents.

Mais moi ce que je souhaite c'est que ma plannif de l'agent fonctionne :? , pas d'être obligée de cliquer sans cesse sur le bouton. :cry:

Sur le serveur, l'administrateur a modifié le format de date pour qu'il correspondent à celui de l'agent, mais baste ! ça n'a pas suffit ...


Ca fait un moment qu'on galère sur le sujet, et franchement ce serait super de le virer de la pile !

Quelqu'un aurait-il une idée :idea: ? La solution même :wink: !

Merci pour votre aide.
Avatar de l’utilisateur
souscolline
Premier posts
Premier posts
 
Message(s) : 16
Inscrit(e) le : 21 Déc 2004 à 12:54
Localisation : Vendée

Messagepar Michael DELIQUE » 08 Juin 2010 à 09:14

salut

- as tu inséré une gestion des erreurs dans ton agent ?
- un objet en NotesUI qui traine ?
- un pb de signature ?
Cordialement

Michael (SMS-Phobique)
----------------------------
"La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi."
Albert EINSTEIN
Avatar de l’utilisateur
Michael DELIQUE
Administrateur
Administrateur
 
Message(s) : 12183
Inscrit(e) le : 16 Déc 2004 à 10:36
Localisation : Paris/Cergy

Messagepar souscolline » 08 Juin 2010 à 09:34

La signature est partout la même, c'est admin, est-ce-qu'à ton avis il faudrait signer la base avec le serveur ?

La gestion d'erreur ne renvoie pas d'erreur, tout est ok (semble-t-il ...) :

Started running agent 'Activer documents approuvés' on 08/06/2010 08:45:56 AM
Running on all documents in database: 521 total
Found 2 document(s) that match search criteria
Ran LotusScript code
Done running agent 'Activer documents approuvés' on 08/06/2010 08:45:56 AM


Qu'entends-tu par un NotesUI qui traîne ? Pourquoi l'agent marche sur d'autres bases dans ce cas ??

Merci pour ta réponse :)
Google est ton ami, mais Murphy aussi ... so be careful :wink:
Avatar de l’utilisateur
souscolline
Premier posts
Premier posts
 
Message(s) : 16
Inscrit(e) le : 21 Déc 2004 à 12:54
Localisation : Vendée

Messagepar Michael DELIQUE » 08 Juin 2010 à 09:38

re

les objet en NotesUI nefonctionnent pas avec les agent schédullé (c'étais juste une piste)

sinon colle des print/msgbox un peu partout dans ton agent pour voir ou il s'arrete


dis moi comment tu selectionne les docs dans ton agent ?
Cordialement

Michael (SMS-Phobique)
----------------------------
"La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi."
Albert EINSTEIN
Avatar de l’utilisateur
Michael DELIQUE
Administrateur
Administrateur
 
Message(s) : 12183
Inscrit(e) le : 16 Déc 2004 à 10:36
Localisation : Paris/Cergy

Messagepar souscolline » 08 Juin 2010 à 09:54

Dans Sélection de documents, j'ai mis : Dans le dossier "Outils\Transition"

Dans mes déclarations, j'ai ça :

[syntax="LotusScript"]Dim session As NotesSession
Dim db As NotesDatabase
Dim uidoc As NotesUIDocument
Dim collection As NotesDocumentCollection
Dim docfils As NotesDocument
Dim docgrandpere As NotesDocument
Dim docpere As NotesDocument

Dim fTitreMQ As String[/syntax]

Je n'ai pas l'impression de faire des trucs super compliqués, mais y'en a un qui m'échappe c'est sûr ?!?

voili, voilà ...
Google est ton ami, mais Murphy aussi ... so be careful :wink:
Avatar de l’utilisateur
souscolline
Premier posts
Premier posts
 
Message(s) : 16
Inscrit(e) le : 21 Déc 2004 à 12:54
Localisation : Vendée

Messagepar Michael DELIQUE » 08 Juin 2010 à 10:04

re,

tu peut montrer tout ton code ?
Cordialement

Michael (SMS-Phobique)
----------------------------
"La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi."
Albert EINSTEIN
Avatar de l’utilisateur
Michael DELIQUE
Administrateur
Administrateur
 
Message(s) : 12183
Inscrit(e) le : 16 Déc 2004 à 10:36
Localisation : Paris/Cergy

Messagepar souscolline » 08 Juin 2010 à 10:34

Alors voilà :

[Déclarations]
[syntax="LotusScript"]
Dim session As NotesSession
Dim db As NotesDatabase
Dim uidoc As NotesUIDocument
Dim collection As NotesDocumentCollection
Dim docfils As NotesDocument
Dim docgrandpere As NotesDocument
Dim docpere As NotesDocument

Dim fTitreMQ As String

' Paramétrage
Const PRM_ERREUR = "[ERREUR PARAMETRAGE]"
Const PRM_NEXISTE = "Il n'existe pas de document de paramétrage : contactez l'administrateur de la base."
[/syntax]

[Initialize]
[syntax="LotusScript"]
Sub Initialize
On Error Goto erreur
Set session = New notessession
Set db = session.CurrentDatabase

'--- Récupérer le document de profil
Set pdoc = db.GetProfileDocument("Profil")
If Not (pdoc Is Nothing ) Then
fTitreMQ = pdoc.NomManuel(0)
Else
Msgbox PRM_NEXISTE, MB_OK + 16, PRM_ERREUR
Exit Sub
End If

Set collection = db.UnprocessedDocuments
If (collection.count = 0) Then Exit Sub

Set docfils = collection.GetFirstDocument

Print "Début : "+Cstr(Now)
i = 0

' docfils = document approuvé masque [DocMaj] ou [ManuelMaj]
Do While Not docfils Is Nothing
i = i+1
Select Case docfils.WF_Etat(0)
Case "4"
'cas des documents validés en attente d'être activés
Etat4Traiter
End Select
session.UpdateProcessedDoc docfils
Set docfils = collection.GetNextDocument(docfils)
Loop
Print "Nombre de documents traités : "+Cstr(i )
Print "Fin : "+Cstr(Now)
Exit Sub
erreur :
Print "Erreur !"
Print "Document n° : "+Cstr(i)
Print "Error" & Str(Err) & ": " & Error$
Resume Next
End Sub
[/syntax]

[Etat4Traiter]
[syntax="LotusScript"]
Sub Etat4Traiter
Dim ws As New NotesUIWorkspace

'en cas d'erreur on continue le processus
On Error Goto erreur

Select Case docfils.Form(0)
Case "ManuelMaj"
' docpere = document parent de docfils = masque [Manuel]
' Archivage du document père, transformation du fils en [Manuel]
Set docpere = db.GetDocumentByUNID(docfils.IDParent(0))
docpere.WF_Etat = "6"
docpere.WF_Date = Now
docpere.LIBELLEETAT = "Archivé"
docpere.DEMANDEENCOURS = ""
Call docpere.Save (True,False)

docfils.Form="Manuel"
docfils.COMMENTAIREDIFFUSION=""
docfils.DEMANDEENCOURS = ""
docfils.LIBELLEETAT = "Actif"

docfils.WF_Etat="5"
docfils.WF_Date = Now
docfils.WF_Auteurs =""

' Mettre à jour les champs concernant les modifications
ModificationsMaj

Call docfils.Save (True, False)

' Màj hiérarchie => Les fils du document archivé sont maintenant ceux du document actif
HierarchieMaj

Set uidoc = ws.EditDocument( True, docfils )
Call uidoc.Reload
Call uidoc.Save
Call uidoc.Close

' Oter les commentaires
CommentairesOter docpere
Case "DocMaj"
' docpere = document parent de docfils = masque [Document] (celui à partir duquel on a créé la demande màj)
' docgrandpere = document parent de docpere
' Archivage de docpere, transformation de docfils en [Document] avec un statut "Actif"
Set docpere = db.GetDocumentByUNID(docfils.IDParent(0))
Set docgrandpere = db.GetDocumentByUNID(docpere.IDParent(0))
docpere.WF_Etat = "6"
docpere.WF_Date = Now
docpere.LIBELLEETAT = "Archivé"
docpere.DEMANDEENCOURS = ""
Call docpere.Save(True,False)

docfils.Form="Document"
docfils.IDParent = docgrandpere.IDGeneral(0) 'Le parent du docfils est celui de docpere qui va être archivé
docfils.MakeResponse docgrandpere
docfils.INFOPERE = "Codification : " + docgrandpere.TRITYPEDOCUMENT(0) + docgrandpere.RADICAL(0) + " Titre : " + docgrandpere.TITRE1(0)

' Mettre à jour les champs concernant les modifications
ModificationsMaj

docfils.COMMENTAIREDIFFUSION=""
docfils.DEMANDEENCOURS = ""
docfils.LIBELLEETAT = "Actif"
docfils.Wf_Date = Now
docfils.WF_Etat = "5"

Call docfils.Save (True,False)

' Màj hiérarchie => Les fils du document archivé sont maintenant ceux du document actif
HierarchieMaj

' Oter les commentaires
CommentairesOter docpere
Case "DocDel"
' docpere = document parent de docfils = masque [Document] (celui à partir duquel on a créé la demande Suppr)
' docgrandpere = document parent de docpere
' Archivage de docpere, transformation de docfils en archive lui aussi en lui donnant le même pere que docpere
Set docpere = db.GetDocumentByUNID(docfils.IDParent(0))
Set docgrandpere = db.GetDocumentByUNID(docpere.IDParent(0))
docpere.WF_Etat = "6"
docpere.WF_Date = Now
docpere.LIBELLEETAT = "Archivé"
docpere.DEMANDEENCOURS = ""
Call docpere.Save (True, False)

docfils.COMMENTAIREDIFFUSION=""
docfils.INFOPERE = "Codification : " + docgrandpere.TRITYPEDOCUMENT(0) + docgrandpere.RADICAL(0) + " Titre : " + docgrandpere.TITRE1(0)
docfils.DEMANDEENCOURS = ""
docfils.LIBELLEETAT = "Archivé"
docfils.WF_Etat = "6"
docfils.WF_Date = Now
docfils.WF_Auteurs = ""
docfils.WF_Createur = docfils.AUTEUR

docfils.IDParent = docgrandpere.IDGeneral 'nouveau père
docgrandpere.MakeResponse docfils

Call docfils.Save (True,False)

' Oter les commentaires
CommentairesOter docpere
Case "Manuel"
docfils.LIBELLEETAT = "Actif"
docfils.WF_Etat = "5"
docfils.WF_Date = Now
docfils.WF_Auteurs =""
docfils.WF_Createur = docfils.AUTEUR
docfils.COMMENTAIREDIFFUSION=""
Call docfils.Save (True, False)

Case "Document"
docfils.LIBELLEETAT = "Actif"
docfils.COMMENTAIREDIFFUSION=""
docfils.WF_Etat = "5"
docfils.WF_Date = Now
docfils.WF_Auteurs =""
docfils.WF_Createur = docfils.AUTEUR
Call docfils.Save (True,False)

End Select
Exit Sub
erreur :
Print "Agent ADA - Erreur Etat4Traiter :" & Str(Err) & ": " & Error$
Resume Next
End Sub
[/syntax]

[HierarchieMaj]
[syntax="LotusScript"]
Sub HierarchieMaj
Dim doctmp As NotesDocument
Dim colrep As Variant

'en cas d'erreur on continue le processus
On Error Goto ErreurAgent

Set colrep = docpere.Responses

If Not colrep Is Nothing Then
Set doctmp = colrep.GetFirstDocument

'on change les filiations des documents fils de l'ancienne version vers la nouvelle version
Do While Not doctmp Is Nothing
If (doctmp.UniversalID <> docfils.UniversalID) And Ucase(doctmp.Form(0)) <> "Commentaire" Then
doctmp.IDParent = docfils.UniversalID
doctmp.MakeResponse docfils
Call doctmp.Save(True, True)
End If
Set doctmp = colrep.GetNextDocument(doctmp)
Loop
End If
Exit Sub
ErreurAgent :
Print "Agent ADA - HierarchieMAJ" & Str(Err) & ": " & Error$
Resume Next
End Sub
[/syntax]

[ModificationsMaj]
[syntax="LotusScript"]
Sub ModificationsMaj
Dim rtitem As Variant
Dim sEntete As String
Dim sBody As String
Dim itemCourant As NotesItem
Dim itemSuivant As NotesItem
Dim iTotal As Integer

'en cas d'erreur on continue le processus
On Error Goto ErreurAgent

iTotal = Val(docfils.mCount(0)) + 1
docfils.mCount = Cstr(iTotal)

' PARTIE HISTORIQUE
Dim rstyle As NotesRichTextStyle ' bleu, gras, taille 10 pour le titre
Set rstyle = session.CreateRichTextStyle
rstyle.FontSize = 9
rstyle.Bold = True
rstyle.NotesColor = 10

sEntete = "INDICE : " + Cstr(docfils.emIndice(0)) + ESP_5 + "Le : " + Cstr(docfils.emDate(0)) + ESP_5 + "Par : " + Cstr(docfils.emWho(0))
sBody = docfils.emTexte(0)
Set rtitem = docfils.GetFirstItem( "hmTexte" )
Call rtitem.AddNewLine( 1 )
Call rtitem.AppendStyle(rstyle)
Call rtitem.AppendText( sEntete )

rstyle.FontSize = 8
rstyle.Bold = False
rstyle.NotesColor = 0
Call rtitem.AppendStyle(rstyle)
Call rtitem.AddNewLine( 1 )
Call rtitem.AppendText( sBody )
Call rtitem.AddNewLine( 2 )

'PARTIE TABLEAU
If iTotal < 7 Then
' On peut ajouter les historiques dans le tableau à imprimer
iNombre = iTotal
Else
' On doit décaler les lignes du tableau à imprimer vers le haut
For cpt = 1 To 5
nomCourant = "mIndice_" + Cstr(cpt)
nomSuivant = "mIndice_" + Cstr(cpt + 1)
Set itemCourant = docfils.GetFirstItem(nomCourant)
Set itemSuivant = docfils.GetFirstItem(nomSuivant)
itemCourant.Values = itemSuivant.Values

nomCourant = "mTexte_" + Cstr(cpt)
nomSuivant = "mTexte_" + Cstr(cpt + 1)
Set itemCourant = docfils.GetFirstItem(nomCourant)
Set itemSuivant = docfils.GetFirstItem(nomSuivant)
itemCourant.Values = itemSuivant.Values

nomCourant = "mWho_" + Cstr(cpt)
nomSuivant = "mWho_" + Cstr(cpt + 1)
Set itemCourant = docfils.GetFirstItem(nomCourant)
Set itemSuivant = docfils.GetFirstItem(nomSuivant)
itemCourant.Values = itemSuivant.Values

nomCourant = "mDate_" + Cstr(cpt)
nomSuivant = "mDate_" + Cstr(cpt + 1)
Set itemCourant = docfils.GetFirstItem(nomCourant)
Set itemSuivant = docfils.GetFirstItem(nomSuivant)
itemCourant.Values = itemSuivant.Values
Next
iNombre = 6
End If
nomCourant = "mIndice_" + Cstr(iNombre)
Set itemCourant = docfils.GetFirstItem(nomCourant)
itemCourant.Values = docfils.emIndice

nomCourant = "mTexte_" + Cstr(iNombre)
Set itemCourant = docfils.GetFirstItem(nomCourant)
itemCourant.Values = docfils.emTexte

nomCourant = "mWho_" + Cstr(iNombre)
Set itemCourant = docfils.GetFirstItem(nomCourant)
itemCourant.Values = docfils.emWho

nomCourant = "mDate_" + Cstr(iNombre)
Set itemCourant = docfils.GetFirstItem(nomCourant)
itemCourant.Values = docfils.emDate

Exit Sub ' sortie pour ne pas passer dans erreur si on n'en a pas ...

ErreurAgent :
Print "Agent ADA - ModificationsMAJ" & Str(Err) & ": " & Error$
Resume Next
End Sub
[/syntax]


[CommentairesOter]
[syntax="LotusScript"]
Sub CommentairesOter (ddoc As NotesDocument)
Dim vcmt As NotesView 'vue sur les commentaires

'en cas d'erreur on continue le processus
On Error Goto ErreurAgent

'Initialisations
Set s = New NotesSession
Set db = s.CurrentDatabase

Set vcmt = db.getview("vwCmt")
Call vcmt.Clear
Call vcmt.Refresh
Set cdoc = vcmt.GetDocumentByKey(Cstr(ddoc.IDGeneral(0)), False)

If (Not (cdoc Is Nothing)) Then
cdoc.Remove(True)
End If

Exit Sub
ErreurAgent :
Print "Agent ADA - CommentairesOter : " & Str(Err) & ": " & Error$
Resume Next
End Sub
[/syntax]


Y'a pas mal de code quand même, mais comme je te le disais sur certaines bases la plannif fonctionne pile poil :)

Merci de ton aide en tout cas !
Google est ton ami, mais Murphy aussi ... so be careful :wink:
Avatar de l’utilisateur
souscolline
Premier posts
Premier posts
 
Message(s) : 16
Inscrit(e) le : 21 Déc 2004 à 12:54
Localisation : Vendée

Messagepar Michael DELIQUE » 08 Juin 2010 à 10:42

re

Set collection = db.UnprocessedDocuments

comment ton agent schédulé peut récupéré les document sélectionné dans la vue ?

tu veux traiter tous les documents de la vue ?
Cordialement

Michael (SMS-Phobique)
----------------------------
"La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi."
Albert EINSTEIN
Avatar de l’utilisateur
Michael DELIQUE
Administrateur
Administrateur
 
Message(s) : 12183
Inscrit(e) le : 16 Déc 2004 à 10:36
Localisation : Paris/Cergy

Messagepar Michael DELIQUE » 08 Juin 2010 à 10:46

concernant ta gestion des erreurs, tu as uen commande pour récupérer en LS le nom de la fonction/sub en cours : Cstr(Getthreadinfo (1))

pour ma art j'utilise ça

Msgbox "("+Structure_Log+" : "+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 !"

Structure_Log est une constante global qui donne le type et le nom de l'element design (agent Script library, form) parcequ'on peut pas le récéupére en LS
Cordialement

Michael (SMS-Phobique)
----------------------------
"La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi."
Albert EINSTEIN
Avatar de l’utilisateur
Michael DELIQUE
Administrateur
Administrateur
 
Message(s) : 12183
Inscrit(e) le : 16 Déc 2004 à 10:36
Localisation : Paris/Cergy

Messagepar Michael DELIQUE » 08 Juin 2010 à 10:49

et hop des objet UI dans un agent schédulé

Set uidoc = ws.EditDocument( True, docfils )
Call uidoc.Reload
Call uidoc.Save
Call uidoc.Close

fonction Etat4Traiter
Cordialement

Michael (SMS-Phobique)
----------------------------
"La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi."
Albert EINSTEIN
Avatar de l’utilisateur
Michael DELIQUE
Administrateur
Administrateur
 
Message(s) : 12183
Inscrit(e) le : 16 Déc 2004 à 10:36
Localisation : Paris/Cergy

Messagepar souscolline » 08 Juin 2010 à 11:13

Ben oui, je veux récupérer tous les documents de la vue puisque celle-ci est construite exprès pour les documents du périmètre à traiter !

Bon d'accord y'a du UI et c'est pas bien :shock: mais si je ne mets pas ça, je mets quoi ??? :?:

Et puis aussi, pourquoi cet agent fonctionne sur d'autres serveurs en respectant sa plannif comme il faut et pas sur celui-ci alors que c'est le même agent ! hein d'abord ??? why ?

Ce serait pas un problème de config au niveau du serveur ?

Ou alors, je viens de regarder et la base est en v6 alors qu'on est en v8.5, ça peut jouer non ?

O rage, o désespoir, o vieillesse ennemie ... :cry:

A vous lire...
Google est ton ami, mais Murphy aussi ... so be careful :wink:
Avatar de l’utilisateur
souscolline
Premier posts
Premier posts
 
Message(s) : 16
Inscrit(e) le : 21 Déc 2004 à 12:54
Localisation : Vendée

Messagepar Michael DELIQUE » 08 Juin 2010 à 11:19

re,

donc tu peut remplacer

Set uidoc = ws.EditDocument( True, docfils )
Call uidoc.Reload
Call uidoc.Save
Call uidoc.Close

par Doc.computewithform mais ça bouffe en ressource ! ou simplement faire en LS les modif a faire sur ton doc si elle sont pas trop nombreuse.

pour le
Set collection = db.UnprocessedDocuments tu le remplace par un getfirst/gentnext directement sur la vue
Cordialement

Michael (SMS-Phobique)
----------------------------
"La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi."
Albert EINSTEIN
Avatar de l’utilisateur
Michael DELIQUE
Administrateur
Administrateur
 
Message(s) : 12183
Inscrit(e) le : 16 Déc 2004 à 10:36
Localisation : Paris/Cergy

Messagepar LSong » 08 Juin 2010 à 14:41

Dim ws As New NotesUIWorkspace

tout ce qui est UI ne marche pas quand tu es sur serveur
ca fait planté le programme

les UI sont des objet qui represente les element afficher
UIDoc c'est le document courrament a l'ecran par exemple

uidoc.save enregiste le document courrant en passant par le querySave et le PostSave
doc.save lui ne passe pas par les evenement
LSong
Posteur expérimenté
Posteur expérimenté
 
Message(s) : 353
Inscrit(e) le : 07 Nov 2007 à 14:27
Localisation : Ile de france


Retour vers Développement

cron