Hallo,
Ich arbeite an der Erstellung einer JMP-App zum Sammeln von Daten in einer Tabelle und zum benutzerfreundlichen Visualisieren dieser Daten. Als Teil dieser App habe ich ein MainWin-Modul, in dem der Benutzer die meiste Zeit verbringen wird. Innerhalb dieses MainWin-Moduls gibt es eine UpdateGUI-Funktion, mit der die Benutzeroberfläche (meistens zusammengefasste Tabellenfelder) mit Daten aus der eingebetteten Datentabelle aktualisiert wird.
Wenn ein Benutzer Daten hinzufügen möchte, startet er ein zweites Modul zur Dateneingabe. Sobald die Daten eingegeben wurden und sie "OK" drücken, werden die Daten zur Haupttabelle hinzugefügt. Ich möchte dieses Modul schließen, um die UpdateGUI-Funktion im MainWin-Modul aufzurufen. Ich erinnere mich nicht, wie ich es geschrieben hatte, aber das funktionierte früher, als das zweite Modul ein modales Fenster war. Ich habe jetzt das zweite Modul in ein Dialogfenster geändert, und der Aufruf von UpdateGUI funktioniert nicht mehr.
Um dies zu beheben, habe ich einige Dinge ausprobiert.
Der erste Fehler war, dass die UpdateGUI-Funktion dem zweiten Modul unbekannt war (scheint im Nachhinein offensichtlich zu sein), aber als ich den Namen global verfügbar machte, bedeutete der Aufruf aus dem zweiten Modul, dass alle Verweise innerhalb der Funktion auf das MainWin-Modul vorhanden waren auch kaputt ..
Das zweite, was ich versuchte, war das Hinzufügen einer while-Schleife zum MainWin, die darauf wartet, dass eine Variable auf 1 gesetzt wird, und dann eine Aktualisierung aufruft. Dies funktionierte technisch, verursachte jedoch einige erhebliche Verlangsamungen ... möglicherweise, weil ich eine Wait () - Funktion verwendet habe.
Wie würden Sie empfehlen, diese Art von modulübergreifendem Funktionsaufruf zu behandeln?
Dankeschön!</CODE></P></LINGO-BODY><LINGO-SUB id="lingo-sub-313041" slang="en-US" mode="NONE">Betreff: JMP-App-Module und Namespaces</LINGO-SUB><LINGO-BODY id="lingo-body-313041" slang="en-US" mode="NONE"><P>Hallo<A href="https://community.jmp.com/t5/user/viewprofilepage/user-id/20438" target="_blank"> @ mringqui</A> ,</P>
<P>Ich glaube, ich habe eine Lösung für das, was Sie versuchen zu tun.Grundsätzlich denke ich, dass Sie einen Verweis auf den MainWin-Instanz-Namespace bis zum Anwendungs-Namespace umfassen möchten.Dazu habe ich im MainWin-Skript die folgende Zeile hinzugefügt:</P>
<PRE><CODE class=" language-jsl">Application:MainInstance = this module instance;
Ich habe eine triviale App erstellt, um dies zu veranschaulichen.MainWin zeigt nur eine Nummer an.Mit UpdateWin können Sie eine neue Nummer eingeben, die die Anzeige in MainWin aktualisiert, wenn Sie auf Schließen klicken.Sie können sehen, wie ich Dinge im Anwendungsnamespace-Skript definiert habe, um den Ausdruck "GUI aktualisieren" für alle Module verfügbar zu machen.
display_num = 0;
Update GUI = Expr(
Show(MainInstance:Text_Disp << Get Text);
MainInstance:Text_Disp << Set Text(char(display_num));
);
Der Ansatz sollte auf das verallgemeinern, was Sie tun möchten.
@ Willenden Vielen Dank, dass Sie sich damit befasst haben!
Durch Hinzufügen der Referenz im Anwendungsnamespace wurde die Funktion für UpdateWin viel sauberer zugänglich als zuvor. Vielen Dank! Ich werde dies definitiv in zukünftigen Situationen nutzen.
Leider werden beim Aufrufen der Funktion von UpdateWin aus immer noch alle Variablen in der Funktion in UpdateWin zurückgesetzt. Ich denke, ich habe gelernt, dass ich meine Namespaces bereinigen muss. Benötigen Sie wahrscheinlich eine Namen Standard hier (1); dort hineingeworfen.
Ich konnte erreichen, was ich wollte, indem ich eine schickte << Klicken; auf die Schaltfläche Aktualisieren, die ich im MainWin habe. Dies scheint sicherzustellen, dass alles korrekt bleibt.
Nochmals vielen Dank für die Hilfe, Sie haben mich in die richtige Richtung gebracht