4D v14

Video Skript

Home

 
4D v14
Video Skript

Video Skript  


 

 

Dieses Video 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.
Beim Operieren mit zwei Mengen können wir eine Untermenge als Ergebnis der bestimmten Operation bilden (gemäß der konventionellen Mengenlehre).

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)

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. Hier haben wir eine Auswahl von 11.732 Einsätzen für die Formel. Sie lautet wie folgt:

 [Interventions]Progress:=Round(Mod(Random;100);-1)

Sie berechnet den Prozentwert und rundet die letzte Stelle.

Erstellen wir nun einen Bericht zum Prüfen des erreichten Prozentwerts, sehen wir, dass er zwischen 0 und 100 liegt.

Klicken wir jetzt auf die 1. Schaltfläche und dann auf die 2., verlieren wir natürlich die mit dem 1. Klick erstellte Menge.
Es ist also sinnvoll, in der 1. Schaltfläche nach der Suche die Information in einer Menge zu halten. Wir nennen sie "Intervention-Morning".

 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:

  • Vereinigungsmenge Früheinsätze + Einsätze in Bearbeitung.
    Wir duplizieren die Schaltfläche und geben an, dass dies die Einsätze vor 9:00 a.m. + jene noch in Bearbeitung sind.

    Wir schreiben wie folgt: Pause
     UNION("Intervention_Morning";"Intervention_InProgress";"Interventions_Result")

    Die 3. Menge Interventions_Result legt fest, die ersten beiden zu behalten.
  • Für Früheinsätze noch in Bearbeitung vergleichen wir den gemeinsamen Teil beider Mengen, so dass wir alle noch nicht erledigten Früheinsätze erhalten. In diesem Fall müssen Sie nicht den Befehl UNION, sondern INTERSECTION verwenden.
  • Für abgeschlossene Einsätze müssen wir auf die beiden Mengen DIFFERENCE anwenden: alle Früheinsätze minus der noch in Bearbeitung ergeben diese Menge.

Wir testen die verschiedenen Möglichkeiten durch Ausführen des Formulars Navigator.
Wir nehmen alle Einsätze, es sind 11.732, nach Klick auf Query haben wir immer noch 11.732.

Warum ist das so? Im vorigen Video 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 beiden Suchschaltflächen an.
Derzeit haben wir hier keinen Zeiger auf die Tabelle; wir bearbeiten Interventions.

Dann kopieren wir diese Zeile Code für die 4 anderen Schaltflächen:

  • Union, wir sehen, dass bei diesen 3 Schaltflächen etwas fehlt ... 
  • Intersection
  • Difference
  • und hier auch auf Suchen

Zurück im Formular Navigator haben wir jetzt:

  • 631 Einsätze vor 9:00 a.m.
  • 11.192 noch laufende Einsätze

Einsätze vor 9:00, die zu 100%, noch laufende Einsätze vor 9:00 oder um 9:00 beendete Einsätze scheinen die hier angezeigte Zahl nicht zu verändern.

Warum ist das so? Weil das Erstellen einer Menge nicht ihre Verwendung impliziert.
In dieser Schaltfläche müssen wir nach Erstellen der Vereinigung, der 3. Menge, angeben, dass diese Menge verwendet werden muss.

Wir ändern also den Code:

  • Hier fügen wir den Befehl USE SET hinzu
  • Kopieren und fügen ihn in den 2 anderen Schaltflächen hinzu
  • Wir fügen also die Zeile für die zu verwendende Menge in diesen Schaltflächen hinzu

Wir testen jetzt:

  • Einsätze in Bearbeitung: Wir haben 601
  • Beendete Einsätze: Wir haben 30
  • Das entspricht den Einsätzen vor 9:00 Uhr: also 631

Wir schließen das Formular und starten die Methode Navigator erneut.
Klicken wir auf eine der drei rechten Schaltflächen, erscheint eine Meldung, dass die Mengen nicht existieren. Sie müssen natürlich existieren, bevor wir sie nutzen.
Wir verfolgen das Erstellen dieser Mengen. Dazu klicken wir auf die 1. Suchschaltfläche.

Wir sehen in der Liste links, dass unter "Sets" die Liste der vorhandenen Mengen im Prozess im Schrittmodus erscheint. Derzeit gibt es keine. 

Beim Ausführen der Methode:

  • Benennen wir eine erste Menge
  • Benennen eine 2. während dem Ausführen der ersten
  • Im Schrittmodus sehen wir, dass die 3. Menge beim Ausführen der 1. Zeile erstellt wird

Dann sehen wir, da die Menge bereits existiert, dass sich nur die Anzahl ändert.

Sie müssen beachten, dass eine Menge nur eine Liste Datensätze ist, die nicht unbedingt die aktuelle Auswahl ist. Derzeit enthält die aktuelle Auswahl der Tabelle Interventions 601 Datensätze.

Wechseln wir zum Befehl USE SET, enthält die Auswahl jetzt eine Anzahl Datensätze, die zur Anzahl in der Menge passt. Die Variable vNbRecords wird ebenfalls entsprechend angepasst.

Eine andere praktische Verwendung von Mengen ist: mehrere Datensätze auswählen und als aktuelle Auswahl festlegen; klicken wir auf die Schaltfläche, gibt es nur diese X Datensätze.

Dazu müssen Sie:

  • Die Schaltfläche programmieren
  • Angeben, dass wir eine Auswahl wollen
  • Eine Eingabe in die Methode kopieren
  • Und den entsprechenden Code schreiben

Der Code lautet:

 $SetName:="Userset_"+String(Milliseconds)
 GET HIGHLIGHTED RECORDS($TablePointer->;$SetName)
 USE SET($SetName)
 vNumRecords:=Records in selection($TablePointer->))

Das heißt im Klartext:

  • Mengenname setzen (hier Textteil + in Text konvertierte Millisekunden) )
  • Markierte Datensätze erhalten, hier die in der entsprechenden Tabelle angeklickt wurden und Menge erstellen
  • Die Menge verwenden
  • Anzahl der dazugehörigen Datensätze neu berechnen
  • Dann Menge entfernen, um Speicher wieder freizugeben

Wir testen nun:

  • alle Einsätze
  • Wir können ein paar auswählen
  • Und wir zeichnen die Auswahlschaltfläche

Wir haben jetzt:

  • Einen Mengennamen
  • Die Menge wird hier erstellt; wir haben 3 Einträge in dieser Menge
  • Wir machen sie zur aktuellen Auswahl der Tabelle Interventions
  • Wir berechnen die Anzahl Datensätze neu
  • Dann entfernen wir die Menge

Unser Array enthält jetzt die Liste der ausgewählten Datensätze.

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:
COPY NAMED SELECTION und USE NAMED SELECTION

Wir fügen eine weitere Schaltfläche hinzu, um:

  • Eine erste Auswahl zu erstellen (T1 temporäre Auswahl)
  • Wir kopieren den Code in die temporäre Auswahl
  • Und duplizieren die Schaltfläche: T2

Jetzt können Sie 2 Auswahlen erstellen, die die Sortierreihenfolge berücksichtigen.

Sie existieren im Speicher, werden aber nicht verwendet.

Als nächstes:

  • Duplizieren wir diese Schaltflächen
  • Ändern ihre Formel, um die Verwendung dieser Auswahlen anzufordern (hier müssen wir die Tabelle nicht angeben.)

Wir nehmen alle Einsätze:

  • Markieren die ersten
  • Auswahl
  • Sortieren nach Einsatzdatum und -zeit
  • Erstellen eine 1. Auswahl
  • Nehmen dann diese Auswahl
  • Sortieren sie nach Objekt und Einsatzzeit
  • Und erstellen dann eine 2. Auswahl

Wir testen:

  • Fordern wir die 1. Auswahl an, erscheint sie gemäß den angegebenen Kriterien Datum und Zeit
  • Klicken wir auf die 2. Schaltfläche, werden sie nach Objekt und dann nach Datum sortiert

 
EIGENSCHAFTEN 

Produkt: 4D
Thema: Mengen und temporäre Auswahlen

 
ARTIKELVERWENDUNG

Self-Training ( 4D v13)
Self-Training ( 4D v14)