Lien documentaire à partir de L'ID

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

Lien documentaire à partir de L'ID

Messagepar clementbp » 02 Avr 2012 à 16:59

Bonjour

Dans un masque, j'ai un bouton derrière lequel j'ai du code qui crée un mail et l'envoi.
Je voudrais dans ce mail insérer un lien vers un document qui se trouve dans une base différente.
Dans un des champs du masque j'ai l'ID du document que je voudrais mettre en lien dans le mail.

Je pensais pourvoir créer mon lien à partir de ces éléments là mais je ne comprend pas le fonctionnement de la fonction "AppendDocLink".

Auriez vous une idée pour utiliser la fonction AppendDocLink et mettant en paramètre le nom de la base et l'ID d'un document.

Merci
clementbp
Posteur habitué
Posteur habitué
 
Message(s) : 236
Inscrit(e) le : 03 Fév 2010 à 16:42

Re: Lien documentaire à partir de L'ID

Messagepar roubech » 02 Avr 2012 à 23:20

si tu regardes l'aide au sujet de cette fonction
http://publib.boulder.ibm.com/infocente ... ETHOD.html
tu verra qu'il faut passer en argument un NotesDocument (ou vue ou base)
donc si tu as un ID de doc, tu ne peux pas le passer directement
Par contre, il te suffit d'instancier un NotesDocument en recherchant le doc dans l'autre base à partir de son UNID (ou d'une clé de recherche dans une vue)
http://publib.boulder.ibm.com/infocente ... ETHOD.html
http://publib.boulder.ibm.com/infocente ... ETHOD.html
par exemple
Code : Tout sélectionner
set db2 = new NotesDatabse( sServerName, sDbPath )
If not db2.IsOpen Then Error ...
set doc2 = db2.GetDocumentByUNID( sID )
if doc2 is nothing Then Error ...
call rtitem.appendDocLink( doc2 )
Avatar de l’utilisateur
roubech
Modérateur
Modérateur
 
Message(s) : 4976
Inscrit(e) le : 01 Fév 2007 à 20:22
Localisation : Lille

Re: Lien documentaire à partir de L'ID

Messagepar clementbp » 03 Avr 2012 à 17:19

Bonjour

Bon après pas mal de recherches je ne m'en sort pas.
Si jamais quelqu'un veut bien jeter un coup d'oeil et me dire dans la partie LIEN DOCUMENTAIRE ce qui ne va pas, ce serait vraiment sympa.

Merci de votre aide

Code : Tout sélectionner
Sub Click(Source As Button)
   
      ''''''''''      RECUPERE LES VALEUR DU DOCUMENT      '''''''''''''''''''''
   
   
   Dim dc As NotesDocumentCollection
   Dim db As NotesDatabase
   Dim Session As NotesSession
   
   Dim doc As NotesDocument
   
   Dim uiwork As New NotesUIWorkspace
   Dim UIDoc As NotesUIDocument
   
   Set UIdoc = uiwork.currentDocument
   
   Call UIDoc.Refresh
   Call Uidoc.save
   Set doc = UIdoc.document    
   
   doc.DateEnvoi = Now
   doc.HeureEnvoi = Now
   
   Call UIDoc.Refresh
   Call Uidoc.save
   
   Dim ChampEmail As NotesItem
   Dim ChampExpediteur As NotesItem
   Dim ChampDestinataire As NotesItem
   Dim ChampTransporteur As NotesItem
   Dim ChampZoneDeposeColis As NotesItem
   Dim ChampTypeArrivage As NotesItem
   
   Set session = New NotesSession
   Set db = session.CurrentDatabase
   Set doc = uiwork.currentDocument.document
   
   
   ''''''''''''''
   Set ChampEmail = doc.GetFirstItem("Email")
   Set ChampExpediteur = doc.GetFirstItem("Expediteur")
   Set ChampDestinataire = doc.GetFirstItem("Destinataire")
   Set ChampTransporteur = doc.GetFirstItem("Transporteur")
   Set ChampZoneDeposeColis = doc.GetFirstItem("ZoneDeposeColis")
   Set ChampTypeArrivage = doc.GetFirstItem("TypeArrivage")
   Set ChampNumeroWorkflow = doc.GetFirstItem("NumeroWorkflow")
   Set ChampIDDocumentWorkflow = doc.GetFirstItem("IDDocumentWorkflow")
   
   '''''''''''''''''''
   
   
   TempChampEmail = ChampEmail.Values
   ValeurChampEmail = Cstr(TempChampEmail(0))'Convertie en valeur
   
   TempChampExpediteur = ChampExpediteur.Values
   ValeurChampExpediteur = Cstr(TempChampExpediteur(0))'Convertie en valeur
   
   TempChampDestinataire = ChampDestinataire.Values
   ValeurChampDestinataire = Cstr(TempChampDestinataire(0))'Convertie en valeur   
   
   TempChampTransporteur = ChampTransporteur.Values
   ValeurChampTransporteur = Cstr(TempChampTransporteur(0))'Convertie en valeur
   
   TempChampZoneDeposeColis = ChampZoneDeposeColis.Values
   ValeurChampZoneDeposeColis = Cstr(TempChampZoneDeposeColis(0))'Convertie en valeur
   
   TempChampTypeArrivage = ChampTypeArrivage.Values
   ValeurChampTypeArrivage = Cstr(TempChampTypeArrivage(0))'Convertie en valeur
   
   TempChampNumeroWorkflow = ChampNumeroWorkflow.Values
   ValeurChampNumeroWorkflow= Cstr(TempChampNumeroWorkflow(0))'Convertie en valeur
   
   TempChampIDDocumentWorkflow = ChampIDDocumentWorkflow.Values
   ValeurChampIDDocumentWorkflow= Cstr(TempChampIDDocumentWorkflow(0))'Convertie en valeur
   
   
   
   
   
   
   
   
   
   
   
   ''''''''''      CREE LE MAIL ET ENREGISTRE LE MAIL DANS LA MAILBOX      '''''''''''''''''''''   
   
   
   'DEFINI NouveauMail COMME NOUVEAU DOCUMENT
   Dim dbMailBox As NotesDatabase
   
   If session.IsonServer Then
      Set dbMailBox = session.getdatabase("", "mail.box", False)
   Else
      Set dbMailBox = session.getdatabase(session.currentdatabase.server, "mail.box", False)
   End If    
   
   Dim NouveauMail As NotesDocument   
   Set NouveauMail = New NotesDocument(dbMailBox)
   
   
   
   
   'CREE ET ENVOIE LE MAIL
   NouveauMail.Form = "Memo"
   NouveauMail.From = "Réception de marchandises"
   NouveauMail.Subject = "Nouvelle réception de marchandise"
   NouveauMail.PostedDate = Now
   NouveauMail.SendTo = ValeurChampEmail
   NouveauMail.Recipients = ValeurChampEmail
   
   
   Dim ChampBody As NotesRichTextItem
   Set ChampBody = New NotesRichTextItem (NouveauMail, "Body")
   
   
   'Call ChampBody.AppendStyle(Noir)
   Call ChampBody.AppendText( "Bonjour" )
   Call ChampBody.AddNewLine( 2 )
   Call ChampBody.AppendText( "Un colis a été receptionné par le service arrivage." )
   Call ChampBody.AddNewLine( 1 )
   Call ChampBody.AppendText( "Merci de prendre en compte les informations suivantes :" )
   Call ChampBody.AddNewLine( 2 )
   Call ChampBody.AppendText( "Expéditeur : " & ValeurChampExpediteur )
   Call ChampBody.AddNewLine( 1 )
   Call ChampBody.AppendText( "Destinataire : " & ValeurChampDestinataire)
   Call ChampBody.AddNewLine( 1 )
   Call ChampBody.AppendText( "Transporteur : " & ValeurChampTransporteur)
   Call ChampBody.AddNewLine( 1 )
   Call ChampBody.AppendText( "Zone de dépose du colis : " & ValeurChampZoneDeposeColis)
   Call ChampBody.AddNewLine( 1 )
   Call ChampBody.AppendText( "Type d'arrivage : " & ValeurChampTypeArrivage & "     " & ValeurChampNumeroWorkflow)     ' & "     " & ValeurChampIDDocumentWorkflow )
   
   
   
   
   
   
'''''''''''''''LIEN DOCUMENTAIRE
   
   Dim dbDocManager As NotesDatabase
   Dim DocWorkflow As NotesDocument
   
   Set dbDocManager = New NotesDatabase( "", "ProcessStudio2007\DocManager.NSF" )
   If Not dbDocManager.IsOpen Then 
      'Je sais pas quoi         
   Else      
      Set DocWorkflow = dbDocManager.GetDocumentByUNID( ValeurChampIDDocumentWorkflow )
   End If
   
   If DocWorkflow Is Nothing Then
         'Je sais pas quoi      
   Else
      Call ChampBody.appendDocLink( DocWorkflow, "" )
   End If
   
   
   
   Call ChampBody.AddNewLine( 2 )
   
   Call ChampBody.AddNewLine( 4 )
   Call ChampBody.AppendText( "Cordialement")
   Call ChampBody.AddNewLine( 1 )
   Call ChampBody.AppendText( "L'équipe réception" )
   Call ChampBody.AddNewLine( 1 )
   
   
   
   Call NouveauMail.Save(True, True, True)
   
   
End Sub
clementbp
Posteur habitué
Posteur habitué
 
Message(s) : 236
Inscrit(e) le : 03 Fév 2010 à 16:42

Re: Lien documentaire à partir de L'ID

Messagepar roubech » 03 Avr 2012 à 20:28

il y aurait à dire aussi sur le début du code, mais voyont d'abord le point bloquant :

où se trouve ton code ? directement dans un bouton d'action sur un masque ?
qu'est ce qui se passe quand tu l'exécutes ? il se plante ou il tourne mais n'inclus pas le lien ?

pour instancier la mail.box, tu testes si tu es en locale ou sur le serveur
mais la base dbDocManager, tu ne précises pas. c'est volontaire ?
Code : Tout sélectionner
   Set dbDocManager = New NotesDatabase( "", "ProcessStudio2007\DocManager.NSF" )

après tu testes si la base est bien ouverte, comme je l'ai dans ma suggestion. c'est au cas où elle ne serait pas présente ou que l'utilisateur n'y a pas accès
mais tu ne sais pas quoi faire dans ce cas là apparement.
soit tu ne le testes pas et tu laisses le code se planter (sans envoyer le mail)
soit tu le testes et tu prévois une action, par exemple prévenir le user avec une msgbox mais continuer à envoyer le mail ...
Code : Tout sélectionner
   If Not dbDocManager.IsOpen Then 
      MsgBox "Le lien doc n'a pas pu être inclus dnas le mail (db not opened)"
   Else
      Set DocWorkflow = dbDocManager.GetDocumentByUNID( ValeurChampIDDocumentWorkflow )
   End If

Est-ce que ValeurChampIDDocumentWorkflow contient bien un UNID valide ?
Si le doc n'est pas trouvé, pareil que pour la base, il faut prévoir une action
Code : Tout sélectionner
   If DocWorkflow Is Nothing Then
         MsgBox "Le lien doc n'a pas pu être inclus dnas le mail (doc not found)"
   Else
      Call ChampBody.appendDocLink( DocWorkflow, "" )
   End If
Avatar de l’utilisateur
roubech
Modérateur
Modérateur
 
Message(s) : 4976
Inscrit(e) le : 01 Fév 2007 à 20:22
Localisation : Lille

Re: Lien documentaire à partir de L'ID

Messagepar clementbp » 04 Avr 2012 à 08:50

Merci grâce à tes indications j'ai réussit a retrouver mon erreur.
Tu avais raison il fallait que je gère les cas ou la base dbDocManager était en locale ou sur le serveur

Merci beaucoup pour ton aide.
clementbp
Posteur habitué
Posteur habitué
 
Message(s) : 236
Inscrit(e) le : 03 Fév 2010 à 16:42


Retour vers Développement