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