@PushAndReplace
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.
