Function DE Version 3.08

@ReplicateWithFormula

Database NotesAdmin NotesSystem Replication

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);
}