Page 1 sur 1

Création d'une Replique + Ajout au Réplicateur

MessagePublié: 16 Juin 2010 à 16:16
par rko
Bonjour à tous,

Voilà j'ai mis en place un Annuaire Mobile à partir de la tâche Dircat de Domino. Mon Annuaire "mobile.nsf"
Je souhaite que mes utilisateurs récupérent cette annuaire et qu'il soit disponible quand ils veulent envoyer un mail.

Pour cela, j'utilise un bouton pour qu'il click dessus, la base est répliquée depuis le serveur, le notes.ini est modifié pour ajouter mobile.nsf en tant que 2ème Annuaire à consulter en + du names local.

Tout fonctionne bien ou presque, car la base n'apparaît pas dans le réplicateur, et le but est que les modifications soient récupérées

Est-ce que vous auriez une idée, erreur dans le code ? serveur v7.03 et Client v7.0.2

Merci d'avance

Code : Tout sélectionner
Sub Click(Source As Button)
   On Error Goto printerror
   Dim session As New NotesSession
   Dim workspace As New NotesUIWorkspace
   Dim DayList(6) As String   
   
   
   'Modification de ces declarations
   Server = "Server/Org"
   Path = "mobile.nsf"
   
   'Declaration du chemin du carnet d'adresse en commun
   Set dbNames = session.GetDatabase("", "names.nsf")
   Dim db As New NotesDatabase( Server, Path )
   Dim replica As New NotesDatabase("","")
   
   'Current location name retrieve (via notes.ini file)
   strLoc = session.getEnvironmentString("Location", True)
   Print "strLoc" & strLoc
   If strLoc="" Then
      Print "Problem : Don't find the Location Document"
      Exit Sub   
   End If
   
   If Instr(strLoc, ",") Then
      strLoc = Left(strLoc, Instr(strLoc, ",")-1)
   End If
   
   strSearch(1) = "*"
   strSearch(2) = strLoc
   Set vwSites = dbNames.GetView("($Locations)")
   Set docSite = vwSites.GetDocumentByKey(strSearch)
   
   ' Setting for Current Location Name
   If docSite Is Nothing Then
      Print "Problem : Don't find the Location Document"
      Exit Sub   
   Else
      ' Réplication activée
      Set item = docSite.ReplaceItemValue( "Enabled", "1" )
      
      ' tous les jours
      For j = 0 To 6
         DayList(j)= Cstr( j + 1)
      Next      
      docSite.Weekdays=DayList
      
      'toutes les 60 minutes      
      docSite.Interval=60
      
      Call docSite.Save( True, True )
   End If
   
   If replica.Open("", Path) Then
      Messagebox( "One replica of  "+Path+" database is in Local" )
      Exit Sub
   Else
      Set replica = db.CreateReplica( "", Path )
   'Ouverture de la réplique Local   
      Call workspace.OpenDatabase ( "", Path, "", "", False, False )
   End If
   
   'Modification des préférences utilisateurs, Mise à jour du parametre Notes.ini
   CA_ini = session.GetEnvironmentString( "NAMES" , True)
   If (CA_ini Like "*"+Path+"*") Then
   Else
      CA_ini = CA_ini + ","+Path
      Call session.SetEnvironmentVar( "NAMES", CA_ini ,True)
   End If
   
   Messagebox( "Succesfull, Thanks to close your Lotus Notes Client so that your new parameter is updated." )
   Exit Sub
printerror:
   Print "Erreur : " & Error & " ligne  " & Erl
   Exit Sub
End Sub

MessagePublié: 17 Juin 2010 à 10:39
par stloje
Petite question : lorsque tu ouvres le carnet d'adresses perso, tu fais la vérif que c'est bien un carnet privé?

Je te suggère de regarder dans l'aide en ligne concernant les propriétés des carnets d'adresses (AddressBooks) de la classe NotesSession. C'est peut être là que ça plante.

MessagePublié: 17 Juin 2010 à 11:41
par rko
Oula moi rien connaître en dev, c'est un script qui fonctionné et ne fonctionne plus, je ne sais pas ce qui cloche !
Merci de ta réponse en tout cas !

MessagePublié: 17 Juin 2010 à 13:50
par stloje
Bon, j'ai fait l'ajout et un p'tit correctif. Je n'ai pas testé le code, mais ça devrait aller mieux

