Tabellenskript ausführenWas ist der Unterschied zwischen der Ausführung eines Tabellenskripts über das grüne Wiedergabesymbol:

... und über den Ausführen-Button?

Automatisierung und SkriptingBetreff: Tabellenskript ausführenGibt es Grund zur Annahme, dass es einen Unterschied gibt? Vom Skript-"Fenster" aus kann man beispielsweise einzelne Teile ausführen, indem man sie markiert.
Betreff: Tabellenskript ausführenIm Allgemeinen machen sie dasselbe.
Der kleine grüne Pfeil ist schneller, ein Klick.
: )
Betreff: Tabellenskript ausführenNach dem Erfinden der 3. "Lösung" für ein "Timing-Problem" in einem Tabellenskript - leider ohne wirklichen Erfolg
... Ich fand heraus, dass der eigentliche Unterschied war:
- Führen Sie das Skript über das Play-Symbol aus → Problem
- Öffnen Sie das Skriptfenster – [probieren Sie einen neuen Code aus … oder nichts] – und klicken Sie auf die Schaltfläche „Ausführen“ → kein Problem.
Betreff: Tabellenskript ausführenDurch Klicken auf den grünen Ausführungspfeil wird das Skript in der Datentabelle ausgeführt, an die es angehängt ist.
Beim Ausführen des Skripts über das Bearbeitungsfenster wird das Skript in der aktuell aktiven Datentabelle ausgeführt. Dabei handelt es sich möglicherweise nicht um die Datentabelle, in der das Skript gespeichert wurde.
Betreff: Tabellenskript ausführenDas dachte ich auch...
Betreff: Tabellenskript ausführenGute Idee,
aber tatsächlich habe ich für den „Bearbeiten“-Modus darauf geachtet, dass „Meine Tabelle“ aktiv ist, bevor ich auf „Ausführen“ geklickt habe.
Und: Es ist der „Edit“-Modus, der funktioniert 
möglicherweise hängt es mit einer aktuellen Datentabelle () irgendwo im Code zusammen, die sich möglicherweise anders verhält, wenn das Skript über das Wiedergabesymbol oder die Schaltfläche „Ausführen“ gestartet wird.
:)einfach ein:) Die direkte Integration der aktuellen Daten in table() in ein Tabellenskript ergab keinen Unterschied zwischen den beiden Ansätzen.
Aber mein Code ist eine lange Kette aus JSL, Hauptmenü (" ... "), Datei öffnen, verbinden, verketten ...
:)Ich werde versuchen, die Komplexität zu reduzieren, um den Unterschied aufzuzeigen – oder ein anonymisiertes Beispiel zu generieren …
Betreff: Tabellenskript ausführenIch habe versucht hinzuzufügen
current data table();
um zu sehen, ob das Skript auf die Datentabelle zurückverwiesen würde, in der es gespeichert war. Dies geschah nicht. Das Skript wurde mit der Datentabelle ausgeführt, die die aktuelle Datentabelle war.
Betreff: Tabellenskript ausführenIn keinem dieser Fälle ist Current Data Table() zuverlässig. Wenn sich eine neue Tabelle unmittelbar nach dem Drücken des grünen Dreiecks öffnet, kann sich die aktuelle Tabelle ändern, bevor das Skript ausgeführt wird (was bei einem grünen Ausführen-Button wahrscheinlich nicht so wahrscheinlich ist, aber es könnte passieren). Mit einem Skript wie diesem lässt sich das ziemlich einfach testen.
wait(1);
Caption(Current Data Table() << get name);
Führen Sie das Skript aus, indem Sie auf das grüne Dreieck klicken und dann sofort Strg+N drücken, um eine neue Tabelle zu erstellen.
Es scheint jedoch, dass, wenn Sie Current Data Table() weglassen, es in der Tabelle ausgelöst wird, von der aus das Skript ausgeführt wurde (in beiden Fällen).
wait(1);
Current Data Table() << New Column("A");
Gegen
wait(1);
New Column("A");
Betreff: Tabellenskript ausführenZu meinem Problem
Eigentlich war es am Ende ein Timing-Problem
...wie Jarmo es beschrieben hat - aber irgendwie umgekehrt:
Ich verwende ein angepasstes Add-In um eine Datei zu laden.
Und da das Hauptmenü keinen Rückgabewert zurückgeben kann
,
Ich habe current data table() verwendet, um Zugriff auf die neu erstellte Tabelle zu erhalten
das war die Idee ...
//<FONT face="courier new,courier">Öffnen("$SAMPLE_DATA/Big Class.jmp");</FONT><BR />Main Menu("load_");
// wait(1);
dt= current data table(); // the idea: myDT
caption(dt << get name())
a) Wenn ich einfach Open( "$SAMPLE_DATA/Big Class.jmp" ) verwende, läuft alles reibungslos.
Andererseits, nach dem Öffnen der Datentabelle über Main Menu("load_") ,
aktuelle Datentabelle verweist noch auf meine Haupttabelle (!).
Das Aktivieren von wait(1) löste das Problem – mit einer Strafgebühr von 1 Sekunde.
b) Um es robuster (und schneller) zu machen, habe ich eine Tabellenreferenz :::load_:myTable innerhalb von FUNC erstellt und dt=:::load_:myTable anstelle des ursprünglichen Ansatzes über aktuelle Daten table() verwendet.
Interessant:
Der Ansatz über :::load_:myTable funktioniert ohne wait(1).
Dies bedeutet, dass ich bereits mit der neuen Tabelle kommunizieren kann , bevor diese die aktuellen Daten erhält (table()) !
daher lohnt es sich vielleicht zu untersuchen, wie schnell Datentabellen die aktuelle Datentabelle abrufen()
… und warum es Unterschiede gibt.
Betreff: Tabellenskript ausführenKommen wir zum Anfang der Diskussion zurück – der Unterschied zwischen dem grünen Wiedergabesymbol und der Schaltfläche „Ausführen“ des Bearbeitungsfensters:
@Byron_JMP schrieb:
Im Allgemeinen machen sie dasselbe.
Der kleine grüne Pfeil ist schneller, ein Klick.
: )
das Problem läuft darauf hinaus, dass es nicht EINE gut definierte aktuelle Datentabelle gibt!
Wenn man die grüne Play-Taste drückt und das Ergebnisfenster überprüft, kann man die folgende Sequenz sehen:
1) Das AddIn öffnet den Test und meldet, dass die aktuelle Datentabelle zum Test geändert wurde
2) die Haupttabelle denkt immer noch, dass check_current_data_table die aktuelle Datentabelle ist (!!!)
3) Nach dem wait(0) weiß es es besser und gibt test zurück.
Wird das Skript hingegen über die Schaltfläche „AUSFÜHREN“ im Bearbeitungsfenster gestartet, werden in allen drei Ergebnisfenstern die gleichen Daten wie in „table()“ angezeigt.
Hauptskript:
Names Default To Here( 1 );
Main Menu( "load_" );
win = new window("1 ",Text Box ("main table (1):\!n" ||
(current data table() << get name())));
wait(1);
win = new window("2 ",Text Box ("main table (2):\!n" ||
(current data table() << get name())));Belastung_:
Names Default To Here( 1 );
dt = open("C:\temp\test.csv");
Caption( {100, 200}, "postprocessing ...");
win = new window("addIn", text box("inside the addin:\!n" ||(current data table()<< get name())));
// win << moveWindow( 100, 100 );
Caption( remove );
Bei genauerem Hinsehen stellt man fest, dass winzige Details wie das Aktivieren von << moveWindow im AddIn oder das Deaktivieren eines der Beschriftungsbefehle Auswirkungen auf das Verhalten haben.
Betreff: Tabellenskript ausführenÜbrigens das gleiche Problem:
Es gibt nicht EINE gut definierte aktuelle Datentabelle() !
war auch das Problem, das diesen Beitrag ausgelöst hat: ThisDataTable()?
mit dem gleichen Bugfix:
hinzufügen warten ( 0 )
vor
dt = aktuelle Datentabelle()!