4D v16Mengen und temporäre Auswahlen |
||||||||||||||||||||||||||||||||
|
4D v16
Mengen und temporäre Auswahlen
Mengen und temporäre Auswahlen
Diese Sequenz zeigt, wie Sie eine Auswahl beibehalten und Aktionen ausführen (Vereinigung, Schnittmenge und Differenz). Mengen sind ein einfacher Weg, um Aktionen auf Datensätze in einer Tabelle auszuführen. So können Sie eine Auswahl beibehalten und später wiederverwenden. Wir wenden das auf die Liste der Einsätze im Formular Navigator an und erstellen eine Menge aus der aktuellen Auswahl. Wir erstellen eine Schaltfläche, die nach den vor 9:00 gestarteten Einsätzen sucht. Hier die Methode zur Schaltfläche: QUERY([Interventions];[Interventions]Hour_Intervention<?09:00:00?) Wir erstellen eine 2. Schaltfläche für alle noch nicht 100% abgeschlossenen Einsätze. Wir schreiben folgenden Code: QUERY([Interventions];[Interventions]Progress<100) Momentan enthält die importierte Datei noch nicht diese Angabe in %. Also wenden wir zuerst auf alle Einsätze eine Formel an. Hierzu zeigen wir eine Auswahl von allen Einsätzen (11.732 ) an und wenden folgende Formel an (Menü Datensätze => Formel anwenden): [Interventions]Progress:=Round(Mod(Random;100);-1) Sie berechnet den Prozentwert und rundet die letzte Stelle. Klicken wir jetzt auf die 1. Schaltfläche und dann auf die 2., verlieren wir natürlich die mit dem 1. Klick erstellte Menge. CREATE SET([Interventions];"Intervention_Morning") Die Menge der gefundenen Einsätze, die noch nicht abgeschlossen sind, nennen wir Intervention_InProgress. CREATE SET([Interventions];"Intervention_InProgress") Dann können wir die Mengen vergleichen:
Wir testen die verschiedenen Möglichkeiten durch Ausführen des Formulars Navigator. Warum ist das so? Im vorigen Kapitel haben wir in der Methode Navigator_Functions ganz unten eine Zeile gesetzt. Sie gibt die Anzahl Datensätze nach Erstellen einer neuen Auswahl an. vNbRecords:=Records in selection([Interventions]) Wir kopieren diesen Code und wenden ihn auf die 5 neu erstellten Schaltflächen an. Testen wir die Schaltflächen, fällt auf, dass <9:00+ <100%, <9:00 in progress und <9:00 finished die hier angezeigte Zahl in vNbRecords nicht verändern. Warum ist das so? Weil das Erstellen einer Menge nicht ihre Verwendung impliziert. Wir ändern also den Code:
Wir testen jetzt (Abweichungen möglich, da wir zuvor die Random Funktion verwendet haben):
Wir schließen das Formular und starten die Methode Navigator erneut. Wir sehen in der Liste links, dass unter "Mengen" die Liste der vorhandenen Mengen im Prozess im Schrittmodus erscheint. Derzeit gibt es keine. Beim Ausführen der Methode sehen wir: Wiederholen Sie den Vorgang mit den anderen Schaltflächen, um den Ablauf zu verstehen. Sie müssen beachten, dass eine Menge nur eine Liste Datensätze ist, die nicht unbedingt die aktuelle Auswahl ist. Hier enthält die aktuelle Auswahl der Tabelle Interventions derzeit 11180 Datensätze. Wechseln wir zum Befehl USE SET, enthält die Auswahl jetzt eine Anzahl Datensätze, die zur Anzahl in der Menge passt (hier 11215). Die Variable vNbRecords wird ebenfalls entsprechend angepasst. Eine andere praktische Verwendung von Mengen ist: mehrere Datensätze (Strg + Linksklick) auswählen und als aktuelle Auswahl festlegen; klicken wir auf die Schaltfläche, gibt es nur diese X Datensätze. Dazu müssen Sie:
Der Code auf der Schaltfläche lautet: Navigator_Functions("Selection";FORM Get current page) und in der Methode innerhalb der Case-of Abfrage: :($Action="Selection") Da wir bereits dabei sind, überarbeiten wir auch die Schaltfläche Sort. Dazu übergeben wir in der Schaltfläche dieselbe Codezeile, verwenden aber statt „Selection“, „Sort“ und fügen in der Methode Navigator_Functions :($Action="Sort") ein. Diese Schaltfläche benötigen wir im späteren Verlauf des Kapitels. Das heißt im Klartext:
Eine Menge besteht aus einem Bit pro Datensatz, sie behält nicht die Sortierreihenfolge. Wollen Sie diese Information behalten, müssen Sie Befehle zu temporären Auswahlen verwenden: Wir fügen eine weitere Schaltfläche hinzu, um:
Jetzt können Sie 2 Auswahlen erstellen, die die Sortierreihenfolge berücksichtigen. Sie existieren im Speicher, werden aber nicht verwendet. Als nächstes:
Wir zeigen alle Einsätze an, dann machen wir folgendes:
Wir testen:
Hier sollten Sie folgendes beachten: Es gibt folgenden Speicherbedarf:
Nachfolgende Tabelle zeigt die Unterschiede zwischen Mengen und temporären Auswahlen:
Sie können nur Mengen aus derselben Tabelle miteinander vergleichen. Achtung: Mengen sind nur zeitlich begrenzt gültig, arbeiten Sie evtl. mit Semaphoren (weitere Infos siehe Handbuch 4D Programmiersprache im Kapitel Prozess (Kommunikation). Jedes Bit entspricht der derzeitigen Position eines Datensatzes in einer Tabelle. Werden Datensätze gelöscht oder hinzugefügt, kann der bisherige Inhalt eines vorhandenen Datensatzes durch neuen Inhalt ersetzt werden, der dann nicht mehr mit den Angaben in der Menge übereinstimmt, d.h. die Menge ist veraltet. Gehen Sie beim Verwenden von Mengen methodisch vor. Sie sind ein effizienter und schneller Weg zum Vergleichen von Auswahlen. Um eine Auswahl beizubehalten, können Sie auch ein Array verwenden, das über den Befehl SELECTION TO ARRAY ihre Identifikation enthält. Eine weitere Möglichkeit ist der Einsatz von Clustern, die z.B. in BLOBs gespeichert werden. Sie sollten natürlich nicht mehr benötigte Auswahlen löschen, um den Speicherplatz wieder freizugeben. CLEAR SET("MengeName")
|
EIGENSCHAFTEN
Produkt: 4D
GESCHICHTE
ARTIKELVERWENDUNG
Self-Training ( 4D v16) |
||||||||||||||||||||||||||||||