Function DE Version 4.50

@PushAndReplace

Database NotesAdmin NotesSystem Replication

Syntax

@PushAndReplace(FROMDBHANDLE1;TODBHANDLE2;FORMULA3;FN4;NOTECLASSES5;FNREPLICATIONFLAGS6;FNLISTERROR7;TEXTLISTActKey;TEXTLISTKeyFieldName;TEXTLISTReplaceFieldName;TEXTLISTTargetFieldName;FNLISTTargetFieldFlags;FNLISTOperationFlags;TEXTLISTDefaultFieldName;TEXTLISTDefaultValue;TEXTRemoveFieldNamesFieldName;TEXTLISTRemoveFieldNames);

Beschreibung

Repliziert die Datenbank mit dem DBHANDLE FROMDBHANDLE1 mit der Datenbank mit dem DBHANDLE TODBHANDLE2 in der Richtung von FROMDBHANDLE1 nach TODBHANDLE2, wobei nur die Dokumente repliziert werden, die der Notes-Kompatiblen Selection-Formula TEXT FORMULA3 und den NOTECLASSES NOTECLASSES5 entsprechen.
Es ist nicht erforderlich daß die Datenbanken Repliken voneinander sind.

Die Dokumente werden in der DB mit dem DBHANDLE TODBHANDLE2 anhand der korrespondierenden Listen
TEXTLIST TEXTLISTActKey,
TEXTLIST TEXTLISTKeyFieldName,
TEXTLIST TEXTLISTReplaceFieldName,
TEXTLIST TEXTLISTTargetFieldName,
FNLIST FNLISTTargetFieldFlags,
FNLIST FNLISTOperationFlags,
TEXTLIST TEXTLISTDefaultFieldName und
TEXTLIST TEXTLISTDefaultValue
sowie von den PARAMETERN
TEXT TEXTRemoveFieldNamesFieldName und
TEXTLIST TEXTLISTRemoveFieldNames
verändert.

Bei den korrespondierenden Listen gehören jeweils die Elemente mit der gleichen Position in den Listen zusammen.
Die Veränderung erfolgt in den Dokumenten (für jedes Dokument einzeln) der DB mit dem DBHANDLE TODBHANDLE2 nach folgender Logik:
1. Im Feld aus dem aktuellen Dokument (erwartete Datentypen:TEXT oder TEXTLIST) mit dem Feldnamen, der aus der TEXTLIST TEXTLISTKeyFieldName entnommen wird, wird nach dem Key aus TEXTLIST TEXTLISTActKey gesucht.

2. Aus dem Feld aus dem aktuellen Dokument (erwartete Datentypen:TEXT oder TEXTLIST) mit dem Feldnamen, der aus der TEXTLIST TEXTLISTReplaceFieldName entnommen wird, wird das Element (an der selben Position an der der Key im obigen Feld gefunden wurde) entnommen.

3. Dieser TEXT (aus Schritt 2) wird dann in ein Feld, dessen Namen aus der TEXTLIST TEXTLISTTargetFieldName entnommen wird und mit den FieldFlags aus FNLIST FNLISTTargetFieldFlags, in das aktuelle Dokument gesetzt.

Wird der Key in Schritt 1 nicht gefunden, wird
zunächst (siehe FNLIST FNLISTOperationFlags) im aktuellen Dokument nach einem Feld, dessen Namen aus TEXTLIST TEXTLISTDefaultFieldName entnommen wird, gesucht.
Wird es gefunden (erwartete Datentypen:TEXT oder TEXTLIST) wird dessen Inhalt in Schritt 3 als Feldwert genommen.
Wird es nicht gefunden wird der Wert aus TEXTLIST TEXTLISTDefaultValue als Feldwert in Schritt 3 genommen.
(Mit FNLIST FNLISTOperationFlags kann hier auf eine Methode eingeschränkt werden.)

Nachdem das Dokument erfolgreich für jedes Element der korrespondierenden Listen bearbeitet wurde, werden die Felder die als TEXT oder TEXTLIST im Feld mit dem Namen TEXT TEXTRemoveFieldNamesFieldName aus dem aktuellem Dokument gelöscht. Danach werden die Felder die in TEXTLIST TEXTLISTRemoveFieldNames angegeben sind aus dem aktuellem Dokument gelöscht

Tritt bei dieser Logik ein Fehler auf, wird das Dokument nicht in die DB mit dem DBHANDLE TODBHANDLE2 repliziert und das Element 4 der FNLIST FNLISTERROR7 wird um eins erhöht. Im Replizier-Konflikt-Fall ist das Dokument in der DB mit
dem DBHANDLE TODBHANDLE2 immer der Conflict-Looser.

Es wird eine FNLIST zurückgegeben:

Element   Bedeutung
1   UpdateCount TODBHANDLE2
2   CreateCount TODBHANDLE2
3   DeleteCount TODBHANDLE2

FN4:

Bit   HEX   Bedeutung
01   0001   Lesen
02   0002   Schreiben
03   0004   Ändern
04   0008   Löschen

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 Dokumentenklassen 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.

FNLISTERROR7:
Bei Verwendung des optionalen Return-Parameter FNLISTERROR7, wird in diesem eine Error-Statistik zurückgegeben.

Element   Bedeutung
1   Error UpdateCount TODBHANDLE2
2   Error CreateCount TODBHANDLE2
3   Error DeleteCount TODBHANDLE2
4   Error Replacer TODBHANDLE2

FNLISTOperationFlags:
DEC   BIT   Bedeutung

00001   01   Use only DefaultText *
00002   02   Use only DefaultField *

