[Résolu]Màj auteurs par agent.runOnserver

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

[Résolu]Màj auteurs par agent.runOnserver

Messagepar camilleB » 02 Avr 2012 à 02:42

Bonjour,
je reviens vers la méthode qui consiste à passer par un agent exécuté sur le serveur afin de mettre à jour un champs auteur.
Voici le code de l'agent qui récupère un doc de paramètres.
Code : Tout sélectionner
   Dim s As New NotesSession
   Dim db As NotesDatabase
   Dim agentLog As New NotesLog("Agent log")
   Dim viewDoc As notesview
   Dim coldoc As NotesDocumentCollection
   Dim docdos As NotesDocument
   Dim doc As NotesDocument
   Dim itemauteurs As notesitem
   Dim docparamAg As notesdocument
   Dim curagent As NotesAgent
   Dim sIDdocDos As String
   Dim sIDdocparam As String
   
   On Error Goto ErrorHandler
   Set db = s.CurrentDatabase
   Set curagent=s.CurrentAgent
   Call agentLog.OpenAgentLog
   sIDdocparam=curagent.ParameterDocID
   sIDDocdos=docparamAg.iddocdos(0)
   Set docparamAg=db.GetDocumentByID(sIDDocparam)
   Set viewDoc = db.GetView("(VueDocs")
   Set colDoc = viewDoc.GetAllDocumentsByKey(sIDDocDos, True)
   
   For i=1 To coldoc.Count
      Set doc=coldoc.GetNthDocument(i) 
      If doc.form="frmD" Then
         Set itemAuteurs =doc.GetFirstItem("Auteurs")
         Call agentLog.LogAction( "Processing: Remove auteurs")
         Call itemAuteurs.Remove
         Call agentLog.LogAction( "Processing: Creation new auteurs"+docparamag.auteurs(0))
         Set itemAuteurs=New NotesItem(doc,"Auteurs",docparamag.auteurs(0),AUTHORS)
         Call doc.Save(True,False)
      End If
   Next
   Call docParamag.ReplaceItemValue("statutagent ", "Status updated")
   Call docParamag.Save(True, False)
   Call agentLog.Close
Out:
   Exit Sub
ErrorHandler:
   strErrorMsg = "Error in agent " & s.CurrentAgent.Name & Chr(10)
   strErrorMsg = strErrorMsg & "Error code: " & Cstr(Err()) & Chr(10)
   strErrorMsg = strErrorMsg & "Error text: " & Error$ & Chr(10)
   strErrorMsg = strErrorMsg & "Error line: " & Cstr(Erl())
   If Not (docParamag Is Nothing) Then
      Call docParamag.ReplaceItemValue("AgentMsg ", strErrorMsg)
      Call docParamag.Save(True, False)
   End If
   Resume Out

et là une partie du code exécutant l'agent.
Code : Tout sélectionner
Set docparamagent=db.CreateDocument
               docParamagent.form="frmDocParamag"
               Call docparamagent.ReplaceItemValue("iddocDossier",doc.UniversalID)
               Call docparamagent.ReplaceItemValue("auteurs",doc.nextauteur(0))
               Call docparamagent.Save(True,False)
               Dim strdocParamid As String
               strdocParamID=docparamagent.UniversalID
               Set aSetAuteursDoc=db.GetAgent("aSetAuteursDoc")
               Set viewParam=db.GetView("(ParamAgByUnID)")
               Set docparamagent=viewParam.GetDocumentByKey(strDocParamid)
               
               Call aSetAuteursDoc.RunOnServer(docparamagent.NoteID)
               Set docParamagent = Nothing
               Set docParamagent = viewParam.GetDocumentByKey(strdocParamID, True)

