Project

General

Profile

Actions

Feature #18491

open

Input: select / radio / checkbox - keep old value in case of changed itemList

Added by Carsten Rose 2 months ago. Updated about 1 month ago.

Status:
New
Priority:
Normal
Assignee:
-
Target version:
Start date:
25.04.2024
Due date:
% Done:

0%

Estimated time:
Discuss:
Prio Planung:
No
Vote:

Description

Mitunter veraendert sich der Inhalt einer itemList.

Beispiel: Ein Student macht einen Vortrag bei einem Studentenseminar und wird als Sprecher erfasst. In der Auswahlliste sind nur aktuell eingeschriebene Studenten enthalten. Ein Jahr spaeter, der Student hat sein Studium abgeschlossen und ist kein Student mehr, steht die Person in der Auswahlliste nicht mehr zur Verfuegung. Wird der Vortragsrecord nun geoeffnet und gespeichert, wird die Person überschrieben - typischerweise wird die erste Person in der Auswahlliste eingetragen. Diese Veraenderung faellt oft nicht auf.

Das Verhalten ist ein Bug - bisher muss aufwendig explizit programmiert werden damit dieser Fall abgefangen wird.

0) Neu gibt es eine Option missingItem = auto (default)|warn|error|ignore

  • auto: Es wird mit 1,2 versucht den Eintrag zu ermitteln. Gelingt das wird die Auswahlliste um den alten Eintrag erweitert und bei einem Save bleibt der Eintrag unveraendert.
  • warn: Der User wird darauf hingewiesen (beim laden des Forms), kann aber speichern und verliert damit den alten Eintrag.
  • error: Der User wird darauf hingewiesen (beim laden des Forms), kann aber nicht speichern (Form im Read Only Mode).
  • ignore: QFQ ignoriert das Problem, der alte Eintrag wird beim save überschrieben.

1) Neu kann eine explizite SQL Query angegeben werden, die den alten Wert in der Auswahlliste hinzufuegt (falls nicht vorhanden):

oldItem = {{!SELECT p.id AS id, p.name AS label FROM Person AS p WHERE p.id={{p_id:R0}} }}

Die Query wird nur gefeuert falls der bestehende Wert nicht in der ItemList gefunden wird.

Ist kein oldItem definiert, geht es mit 2,3 weiter.

2) Mithilfe der bestehenden SQL itemlist Query wird automatisiert versucht den alten Wert zu laden.

  • QFQ analysiert die itemList Query und baut daraus eine neue Query.
  • Falls es ein SET oder ENUM und der Eintrag nicht mehr gefunden wird: 'warning' falls 'auto' definiert ist.
  • Die 'id' Spalte zeigt auf die Tabelle (Table Alias, ohne Tablename, ggfs. mehrere Tables - dann nach der Spalte in der Tabelle suchen) aus der der Record kommt.
  • Den Record laden
    • Die Definition der 'label' Spalte übernehmen (in der Regel ist das nur eine Spalte oder ein CONCAT).
    • Sollten Spalten von weiteren Tabellen in dem CONCAT stehen: diese Spalten aus dem duplizierten Concat entfernen.
  • Die WHERE Bedinung enhaelt nur ein id=<value>
  • Sollte die Query kein Ergebnis oder einen SQL Fehler liefern (es wird keine Fehlermeldung ausgegeben), wird der 'mode' von 'auto' auf 'warning' gewechselt.
Actions

Also available in: Atom PDF