* If none of this bits is set: Use DefaultField if possible otherwise use DefaultText

FNLISTTargetFieldFlags:
DEC   BIT   Bedeutung
0001   01   SIGN
0002   02   SEAL
0004   03   SUMMARY
0008   04   
0016   05   SEALED
0032   06   READ/WRITE-ACCESS
0064   07   NAMES
0128   08   
0256   09   PLACEHOLDER
0512   10   PROTECTED
1024   11   READ-ACCESS

(Um mehrere FieldFlags anzugeben werden die Werte addiert.)

Beispiel: @PushAndReplace(FROMDBHANDLE1;TODBHANDLE2;FORMULA3;FN4;NOTECLASSES5;FNREPLICATIONFLAGS6;FNLISTERROR7;TEXTLISTActKey;TEXTLISTKeyFieldName;TEXTLISTReplaceFieldName;TEXTLISTTargetFieldName;FNLISTTargetFieldFlags;FNLISTOperationFlags;TEXTLISTDefaultFieldName;TEXTLISTDefaultValue;TEXTRemoveFieldNamesFieldName;TEXTLISTRemoveFieldNames)

FROMDBHANDLE1:=@OpenDB("REPL1.NSF");
TODBHANDLE2:=@OpenDB("REPL2.NSF");
FORMULA3:="SELECT @All";
FN4:=@BitVektor(1:2:3:4);
NOTECLASSES5:=1;
FNREPLICATIONFLAGS6:=1;
TEXTLISTActKey:="Key1":"Key3";
TEXTLISTKeyFieldName:="KeyList":"KeyList";
TEXTLISTReplaceFieldName:=ReplaceList":"ReplaceList";
TEXTLISTTargetFieldName:="Target1":"Target2";
FNLISTTargetFieldFlags:=1092:100;
FNLISTOperationFlags:=0:0;
TEXTLISTDefaultFieldName:="DefaultFieldName1":"DefaultFieldName2";
TEXTLISTDefaultValue:="DefaultValue Key1":"DefaultValue Key2";
TEXTRemoveFieldNamesFieldName:="RemoveFieldsList";
TEXTLISTRemoveFieldNames:="";
Ret:=@PushAndReplace(FROMDBHANDLE1;TODBHANDLE2;FORMULA3;FN4;NOTECLASSES5;FNREPLICATIONFLAGS6;FNLISTERROR7;TEXTLISTActKey;TEXTLISTKeyFieldName;TEXTLISTReplaceFieldName;TEXTLISTTargetFieldName;FNLISTTargetFieldFlags;FNLISTOperationFlags;TEXTLISTDefaultFieldName;TEXTLISTDefaultValue;TEXTRemoveFieldNamesFieldName;TEXTLISTRemoveFieldNames);
@LogReport(Ret;3);
@LogReport(FNLISTERROR7;3);

TODBHANDLE2:=@CloseDB(TODBHANDLE2);
FROMDBHANDLE1:=@CloseDB(FROMDBHANDLE1);

Die Dokumente aus der DB mit dem DBHANDLE FROMDBHANDLE1 werden in die DB mit dem DBHANDLE TODBHANDLE2 repliziert und verändert.

1.Beispiel für ein Dokument und dessen Änderung:

Dokument in DB1:
Feldname   Datentyp   FieldFlags   Inhalt (Listenseperator Semikolon)
KeyList   TEXTLIST   4   Key1;Key2;Key3
ReplaceList   TEXTLIST   4   User1;User2;User3
RemoveFieldsList   TEXTLIST   4   KeyList;ReplaceList;RemoveFieldsList
Form   TEXT   4   Test

repliziertes (und geändertes) Dokument in DB2:

Feldname   Datentyp   FieldFlags   Inhalt (Listenseperator Semikolon)
Target1   TEXT   1092   User1
Target2   TEXT   100   User3
Form   TEXT   4   Test

2.Beispiel für ein Dokument und dessen Änderung:

Dokument in DB1:
Feldname   Datentyp   FieldFlags   Inhalt (Listenseperator Semikolon)
KeyList   TEXTLIST   4   Key2;Key3;Key4
ReplaceList   TEXTLIST   4   User2;User3;User4
DefaultFieldName1   TEXT   4   DefaultUser1
RemoveFieldsList   TEXTLIST   4   KeyList;ReplaceList;RemoveFieldsList;DefaultFieldName1
Form   TEXT   4   Test

repliziertes (und geändertes) Dokument in DB2:

Feldname   Datentyp   FieldFlags   Inhalt (Listenseperator Semikolon)
Target1   TEXT   1092   DefaultUser1
Target2   TEXT   100   User3
Form   TEXT   4   Test

3.Beispiel für ein Dokument und dessen Änderung:

Dokument in DB1:
Feldname   Datentyp   FieldFlags   Inhalt (Listenseperator Semikolon)
KeyList   TEXTLIST   4   Key2;Key3;Key4
ReplaceList   TEXTLIST   4   User2;User3;User4
RemoveFieldsList   TEXTLIST   4   KeyList;ReplaceList;RemoveFieldsList
Form   TEXT   4   Test

repliziertes (und geändertes) Dokument in DB2:

Feldname   Datentyp   FieldFlags   Inhalt (Listenseperator Semikolon)
Target1   TEXT   1092   DefaultValue Key1
Target2   TEXT   100   User3
Form   TEXT   4   Test

Hinweis zu diesen Beispiel-Dokumenten:
Felder die für das Verständnis der Replace-Logik nicht erforderlich sind ($UpdatedBy, $Revisions …) wurden nicht aufgeführt.