Function DE Version 1.90

@RecalculateNote

Database Note

Syntax

@RecalculateNote(NOTEHANDLE1;NOTEHANDLE2;FLAGS3);
@RecalculateNote(NOTEHANDLE1;NOTEHANDLE2;FLAGS3;CHANGEDFIELDSTEXTLIST6);
@RecalculateNote(NOTEHANDLE1;NOTEHANDLE2;FLAGS3;TLERRFIELDNAMES4;NLERRFIELDEVENTS5);
@RecalculateNote(NOTEHANDLE1;NOTEHANDLE2;FLAGS3;TLERRFIELDNAMES4;NLERRFIELDEVENTS5;CHANGEDFIELDSTEXTLIST6);

Beschreibung

NOTEHANDLE NOTEHANDLE1
Dokument, für das die Neuberechnung ausgeführt werden soll.

NOTEHANDLE NOTEHANDLE2
Form-Design-Dokument, das die Formeln und Felder enthält.

NF
FLAGS3
0 Fehler melden
1 Bei Fehlern fortfahren

Return TEXTLIST TLERRFIELDNAMES4
Feldnamen der Felder, bei denen Fehler aufgetreten sind.
Hinweis: Diese Liste enthält möglicherweise nicht alle Feldnamen.

Return NUMBERLIST TLERRFIELDEVENTS5
Fehlerereignis-Codes:
1 = Fehler in der Vorgabewert-Formel
2 = Fehler in der Eingabeumsetzung-Formel
3 = Fehler in der Eingabevalidierung-Formel
4 = Fehler in der Wert-Formel eines berechneten Feldes
5 = Fehler bei der Datentypprüfung für das Feld
6 = Fehler beim Speichern eines berechneten Formelfeldes

Return TEXTLIST CHANGEDFIELDSTEXTLIST6
Feldnamen der geänderten Felder.

Return:
0 = OK, kein Feld wurde geändert
1 = OK, ein oder mehrere Felder wurden geändert
@ERROR = Die Neuberechnung konnte nicht ausgeführt werden

Die Neuberechnung führt folgende Schritte aus:
1. Felder mit Vorgabewert-Formeln
2. Felder mit Eingabeumsetzung-Formel
3. Felder mit Eingabevalidierung-Formel
4. Werte für berechnete Felder berechnen

Example: @RecalculateNote(NOTEHANDLE1;NOTEHANDLE2;FLAGS3;TLERRFIELDNAMES4;NLERRFIELDEVENTS5;CHANGEDFIELDSTEXTLIST6)

SrcDBPath:="TEST\\TESTDB1.NSF";
DesignNoteFormName:="RecalcNote";
SearchFormula:="SELECT Form=\"RecalcNote\" & Field_Input1=\"Test 1\"";

SrcDBH:=@OpenDB(SrcDBPath);

DesignNoteType:=4; /*Form-Design*/

DesignNoteH:=@OpenDesignNote(SrcDBH;DesignNoteFormName;DesignNoteType;DesignNoteH);

IDList:=@ScanDB(SrcDBH;SearchFormula;@AnyAllDay;1);
FirstFoundID:=@GetListElement(IDList;1);

TargetDocH:=@OpenNoteByID(SrcDBH;FirstFoundID;TargetDocH);
/*Field_Input1[TargetDocH]:=Field_Input2[TargetDocH];*/
@PrtVStack("TargetDocH";1;2048);
Ret:=@RecalculateNote(TargetDocH;DesignNoteH;0;RetErrorFieldNames;RetErrorFieldEvents;RetChangedFields);
@LogReport(Ret;3);
@LogReport("RetErrorFieldNames :"+@Implode(RetErrorFieldNames;", ");3);
@LogReport("RetErrorFieldEvents:"+@Implode(@Text(RetErrorFieldEvents);", ");3);
@LogReport("RetChangedFields :"+@Implode(@Text(RetChangedFields);", ");3);
@PrtVStack("TargetDocH";1;2048);

TargetDocH:=@CloseNote(TargetDocH;1);

DesignNoteH:=@CloseNote(DesignNoteH;0); /*Do not save form!*/
SrcDBH:=@CloseDB(SrcDBH);

Hinweis:
Diese @Funktion wird direkt über die Domino/Notes-API-Funktionen ausgeführt und kann zu nicht immer ganz logisch erscheinenden Ergebnissen führen!
Auch zu beachten ist, dass der Kontext der Ausführung der Formeln kein normaler Benutzer ist, sondern der Server selbst!
Mit dieser @Funktion können fast "beliebige" Datenmanipulationen vorgenommen werden, wobei berücksichtigt werden muß, daß die einzelnen Formeln von "Computed" Feldern scheinbar mehrfach ausgeführt werden. Daher muß beim Löschen von Feldinhalten beachtet werden, daß andere Feldinhalte die sich in ihrer Berechnung darauf stützten nach erstmaliger Berechnung mittels Konstrukten wie z.B. @If(@IsAvailable(XXX);@Return(XXX);"") vor einer mehrmaligen Berechnung geschützt werden.