Code : Tout sélectionner
   On Error Goto printerror
   Dim session As New NotesSession
   Dim workspace As New NotesUIWorkspace
   Dim DayList(6) As String   
   
   
   'Modification de ces declarations
   Server = "Server/Org"
   Path = "mobile.nsf"
   
   'Declaration du chemin du carnet d'adresse en commun
   Dim books As Variant
   books = session.AddressBooks
   Forall b In books
      ' check every Domino Directory,
      If b.IsPrivateAddressBook Then
         'il faut vérifier si c'est bien le carnet d'adresses principal
         If b.FileName = "names.nsf" Then
            Set dbNames = b
            Exit Forall
         End If
      End If
   End Forall
   
   'on vérifie si le carnet est bien ouvert
   If dbNames Is Nothing Then
      Msgbox "Le carnet d'adresses n'a pu être ouvert. Interruption de la réplique.", , "Interruption réplique"
      Exit Sub
   End If
   
   Dim db As New NotesDatabase( Server, Path )
   Dim replica As New NotesDatabase("","")
   
   'Current location name retrieve (via notes.ini file)
   strLoc = session.getEnvironmentString("Location", True)
   Print "strLoc" & strLoc
   If strLoc="" Then
      Print "Problem : Don't find the Location Document"
      Exit Sub   
   End If
   
   If Instr(strLoc, ",") Then
      strLoc = Left(strLoc, Instr(strLoc, ",")-1)
   End If
   
   Dim strSearch (1) As String
   strSearch(0) = "*"
   strSearch(1) = strLoc
   Set vwSites = dbNames.GetView("($Locations)")
   Set docSite = vwSites.GetDocumentByKey(strSearch)
   
   ' Setting for Current Location Name
   If docSite Is Nothing Then
      Print "Problem : Don't find the Location Document"
      Exit Sub   
   Else
      ' Réplication activée
      Set item = docSite.ReplaceItemValue( "Enabled", "1" )
      
      ' tous les jours
      For j = 0 To 6
         DayList(j)= Cstr( j + 1)
      Next       
      docSite.Weekdays=DayList
      
      'toutes les 60 minutes       
      docSite.Interval=60
      
      Call docSite.Save( True, True )
   End If
   
   If replica.Open("", Path) Then
      Messagebox( "One replica of  "+Path+" database is in Local" )
      Exit Sub
   Else
      Set replica = db.CreateReplica( "", Path )
   'Ouverture de la réplique Local   
      Call workspace.OpenDatabase ( "", Path, "", "", False, False )
   End If
   
   'Modification des préférences utilisateurs, Mise à jour du parametre Notes.ini
   CA_ini = session.GetEnvironmentString( "NAMES" , True)
   If (CA_ini Like "*"+Path+"*") Then
   Else
      CA_ini = CA_ini + ","+Path
      Call session.SetEnvironmentVar( "NAMES", CA_ini ,True)
   End If
   
   Messagebox( "Succesfull, Thanks to close your Lotus Notes Client so that your new parameter is updated." )
   Exit Sub
printerror:
   Print "Erreur : " & Error & " ligne  " & Erl
   Exit Sub

MessagePublié: 17 Juin 2010 à 14:18
par rko
Merci pour ton aide,
quand je copie colle le code dans mon bouton, j'ai des erreurs

MessagePublié: 17 Juin 2010 à 14:38
par Michael DELIQUE
salut

toutes les variables ne sont pas déclarés

MessagePublié: 17 Juin 2010 à 15:32
par stloje
Reste aussi à savoir à quel endroit tu l'as collé. Il est bien entre les balises Sub Click(Source As Button) - End Sub?

Pour ma part, je l'ai compilé sur Notes et il n'y avait pas d'erreur.

Maintenant, si tu as l'option (voir événement «Options») Option Declare ou Option Explicit, il va falloir déclarer les variables.[/list]

MessagePublié: 17 Juin 2010 à 15:37
par Michael DELIQUE
Stloje, il faut TOUJOURS déclarer ses variables TOUJOURS !!!

MessagePublié: 21 Juin 2010 à 09:37
par stloje
Michael DELIQUE a écrit:Stloje, il faut TOUJOURS déclarer ses variables TOUJOURS !!!


Ben, oui! C'est ce que j'ai fait : j'ai déclaré MES variables! :lol:

Bon, j'avais regardé rapidement le code, j'ai ajouté quelques modifications et apporté un léger correctif, mais j'avais laissé le code tel qu'il était. Je ne pense pas qu'il faudrait que je me mette à nettoyer et optimiser tout le code, surtout que je le fais sur mes heures de travail. Il faut en laisser un peu pour les autres? Non? 8)

:wink: De toute façon, pour toutes les fois que j'ai mis du code sur le forum, j'ai jamais eu la remarque. Je pense pas être un mauvais élève? Non?

MessagePublié: 21 Juin 2010 à 09:46
par Michael DELIQUE
j'ai pas dis que tu étais un mauvais élève, on va pas râler parce qu'on corrige vite fais en plus de son travail du code posté sur le forum !

mais ça m'a permis de faire passer le message une fois de plus

MessagePublié: 21 Juin 2010 à 09:54
par stloje
T'en fait pas, je le prend avec un GRAND SOURIRE!

Venant de toi, c'est comme une tape amicale dans le dos! :wink: