Je débute en LS et la je me retrouve dans une situation "énigmatique", si on peut dire...
Ma base, suite à des conflits de réplication fréquents, va basculer sur un système de fonctionnement à base de doc réponses.
Le masque principale contient un champs nommé "Noms", de type "noms", qui récupère une liste d'utilisateurs.
Lors de la sauvegarde du document au travers d'un bouton d'action ("Enregistrer et fermer") j'ai intégré une fonction pour créer un document réponse pour chaque nom d'utilisateur contenu dans la liste du champs "Noms".
Pour être sur d'éviter le problème lié au fait que le doc parent n'a pas encore été sauvegardé au moment de la création du doc réponse (besoin du fameux "$Ref"), j'ai placé ma fonction entre le "Call uiDoc.Save"
et le "Call uiDoc.Close" du script principale du bouton de sauvegarde.
Voici le code de la fonction :
- Code : Tout sélectionner
Function createListeNomsParentDoc () As Integer
'Function qui permet de créer un document fils pour chaque utilisateur
'contenu dans la liste du champs "Noms"
Dim Session As New notessession
Dim db As notesdatabase
Dim ws As New notesuiworkspace
Dim docPere As NotesDocument
Dim docFils As NotesDocument
Dim uiDoc As NotesUIDocument
Dim numero As String
Dim idRep As String
Dim creationDate As Variant
Dim creationUserName As String
Dim signToDo As Integer
Dim listeNoms As Variant
Dim NbNoms As Integer
'Init doc, db et session
Set uiDoc = ws.CurrentDocument
Set docPere = uiDoc.Document
Set db = session.CurrentDatabase
Set docFils = db.CreateDocument
'Init variables à modifier dans doc parent et doc réponse
numero=docPere.Numero(0)
idRep=docPere.UNIDdoc(0)
creationDate=Now()
creationUserName=Session.CommonUserName
'Récuperation de la liste des déstinataires dans le champs "Noms" du doc parent
listeNoms = docPere.GetItemValue("Noms")
If listeNoms(0) = "" Then
createListeNomsParentDoc = False
Exit Function
End If
'Calcul du nombre de déstinataires dans le champs "Noms"
NbNoms = Ubound(listeNoms) + 1
signToDo = NbNoms
'Création d'un document réponse pour chaque déstinataire
Forall elem In listeNoms
Call docFils.MakeResponse(docPere)
docFils.Form = "DocNonSigne"
docFils.DestDoc=elem
docFils.idparent = idRep
docFils.CreationDate = Now()
docFils.CreationNom = Session.CommonUserName
docFils.DisplayTitreParent = numero
Call docFils.Save(True, True)
End Forall
'Modification des champs compteurs de signatures du doc parent
docPere.SignToDo = signToDo
Call docPere.save(True, False)
End Function
La fonction s'exécute normalement, le seul hic c'est que elle "boucle" sur le même doc réponse au lieu d'en créer un nouveau à chaque tour de "Forall".
Résultat : je me retrouve avec un seul doc réponse correspondant au dernier élément de la liste car à chaque tour de boucle il met à jour le doc créé en première instance.
Je suppose qu'il faudrait lui indiquer de créer un nouveau doc réponse, et c'est la que je bloque.
Auriez-vous une idée à ce sujet ?
Merci d'avance pour votre réponse.
Haggart.