In select-Abfrage funktioniert 'this' als Referenz nicht ?
Wir lernen ja, dass wir die Performance steigern können, wenn wir z.B. Select-Abfragen in 'do as transaction' kapseln. Offensichtlich wird die Abfrage dann schneller ausgeführt.
Nun wollte ich das anwenden bei einer Select-Abfrage, die als Code in einer Dynamischen-Auswahl zugrunde liegt:
let zz := this;
(select Vorgabewerte where Typ = 6 and Name = "Auftragsstatus" and contains(Textblock, text(zz.Auftragstyp))) order by Zahl
wenn ich die Abfrage nun so ändere dass ich nicht 'zz' als Referenz verwende sondern 'this' - dann schlägt der Code mit einem Fehler an, dass er this.Auftragstyp nicht kennt.
do as transaction select Vorgabewerte where Typ = 6 and Name = "Auftragsstatus" and contains(Textblock, text(this.Auftragstyp)) order by Zahl end
Und das liegt nicht an der transactionk, auch ohne wird es als falsch gemeldet:
select Vorgabewerte where Typ = 6 and Name = "Auftragsstatus" and contains(Textblock, text(this.Auftragstyp)) order by Zahl
Bedeutet das nun, dass man in select-Abfragen nicht auf 'this' referenzieren kann ?
11 Antworten
-
Hallo Dirk. Ich verstehe es so, dass das this, sich jeweils auf die Umgebung bezieht. Deklarierst du eine Variable wie in let me:= this, dann bezieht es sich auf die Tabelle in der du das Script schreibst. Benutzt du es aber in einer Selectanweisung, dann ist diese Tabelle die Umgebung und this (= record() der Tabelle Vorgabewerte) ist nutzlos, da es das Feld Auftragstyp wahrscheinlich in der Tabelle Vorgabewerte nicht gibt. Deshalb das Deklarieren einer Variablen in der Ausgangstabelle, dann kannst du diese Variable "mitnehmen" in die andere Umgebung der Selecttabelle. Mirko
-
said:
Bedeutet das nun, dass man in select-Abfragen nicht auf 'this' referenzieren kann ?Das war m. W. schon immer so. "this" bezieht sich ja auf die aktuell geöffnete Tabelle, und mit dem "select" setzt Ninox den Fokus auf die dort referenzierte Tabelle, womit der Bezug verloren geht. Deshalb sieht man das "me := this" so oft am Anfang von Scripten.
Mit den Variablen bei serverseitig auszuführendem Code ist es, glaube ich, folgendermaßen: Vor dem "do as server" definierte Variablen können innerhalb "do as server" genutzt werden. Variable, die im "do as server" definiert werden, lassen sich jedoch nicht außerhalb des do-as-Blocks nutzen.
-
Nach meinen eigenen Tests habe ich es mal graphisch dargestellt. Das umgebende Script hat keinen Lese- oder Schreibzugriff auf do as...end. Jedoch hat do as...end lesenden Zugriff auf das restliche Script. In einer Funktion besteht auch schreibender Zugriff auf das restliche Script. Vielleicht kann man mit dieser Struktur das gesamte Script besser planen. Mirko
Content aside
-
1
„Gefällt mir“ Klicks
- vor 3 MonatenZuletzt aktiv
- 11Antworten
- 99Ansichten
-
4
Folge bereits