Documents réponse à partir d'une liste de noms.

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

Documents réponse à partir d'une liste de noms.

Messagepar Haggart » 11 Août 2010 à 10:05

Bonjour à tous.

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.
Dernière édition par Haggart le 11 Août 2010 à 10:28, édité 1 fois.
"90% des problèmes informatiques se situent entre la chaise et le clavier..." - Anonyme
Avatar de l’utilisateur
Haggart
Découvre Dominoarea
Découvre Dominoarea
 
Message(s) : 6
Inscrit(e) le : 12 Jan 2010 à 13:56
Localisation : Toulouse

Documents réponse à partir d'une liste de noms.

Messagepar Haggart » 11 Août 2010 à 10:28

Re-bonjour à tous.

J'ai trouvé la solution !

Il suffit de rajouter
Code : Tout sélectionner
Set docFils=New NotesDocument(db)

juste avant
Code : Tout sélectionner
Call docFils.MakeResponse(docPere)

Voici le code corrigé, si cela peut servir à quelqu'un...
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
      Set docFils=New NotesDocument(db)
      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


Bonne continuation à tous...et bonnes vacances pour ceux qui ont la chance d'y être en ce moment :wink:
"90% des problèmes informatiques se situent entre la chaise et le clavier..." - Anonyme
Avatar de l’utilisateur
Haggart
Découvre Dominoarea
Découvre Dominoarea
 
Message(s) : 6
Inscrit(e) le : 12 Jan 2010 à 13:56
Localisation : Toulouse


Retour vers Développement

cron