Page 1 sur 1

Set New ReplicaID

MessagePublié: 10 Jan 2008 à 09:28
par Michael DELIQUE
Codé grace à une fonction de Julien (Merci Julien) => http://www.domlike.net/domlike/dl2.nsf/ ... OME-6LWB93


Code : Tout sélectionner
Function SetNewReplicaID_API (wdb As NotesDatabase, wNewRepliqueID As String) As String
   
%REM
'variableAPI pour la fonction SetNewReplicaID_API
Type TIMEDATE
   Innards(1) As Long
End Type
Type DBREPLICAINFO
   ID As TIMEDATE  'ID that is same for all replica files
   Flags As Integer     'Replication flags
   CutoffInterval As Integer   'Automatic Replication Cutoff
   Cutoff As TIMEDATE       'Replication cutoff date
End Type
Declare Function NSFDbClose Lib "nnotes.dll" (Byval hDb As Long) As Integer
Declare Function NSFDbOpen Lib "nnotes.dll" (Byval dbName As String, rethDb As Long) As Integer
Declare Function NSFDbReplicaInfoGet Lib "nnotes.dll" Alias "NSFDbReplicaInfoGet" (Byval hdb As Long, hdbr As DBREPLICAINFO) As Integer
Declare Function NSFDbReplicaInfoSet Lib "nnotes.dll" Alias "NSFDbReplicaInfoSet" (Byval hdb As Long, hdbr As DBREPLICAINFO) As Integer
%END REM
   
   'Déclaration Variable
        Dim Session as NotesSession
   Dim nbHDB As Long
   Dim nbReturnValue As Long
   Dim RepInfo As DBREPLICAINFO     
   Dim i As Integer
   
   On Error Goto ErreurHandle
   SetNewReplicaID_API = ""
   
   'teste si la base cible est accéssible
   If wDB Is Nothing Then
      Exit Function
   Elseif dbexists_ls(wdb) = False Then
      Exit Function
   End If
      
   Set Session = New NotesSession
   
   If session.Platform <> "Windows/32" Then
      Error 9999,"Work Only on  Windows/32 Platform"
      Exit Function
   End If
   
   If Trim(wNewRepliqueID) = "" Then
      'génére une nouvelle id de réplique
      Randomize
      For i = 1 To 8
         SetNewReplicaID_API = SetNewReplicaID_API + Ucase(Chr(Int(Rnd*6) + 65))
      Next
      SetNewReplicaID_API = SetNewReplicaID_API+":"
      For i = 1 To 8
         SetNewReplicaID_API = SetNewReplicaID_API + Ucase(Chr(Int(Rnd*6) + 65))
      Next
   Else
      SetNewReplicaID_API = Trim(wNewRepliqueID)
   End If
   
   If Trim(wdb.Server) = "" Then
      nbReturnValue = NSFDbOpen(wdb.FilePath, nbHDB)
   Else
      nbReturnValue = NSFDbOpen(wdb.Server + "!!" + wdb.FilePath, nbHDB)
   End If   
   
   If nbReturnValue <> 0 Then
      Error 9999,"Couldn't open db : "+wdb.FilePath
      Exit Function
   End If
   nbReturnValue = NSFDbReplicaInfoGet(nbHDB, RepInfo)
   
   If nbReturnValue <> 0 Then
      Error 9999,"Couldn't get Replica Info"
      Exit Function
   End If
   
   RepInfo.ID.Innards(1) = Val( "&H"+Left$( SetNewReplicaID_API, 8 ) )
   RepInfo.ID.Innards(0) = Val( "&H"+Right$( SetNewReplicaID_API, 8 ) )
   
   nbReturnValue = NSFDbReplicaInfoSet(nbHDB, RepInfo)    ' take a deep breath...   
   
   nbReturnValue = NSFDbReplicaInfoGet(nbHDB, RepInfo)
   If nbReturnValue <> 0 Then
      Error 9999,"Couldn't get Replica Info"
      Exit Function
   End If
   
   nbReturnValue = NSFDbClose(nbHDB)
   
   Exit  Function
ErreurHandle:
   Msgbox "("+Cstr(Getthreadinfo (1))+" Call by "+Cstr(Getthreadinfo(10))+")"+Chr(10)+"Erreur " + Str(Err) + " : "+Chr(10) + Cstr(Error)+". "+Chr(10)+"Ligne N° "+Cstr(Erl),16," ERREUR !"
   SetNewReplicaID_API = ""
   Exit Function
End Function

MessagePublié: 13 Jan 2008 à 10:20
par oguruma
hello,
pour ceux qui ne maîtrisent pas trop (moi...) je pense qu'il serait bon de mettre un exemple d'utilisation si tu en as un sous le coude
merci

MessagePublié: 13 Jan 2008 à 15:17
par Michael DELIQUE
salut

bein c'est simple, tu passe l'objet notesdabase (instancié) à la fonction (l'id de réplique est optionnel) et ça te change l'id de réplique. ça s'utilise comme n'importe quelle fonction LS

sinon j'ai mis en référence l'article de Julien qui ma servi de support. à la seule grosse différence la fonction est autnome, la génération de l'id de réplique est intégré à la fonction

si tu veux un exemple
Code : Tout sélectionner
dim session as new notesSession
dim db as NotesDatabase
Dim NewRepliqueID as String

set DB = Session.currentDatabase
NewRepliqueID = SetNewReplicaID_API(DB,"")
if trim(NewRepliqueID) = "" then
    msgbox 'L'id de réplique n'a pas été changé"
else
    msgbox "L'id de réplique a été changé :"+chr(10)+NewRepliqueID
end if