Domino 9 und frühere Versionen > ND8: Entwicklung
Selektive Repliken anlegen
mastertom:
Hallo zusammen,
ich suche ein Script, dass es mir ermöglicht, von Server X die Datenbank Y als Replik auf Server Z anzulegen.
Idealer Weise wird dann auch gleich eine Replikationsformel hinterlegt, die z.B. nur 90 Tage alte Mails repliziert.
Ist das überhaupt mit Lotus Script / oder ggf. mit Formelsprache umsetzbar oder muß ich hier tatsächlich "Hand" anlegen?
Bin gespannt auf Eure Ansätze
pram:
Es gibt notesDatabase.createReplica. In Verbindung mit dem NotesDbDirectory sollte zumindest das Anlegen kein Problem sein.
Wie man jetzt aber die Replizierformel ändert, weiß ich nicht, ggf. steckt sie in diesem speziellen Dokument:
Set doc = db.GetDocumentByID("FFFF0800")
Gruß
Roland
eknori (retired):
Du musst zunachst einen ReplicaStub anlegen. Dafür gibt es in LS aber keinen direkten Befehl.
Über notesDatabase.CreateReplica( newServer$, newDbFile$ ) kann man zwar eine neue replik erstellen, es wird aber sofort repliziert.
Daher müssen wir mal wieder zur API greifen
Declaration
--- Code: ---Declare Function W32_NSFDbOpen Lib "nnotes.dll" Alias "NSFDbOpen" _
(Byval dbname As String, dbHandle As Long ) As Long
Declare Function W32_NSFDbClose Lib "nnotes.dll" Alias "NSFDbClose" _
(Byval dbHandle As Long ) As Long
Declare Function W32_NSFDBCREATE Lib "NNOTES.DLL" Alias "NSFDbCreate" _
(Byval dbname As String, Byval dbClass As Single, Byval forceIt As Single) As Long
Declare Function W32_NSFDBREPLICAINFOSET Lib "NNOTES.DLL" Alias "NSFDbReplicaInfoSet" _
(Byval dbHandle As Long, replInfoStruct As Long) As Long
Declare Function W32_NSFDBREPLICAINFOGET Lib "NNOTES.DLL" Alias "NSFDbReplicaInfoGet" _
(Byval dbHandle As Long, replInfoStruct As Long) As Long
--- Ende Code ---
Function CreateReplStub
--- Code: ---Function CreateReplStub(S_Server As String, S_Db As String, T_Server As String, T_Db As String, forceit As Single) As Long
Dim S_DbString As String
Dim T_DbString As String
Dim dbhandle As Long
Dim retNoteID As Long
Dim noteClass As Long
Dim replInfo(5) As Long
Select Case Ucase$(S_Server)
Case "LOCAL"
S_DbString = S_Db
Case "LOKAL"
S_DbString = S_Db
Case ""
S_DbString = S_Db
Case Else
S_DbString = S_Server + "!!" + S_Db
End Select
Select Case Ucase$(T_Server)
Case "LOCAL"
T_DbString = T_Db
Case "LOKAL"
T_DbString = T_Db
Case ""
T_DbString = T_Db
Case Else
T_DbString = T_Server + "!!" + T_Db
End Select
'get the replica info struct from Source DB
rc = W32_NSFDBOPEN(S_DbString, dbhandle)
rc = W32_NSFDBREPLICAINFOGET(dbhandle, replInfo(0))
rc = W32_NSFDBCLOSE(dbhandle)
'crete new DB and asign replikaInfo
rc = W32_NSFDBCREATE(T_DbString, DBCLASS_NOTEFILE, forceIt)
Print "Create",rc
rc = W32_NSFDBOPEN(T_DbString, dbhandle)
Print "Open", rc
rc = W32_NSFDBREPLICAINFOSET(dbhandle, replInfo(0))
Print "Set", rc
rc = W32_NSFDBCLOSE(dbhandle)
Print "close", rc
End Function
--- Ende Code ---
aufgerufen wird der code dann beispielsweise:
--- Code: ---Sub Click(Source As Button)
rc = CreateReplStub("comm3/singultus/de", "mail\bgates.nsf", "comm2/singultus/de", "mail\bgates.nsf", True)
End Sub
--- Ende Code ---
Der code erstellt einen replica stub in dem du jetzt über
notesReplicationEntry.Formula = formula$ die Replikationsformel setzen kannst.
Ein bisschen ErrorHandling solltest du auch noch einbauen. Habe den Code auf das Nötigste abgespeckt.
mastertom:
Wow... das liest sich sehr schlüssig... da werde ich mich gleich mal dransetzen :-)
Vielen Dank für die Unterstützung... Ich melde mich dann entsprechender Erfolgsmeldung :-)
0xse:
Bis auf die Anlage des Replik-Rumpfes findest du alles hier:
http://atnotes.de/index.php/topic,47655.0.html
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln