Betreff: ThisDataTable() ?Es klingt ein wenig verworren, aber
- Ich glaube, dass ein Skript in einer Datentabelle implizit Nachrichten an die Datentabelle sendet, die das Skript umschließt. Ein expliziter Verweis auf die Datentabelle mit „aktuelle Datentabelle“ ist daher nicht erforderlich.
- Wenn Sie ein Skript innerhalb einer Datentabelle von außerhalb der Datentabelle ausführen, müssen Sie zuerst das Handle der Datentabelle abrufen, damit Sie Run Script("script name") an die Datentabelle senden können. Die Datentabelle kann aktuell sein oder nicht, was keine Rolle spielt.
Ich vermute also, dass die Antwort darin besteht, dass in einem Skript nichts verwendet werden muss, um auf die Datentabelle zu verweisen, die das Skript umschließt. Entfernen Sie „dt = current data table()“ aus Ihrem Skript und sehen Sie, wie es funktioniert. Ich denke, es gibt noch andere Gründe, warum Sie diese Leitung benötigen, aber vielleicht gibt es eine andere Lösung, um dieses Problem anzugehen.
Betreff: ThisDataTable() ?
@peng_liu schrieb:- Ich glaube, dass ein Skript in einer Datentabelle implizit Nachrichten an die Datentabelle sendet, die das Skript umschließt.
Danke. interessant, bis jetzt gut.
Um ehrlich zu sein, ist es ein etwas komisches Gefühl, all das zu entfernen
dt <<
Sie gaben mir die Gewissheit, dass das Drehbuch genau das tat, was es tun sollte. Ich glaube, es funktioniert ohne ...
Sogar
Nrows(<STRIKE>dt</STRIKE>);
Scheint zu funktionieren.
Betreff: ThisDataTable() ?
dt = aktuelle Datentabelle() im Tabellenskript:
Das funktioniert gut, wenn ich das Skript aus der Tabelle selbst ausführe. Um auf den Play-Button klicken zu können, muss man die Datentabelle auswählen. Daher wird es das aktuelle sein. Gut.
Aber wenn ich das Tabellenskript über JSL auslöse, könnte eine andere Datentabelle die aktuelle sein.
Haben Sie überprüft, ob dies der Fall ist, wenn Sie es über JSL ausführen? Wenn ich mich richtig erinnere, habe ich einige meiner komplizierteren Tabellenskripte problemlos über JSL ausgeführt, ohne mir Gedanken über die Korrektur der aktuellen Datentabelle machen zu müssen (vielleicht erinnere ich mich aber auch falsch).
Mehr sehen... Betreff: ThisDataTable()?Sieht überzeugend aus:)
Beim Ausführen eines Tabellenskripts wird daher die aktuelle Datentabelle automatisch der Tabelle mit dem Skript zugeordnet.
Aus diesem Grund sendet ein Skript in einer Datentabelle [...] Nachrichten an die Datentabelle, die das Skript umschließt.
automatisch: ja
sofort: nein
siehe unten:
DieseDatentabelle()?Für Spalten und Objekte wie Berichte gibt es einen Befehl
obj << Get Data Table();
um einen Verweis auf die jeweilige Datentabelle zu erhalten.
Gibt es eine ähnliche Funktion für Tabellenskripte? So etwas wie
This Data Table()
einige verzögerte Implementierungen, die zu Problemen führen könnten:
- Referenzieren Sie die Datentabelle anhand ihres Namens.
Datentabelle („meine Tabelle“) << neue Spalte („Test“)
Dies funktioniert, bis ein Konflikt mit einer anderen Datentabelle mit demselben Namen auftritt und dem Tabellennamen automatisch „2“ hinzugefügt wird. - verwenden Sie mydt = current data table(), um einen Verweis auf die Datentabelle zu generieren
Das funktioniert einwandfrei, wenn ich das Skript aus der Tabelle selbst ausführe. Um die Möglichkeit zu haben, auf die Wiedergabetaste zu klicken, muss man die Datentabelle auswählen. Daher ist es die aktuelle. Gut.
Wenn ich aber das Tabellenskript über dt << run sricpt ("myscript") auslöse, könnte eine andere Datentabelle die aktuelle sein.
Bearbeitung Nr. 1: Das folgende Beispiel von @jthi legt nahe, dass diese Aussage nicht korrekt ist:
Wenn Sie ein Tabellenskript auslösen, erhält die Tabelle mit dem Tabellenskript die aktuelle Datentabelle .
also: keine Probleme.
Bearbeitung Nr. 2: … aber es scheint, dass „ ruft die aktuelle Datentabelle ab “ nicht sofort geschieht.
also: unter Umständen kann es zu Problemen kommen (siehe unten)
Automatisierung und SkriptingBetreff: ThisDataTable()?Hallo,
Ich könnte meinen Fehler von 2023 wiederholen und hätte neue Erkenntnisse:
Das Problem:
- ein JSL-Skript löst dt << run script(myScript) aus
- myscript beginnt mit
mydt = aktuelle Datentabelle(); - meine ursprüngliche Annahme: wenn ich das Tabellenskript per JSL auslöse, könnte eine andere Datentabelle die aktuelle sein.
scheint für einige Fälle zu gelten - heute könnte ich einen solchen Fall generieren, bei dem
mydt = current data table();
mydt << new column ("test1"); // was sent to the wrong data table
new column("test2"); // was sent to THIS DATA TABLE (fits to Peng Liu's post)
Also:
Wenn Sie planen, ein Tabellenskript über dt << run script(myScript) auszuführen
und einen Verweis auf ThisDataTable benötigen, fügen Sie sicherheitshalber wait(0) hinzu:
wait(0); // !!!!
thisDataTable = current data table();<BR />
ähnliche Ergebnisse, aber mit leicht anderem Kontext: Tabellenskript ausführen