Page 1 sur 1

[Résolu] Erreur code dans QueryClose SMasque

MessagePublié: 27 Nov 2012 à 22:26
par camilleB
Bonjour, j'aimerai avoir un coup d’œil sur ce code!
En gros: j'affiche un sous masqueB dans un dialogBox à partir d'un bouton sur un masqueA.
Code : Tout sélectionner
Call ws.DialogBox ("sbfDemandeB", True, True, False, True, True, False, "Demande de prise en charge",doc, False, False, True )

Ensuite dans le QueryClose du sbfDemandeB j'ai un code qui permet de créer un sousDossier et d'envoyer un mail avec un lien base vers le sousDossier.
Comme le sous masque s'affiche dans dialogBox je ne peux pas debuger le code!

Mais apparemment l'erreur provient au niveau du SendMailMetiers(db, docsousdossier,vdestinataires)
Je vous passe l'ensemble du code, toutes les variables sont déclarés!
Code : Tout sélectionner
Sub Queryclose(Source As Notesuidocument, Continue As Variant)
   On Error Goto ErrorHandler
   Dim ws As New NotesUIWorkspace
   
   Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim doc As NotesDocument
   Dim docSousDossier As NotesDocument
   Dim ParentDoc As NotesDocument
   Dim nUsername As NotesName
   Dim namValue As NotesName
   Dim vDestinataires As Variant
   Dim sCommonUsername As String, sDateTime As String, sAction As String
   Dim rtItemBodyMetiers As NotesRichTextItem
   Dim ParentUIdoc As NotesUIDocument
   Set db = session.CurrentDatabase
   Set doc = Source.document
   If Not Source.DialogBoxCanceled Then
      Call source.Refresh(True)
      Set itemHistory = doc.GetFirstItem("History")
      sCommonUsername = session.CommonUserName
      sDateTime = { le } + Cstr(Today) + { à } + Time$
      sExpediteur = db.Title
      
      'Contrôle des champs
      
      '
      '
      
      'Création d'un document sous-dossier + notification pour chaque destinataire

      
      vDestinataires = Fulltrim(doc.GetItemValue("Destinataires"))
      
      If (Trim(Source.FieldGetText("Destinataires")) <> "" ) Then
         
         sBodyText = ""
         
         
         Call TraiterNotification(doc,rtItemBodyMetiers)
         
      'Sélection
         Forall value In vDestinataires
            If value = "" Then Exit Forall
            valueTxt = value
            Set namValue = session.CreateName(valueTxt)
            Set docSousDossier = db.CreateDocument
            docSousDossier.Form = "SbfDossierMetiers"
            iSousDossier = iSousDossier + 1
            Call docSousDossier.ReplaceItemValue("Client", doc.GetItemValue("Client"))
            Call docSousDossier.MakeResponse(doc)
            Call docSousDossier.ComputeWithForm(True, False)
            Call docSousDossier.Save(True,False)      
            Call doc.Save(True,False)
         End Forall
         
         Call SendMailMetiers(db, docSousDossier, vDestinataires) [b]<== ERREUR ICI[/b]
         
      End If
      
      'suite code
      
   End If
   




il semble qu'il ne trouve pas docSousDossier (objet variable not set à la ligne du SendMailMetiers.

Merci de votre regard avisé.
cdt
camille

Re: Erreur code dans QueryClose SMasque

MessagePublié: 28 Nov 2012 à 09:15
par Michael DELIQUE
salut

commeça je dirais que ton probleme viens du If value = "" Then Exit Forall dans ta boucle, tu peut te retrouver avec un document vide

Re: Erreur code dans QueryClose SMasque

MessagePublié: 28 Nov 2012 à 10:44
par camilleB
Salut Michael, ce truc me rend fou!!
En mettant en commentaire le sendMailMetier, j'ai testé si le docsousdossier était Nothing et j'ai affiché s'il était marqué comme réponse (true)! Donc juste avant il est bon....!
Le sub sendmail est directement déclaré dans le sous masque!
De plus les docsousdossier sont bien présents dans la base! Je les ai affiché dans une vue de test.
pfff!

cdt
camille

Re: Erreur code dans QueryClose SMasque

MessagePublié: 28 Nov 2012 à 10:57
par Michael DELIQUE
c'est l'appel de ta fonction SendMailMetiers qui plante ou la fonction elle meme ?

qu'as tu comme gestion des erreurs ?

Re: Erreur code dans QueryClose SMasque

MessagePublié: 28 Nov 2012 à 11:39
par camilleB
Merci Michael, tu m'as permis d'aller dans la bonne direction!
1- la fonction SendMail n'avait pas de gestion d'erreur! après correction j'ai vu qu'il plantait sur un rtitemBody non instancié.
2- Pourquoi? la variable du code est en fait rtitemBodyMetier.
En réfléchissant un peu (j'essaie des fois quand même!) j'ai dû créer une autre variable à cause d'une erreur DUPLICATE NAME que j'ai obtenu pour avoir ajouter une bib qui contient justement déjà une variable rtitem!
==> Gestion d'erreurs!!!
Je pense que j'aurai vu au debug mais Dialogbox = pas de debugger!
Grand merci à toi et grossière erreur de ma part!

cdt
camille

Re: Erreur code dans QueryClose SMasque

MessagePublié: 28 Nov 2012 à 20:41
par roubech
perso je ne mets pas de code dans les dialog, mais avant et apres

set doc = ... pour préparer si besoin le doc qui sera affiché dans la dialogbox
res = ws.dialogbox(...,doc,...)
if res then
traitement basé sur les données récupérées via doc ...
end if

Re: Erreur code dans QueryClose SMasque

MessagePublié: 29 Nov 2012 à 11:46
par camilleB
Salut, merci du conseil Roubech!
Au moins on peut voir ce qui se passe dans le code!
J'ai un souci de plus, mon doc principal est supprimé et je ne vois pas a quel moment!!!!
Aucun call doc.remove ou autre dans le code du QueryClose ni dans le masque appelant (appel du dialogbox). :(
Puis je vous faire parvenir le code du Queryclose en entier pour y jeter un petit coup d'oeil expert?
Merci par avance!
cdt
camille

Re: Erreur code dans QueryClose SMasque

MessagePublié: 29 Nov 2012 à 12:24
par Michael DELIQUE
Ctrl C / Ctrl V authorisé :)

Re: Erreur code dans QueryClose SMasque

MessagePublié: 29 Nov 2012 à 22:06
par camilleB
Salut,
j'ai donc viré le code du QueryClose du sbfDemandeB et le l'ai adapté pour être utilisé dans un bouton du masqueA.
J'ai adapté comme conseillé par Roubech, ie j'hérite des valeurs du sfDemandeB dans un doctmp pour mes traitements.
Le document enregistré du masqueA appelant n'est plus supprimé!
Merci à vous deux.
cdt
camille