Multi-Entity-Modification
Informationen
- Kategorien: Kernel | Klassenformeln
- Version: 17.0.0.5752
- Veröffentlichungsdatum: Dienstag, 21. Januar 2014
- Entwickler: Eiteljörge
- Benötigt Datenbankänderung: Nein
- Betreff: Informationen zur Multi-Entity-Modification im onchange-Aufruf
Beschreibung
Der Benutzer kann mehrere Objekte markieren. Wenn er dann einen Wert ändert, wird dieser Wert an jedes markierte Objekt zugewiesen (Mehrfach-Objekt-Bearbeitung).
Das Problem:
Für jedes Objekt, welches über diese Operation geändert wird, erhält eine Klassenformel eine onchanged-Nachricht. Die Klassenformel kann anhand dieser Nachricht nicht erkennen, ob die Änderung teil einer Mehrfach-Objekt-Bearbeitung ist und ob es die erste oder die letzte Entity der Mehrfach-Objekt-Bearbeitung ist.
Die Lösung:
In der Kategorie 'Context/Multi-Entity-Modification' gibt es vier neue Kernfunktionen:
* IsMultiEntityModification()
* GetIndexCurrentEntityOfMultiModification()
* GetExpectedEntitiesOfMultiModification()
* GetMarkedEntitiesOfMultiModification()
Diese Funktionen können in der Klassenformel im Reaktor onchanged aufgerufen werden, um Informationen über die Mehrfach-Objekt-Bearbeitung abzufragen.
onchanged ( «attribute» ) { var int $IndexCurrent; var int $CountMarked; var int $CountExpected;
if ( IsMultiEntityModification() )
{
$IndexCurrent = GetIndexCurrentEntityOfMultiModification();
$CountExpected = GetExpectedEntitiesOfMultiModification();
$CountMarked = GetMarkedEntitiesOfMultiModification()
}
}
Bei einer Mehrfach-Objekt-Bearbeitung sind mehrere Objekte markiert, die nacheinander den neuen Wert zugewiesen bekommen. Deswegen lautet die Information während eines onchanged-Aufrufes z.B.
Objekt 2 von 5
Ersetzt man die Zahlen durch die Funktionsaufrufe:
Objekt GetIndexCurrentEntityOfMultiModification() von GetExpectedEntitiesOfMultiModification()
Die Funktion GetIndexCurrentEntityOfMultiModification() liefert den null-basierenden Index des Objektes.
Die Funktion GetMarkedEntitiesOfMultiModification() liefert die Anzahl der markierten Objekte.
Die Funktion GetExpectedEntitiesOfMultiModification() liefert die erwartete Anzahl der Objekte, die bearbeitet werden.
Da möglicherweise nicht alle markierten Objekte bearbeitet werden, weil sie z.B. schreibgeschützt sind, kann die Anzahl zu bearbeitende Objekte kleiner sein als die Anzahl der markierten Objekte.
Es ist zu beachten, dass die Anzahl zu bearbeitende Objekte in jedem onchange-Aufruf anders sein kann. Sie kann kleiner aber auch wieder größer werden, aber natürlich niemals kleiner/gleich dem aktuellem Objekt-Index und größer als die Anzahl der markierten Objekte.
Das erste Objekt hat immer den Index 0.
Das letzte Objekt hat eigentlich den Index GetExpectedEntitiesOfMultiModification () - 1, aber dabei gibt es ein Problem. Im Ausnahmefall kann es sein, dass eine Klassenformel ein markiertes, schreibgeschütztes und noch nicht bearbeitetes Objekt schreibbar macht. Dadurch erhöht sich unerwartet die Anzahl zu bearbeitende Objekte und die Klassenformel bekommt noch einen weiteren onchanged-Aufruf.
Als Lösung dieses Problems ist die Implementierung eines neuen Events geplant, welches das wirkliche Ende der Mehrfach-Objekt-Bearbeitung meldet. Ohne dieses Event muss der Anwendungsentwickler sicher stellen, dass dieses Problem nicht auftritt.