J'ai paramétré la cible de l'agent à aucun et autorisé les opérations restreintes.
L'exécution se fait apparemment, mais aucune modification des champs auteurs. Je ne sais pas si l'agent récupère bien le docparamagent.
Je ne sais pas d'où peut provenir l'erreur sachant que l'exécution en front-end de l'agent ne permet pas de débugger !
Merci pour vos lumières sur cette méthode.
cdt
camille
Dernière édition par camilleB le 03 Avr 2012 à 17:13, édité 1 fois.
camilleB
Apprenti-posteur
Apprenti-posteur
 
Message(s) : 176
Inscrit(e) le : 18 Jan 2012 à 23:45

Re: Màj auteurs par agent.runOnserver

Messagepar Michael DELIQUE » 02 Avr 2012 à 07:39

salut

normalement ça devrais le faire... mais 2 chose

ne JAMAIS utiliser Set doc=coldoc.GetNthDocument(i) JAMAIS, JAMAIS, JAMAIS ... ... JAMAIS !

c'est un truc a faire planter un serveur ça (ou a avoir des temps de traitements trèèèès long)! le getnthdocument est une aberration dans ça manière de fonctionner. toujours passer par un getfirst/getnext

ensuite quand tu travail sur les champs de typs names/redears/authors en dorsale TOUJOURS renseigner les champs avec des noms au format canonique sinon les accès ne fonctionnent pas
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

Re: Màj auteurs par agent.runOnserver

Messagepar roubech » 02 Avr 2012 à 12:54

je note un pb dans ces lignes, tu utilises un variable avant de l'instancier
Code : Tout sélectionner
   sIDdocparam=curagent.ParameterDocID
   sIDDocdos=docparamAg.iddocdos(0)
   Set docparamAg=db.GetDocumentByID(sIDDocparam)

il faudrait inverser, comme ceci :
Code : Tout sélectionner
   sIDdocparam=curagent.ParameterDocID
   Set docparamAg=db.GetDocumentByID(sIDDocparam)
   sIDDocdos=docparamAg.iddocdos(0)
Avatar de l’utilisateur
roubech
Modérateur
Modérateur
 
Message(s) : 4976
Inscrit(e) le : 01 Fév 2007 à 20:22
Localisation : Lille

Re: Màj auteurs par agent.runOnserver

Messagepar camilleB » 02 Avr 2012 à 13:58

Salut Michael,
J'ai corrigé le Set doc=coldoc.GetNthDocument(i)! Merci du conseil!! Donc ce n'est pas à utiliser du tout?
Salut Roubech, très juste, excellent coup d'oeil! Correction faite! Et après doc.form(0)="xx" au lieu de doc.form="xx"
Je relance à nouveau...et je vous tiens au courant.
cdt
camille
camilleB
Apprenti-posteur
Apprenti-posteur
 
Message(s) : 176
Inscrit(e) le : 18 Jan 2012 à 23:45

Re: Màj auteurs par agent.runOnserver

Messagepar Michael DELIQUE » 02 Avr 2012 à 14:02

CamilleB a écrit:Donc ce n'est pas à utiliser du tout?



La réponse : JAMAIS

getNTHdocument est a bannir de tes devs !
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

Re: Màj auteurs par agent.runOnserver

Messagepar camilleB » 02 Avr 2012 à 14:20

Michael DELIQUE a écrit:
CamilleB a écrit:Donc ce n'est pas à utiliser du tout?

La réponse : JAMAIS

getNTHdocument est a bannir de tes devs !


Bien reçu! J'ai inséré quelques lignes de ce genre...je vais porter les corrections nécessaires!
Sinon, çà fonctionne pour la maj des champs auteurs :D
Je n'avais pas encore bien compris le passage de paramètre à l'agent, mais cet exercice me sera d'une très grande utilité. Et j'en avait besoin urgemment..!
J'espère que ce topic sera utile aux autres!
Merci à vous deux!
cdt
camille
camilleB
Apprenti-posteur
Apprenti-posteur
 
Message(s) : 176
Inscrit(e) le : 18 Jan 2012 à 23:45


Retour vers Développement