@ReplicateWithFormula
Syntax
@ReplicateWithFormula(DBHANDLE1;DBHANDLE2;FORMULA3;FNLIST4);
@ReplicateWithFormula(DBHANDLE1;DBHANDLE2;FORMULA3;FNLIST4;NOTECLASSES5;FNREPLICATIONFLAGS6);
@ReplicateWithFormula(DBHANDLE1;DBHANDLE2;FORMULA3;FNLIST4;NOTECLASSES5;FNREPLICATIONFLAGS6;FNLISTERROR7);
Beschreibung
Repliziert die durch DBHANDLE1 referenzierte Datenbank mit der durch DBHANDLE2 referenzierten Datenbank. Dabei werden nur die Dokumente repliziert, die der Notes-kompatiblen Selection Formula TEXT/TEXTLIST FORMULA3 entsprechen. FORMULA3 kann als TEXT oder TEXTLIST übergeben werden. Wird eine TEXTLIST übergeben, wird das erste Element als Selection Formula für die durch DBHANDLE1 referenzierte Datenbank verwendet, das zweite Element entsprechend für die durch DBHANDLE2 referenzierte Datenbank. FNLIST4 enthält die Replikationsrechte. Das erste Element gibt die Rechte für die Replikation in der ersten Datenbank an, das zweite Element die Rechte für die zweite Datenbank. Die Datenbanken müssen keine Repliken voneinander sein. Über FNREPLICATIONFLAGS6 können Optionen des Replicators aktiviert oder deaktiviert werden.
Es wird eine FNLIST zurückgegeben:
Element Bedeutung
1 UpdateCount DBHANDLE1
2 CreateCount DBHANDLE1
3 DeleteCount DBHANDLE1
4 UpdateCount DBHANDLE2
5 CreateCount DBHANDLE2
6 DeleteCount DBHANDLE2
FNLIST4:
Bit HEX Bedeutung
01 0001 Lesen
02 0002 Schreiben
03 0004 Ändern
04 0008 Löschen
Hinweis:
Bei Replikationen mit asymmetrischer Rechtezuweisung kann es zu einem Verhalten kommen, das auf den ersten Blick widersprüchlich wirkt.
Beispiel: Datenbank A darf Dokumente nach Datenbank B replizieren. Datenbank B hat jedoch keine Löschrechte in Datenbank A.
Wird nun ein Dokument zunächst von A nach B repliziert und anschließend in B gelöscht, entsteht in B ein Deletion Stub. Dieser Deletion Stub bleibt bis zum CutOffTD der Datenbank erhalten; siehe hierzu auch @GetDBReplicaInfo.
Da B keine Löschrechte in A hat, wird die Löschung nicht von B nach A repliziert. Das ursprüngliche Dokument bleibt also in A weiterhin vorhanden.
Solange der Deletion Stub in B existiert, wird das in A noch vorhandene Dokument jedoch auch nicht erneut von A nach B repliziert. Für die Replikationslogik gilt das Dokument in B in diesem Zeitraum weiterhin als gelöscht.
Erst wenn der Deletion Stub in B nach Ablauf des CutOffTD entfernt wurde, kann das Dokument bei einer späteren Replikation wieder von A nach B übertragen werden. Dadurch kann es so wirken, als würde das Dokument plötzlich wieder in B erscheinen.
Dieses Verhalten entspricht dem Verhalten des Domino-Replicators bei asymmetrisch vergebenen Replikationsrechten.
Der optionale Parameter NOTECLASSES NOTECLASSES5 dient zur Einschränkung der Dokumente die in der Selection-Formula TEXT FORMULA3 berücksichtigt werden. Wird NOTECLASSES5 nicht angegeben wird die Selection-Formula FORMULA3 auf Documente der NOTECLASS 1 (Documents) angewendet.
NOTECLASSES5:
DEC BIT Bedeutung
00000 XX No Notes keine Dokumente
00001 01 Documents Daten-Dokumente
00002 02 Policy-Note Über-DB-Dokument
00004 03 Form-Note Masken-Design-Dokumente
00008 04 View-Note Ansicht-Design-Dokumente
00016 05 Icon-Note Piktogramm-Dokument
00032 06 Design-Collection-Note Ansicht-Dokumente
00064 07 ACL-Info-Note ACL-Info-Dokument
00128 08 Help-Index-Note
00256 09 Help-Note Hilfe-DB-Dokument
00512 10 Filter-Note Macro-Design-Dokumente
01024 11 Feld-Note Feld-Design-Dokumente
02048 12 Replication-Note Replikations-Dokumente
04096 13 Privat_Design Privat-Design-Dokumente
32768 16 Default-Note of Each Von jedem das Vorgabe-Dokument
32767 01-15 Notes Alle Dokumente
32766 02-15 All Non-Document-Notes Alle nicht Daten-Dokumente
(Um mehrere Dokumenten-Klassen anzugeben werden die Werte der betreffenden Klassen addiert oder durch @BitVektor aufgebaut)
FNREPLICATIONFLAGS6:
Bit HEX Bedeutung
01 0001 Lokalisieren von Links (Doc;View;DB) in Datenbanken mit unterschiedlicher ReplicaID.
02 0002 Reserviert
03 0004 "NOTE changed during the REPLICATION process, …" Fehlermeldungen werden nicht ausgegeben.
FNLISTERROR7:
Bei Verwendung des optionalen Return-Parameter FNLISTERROR7, wird in diesem eine Error-Statistik zurückgegeben.
Element Bedeutung
1 Error UpdateCount DBHANDLE1
2 Error CreateCount DBHANDLE1
3 Error DeleteCount DBHANDLE1
4 Error UpdateCount DBHANDLE2
5 Error CreateCount DBHANDLE2
6 Error DeleteCount DBHANDLE2
Beispiel: @ReplicateWithFormula(DBHANDLE1;DBHANDLE2;FORMULA3;FNLIST4;NOTECLASSES5;FNREPLICATIONFLAGS6;FNLISTERROR7);
/*
Beispielscript zur Replikation von Datenbanken mit unterschiedlichen
Replik-IDs unter Verwendung einer Formel.
Dieses Script öffnet zwei Notes-Datenbanken und repliziert ausgewählte
Dokumente zwischen diesen Datenbanken anhand einer Formel.
Das Script protokolliert die Anzahl der aktualisierten, erstellten und
gelöschten Dokumente sowie die entsprechenden Fehlerzahlen für beide Datenbanken.
*/
SrcDBPath:="test\\testdb1.nsf";
DstDBPath:="test\\testdb2.nsf";
/* Quell- und Zieldatenbank öffnen. */
SrcDBh:=@OpenDB(SrcDBPath);
DstDBh:=@OpenDB(DstDBPath);
/* Beschriftungen für die Replikations-Ergebniszähler erzeugen. */
RetLabels:=("Number of docs "+@Explode("updated in ;created in ;deleted in ";";")+SrcDBPath+": "):
("Number of docs "+@Explode("updated in ;created in ;deleted in ";";")+DstDBPath+": ");
/* Beschriftungen für die Replikations-Fehlerzähler erzeugen. */
RetErrorListsLabels:=("Number of errors while "+@Explode("updating in ;creating in ;deleting in ";";")+SrcDBPath+": "):
("Number of errors while "+@Explode("updating in ;creating in ;deleting in ";";")+DstDBPath+": ");
/* Wenn eine der Datenbanken nicht geöffnet werden konnte, den entsprechenden Fehler protokollieren. */
IF(@IsError(SrcDBh;DstDBh)){
IF(@IsError(SrcDBh)){
@LogReport(SrcDBh;3);
}
IF(@IsError(DstDBh)){
@LogReport(DstDBh;3);
}
}ELSE{
/* Die zu replizierenden Dokumente auswählen. Es werden nur Einträge der Familie "Mustermann" repliziert! */
Formula:="SELECT Form=\"MySqlAmount\" & @Right(Name;\" \")=\"Neumann\"";
/* Reguläre Datendokumente replizieren. */
NoteClasses:=1;
/* Standard-Replikationsverhalten verwenden. */
ReplicationFlags:=0;
/* Replikationsrechte für Quell- und Zieldatenbank festlegen. Alle Rechte werden gewährt! */
SrcDB_RghtsBitVector:=@BitVektor(1:2:3:4);
DstDB_RghtsBitVector:=@BitVektor(1:2:3:4);
/* Rechte-Definitionen für Quell- und Zieldatenbank zusammenführen. */
RightsList:=SrcDB_RghtsBitVector:DstDB_RghtsBitVector;
/* Alle Dokumente replizieren, die der Formel entsprechen. */
Ret:=@ReplicateWithFormula(SrcDBh;DstDBh;Formula;RightsList;NoteClasses;ReplicationFlags;RetErrorLists);
/* Replikations-Ergebniszähler protokollieren. */
@LogReport(@Implode(RetLabels+@Text(Ret);@NewLine);3);
/* Replikations-Fehlerzähler protokollieren. */
@LogReport(@Implode(RetErrorListsLabels+@Text(RetErrorLists);@NewLine);3);
} /* END IF(@IsError(SrcDBh;DstDBh)) */
/* Quelldatenbank schließen, wenn sie erfolgreich geöffnet wurde. */
IF(!@IsError(SrcDBh)){
SrcDBh:=@CloseDB(SrcDBh);
}
/* Zieldatenbank schließen, wenn sie erfolgreich geöffnet wurde. */
IF(!@IsError(DstDBh)){
DstDBh:=@CloseDB(DstDBh);
}
