Hallo,
Ich habe den Query Builder und den Graph Builder verwendet, um einige Skripte zu erstellen, die ständig Daten von einem Server abrufen, grafisch darstellen und Ergebnisse speichern (in JMP 13). Kürzlich habe ich versucht, mehrere dieser Skripte in einem einzigen Skript zu verknüpfen, das sie alle gleichzeitig mit Include() ausführt, was gut funktioniert. Das Problem, mit dem ich jetzt konfrontiert bin, besteht darin, dass alle Verzeichnisse fest codiert wurden und ich gerne etwas wie „Get Default Directory()“ verwenden würde, damit diese umfassendere Sammlung von Skripten auf andere Computer verschoben werden kann.
Leider bin ich auf folgende Probleme gestoßen:
-Wenn Get Default Directory() im „Post-Query Script“ verwendet wird, wird „/“ zurückgegeben, unabhängig davon, wo dieses Skript gespeichert ist.
– Beim Speichern von Datentabellen/Diagrammen, die im Post-Query-Skript erstellt wurden, in Variablen scheinen diese Variablen außerhalb von nicht zu existieren (oder nicht zugänglich zu sein).
Post-Query-Skript.
– Alle Variablen, die außerhalb des Post-Query-Skripts erstellt wurden, können darin nicht verwendet werden.
// Main File
directory = Get Default Directory();
fileNames = Files In Directory( directory );
For( iFile = 1, iFile <= N Items( fileNames ), iFile++,
filename = fileNames[iFile];
If( Ends With( filename, ".jsl" ),
Include( directory || script_folder || filename, invisible );
);
);
// Example Post-Query File section
gb = Graph Builder(
// graph details
);
// directory = Get Default Directory(); // Another method attempted
myPath = directory || "Report\";
myName = "Example";
fileName = myPath || myName || ".pptx";
myTemplate = directory || "Template.pptx";
Report( gb ) << save presentation( fileName, Template( myTemplate ), Outline Titles( "Hide" ) );
gb << close window;
Close All( data tables );
Irgendwelche Gedanken?
Sie sollten darüber nachdenken, ein Add-In für Ihre Anwendung zu erstellen.Dadurch wird Ihr Problem gelöst, wo sich die Dateien befinden.Ein Add-In verknüpft einen Alias mit einem Dateispeicherort.Wenn Ihr Add-in-„Alias“ com.company.dept.mygreatapp ist, können Sie auf Dateien wie diese verweisen:
include("$ADDIN_HOME(com.company.dept.mygreatapp)\DoSomethingGreat.jsl");Ihr Beitrag enthält mehrere Punkte, auf die es einzugehen gilt:
- Wenn Sie unter Windows arbeiten, ruft „Get Default Directory()“ nicht das zuletzt verwendete Verzeichnis ab. Wenn Sie von Ihrem Programm dazu aufgefordert werden, verwenden Sie „Set Default Directory“, dann gibt „Get Default Directory()“ diesen Wert zurück.
- Ich empfehle die Verwendung eines Namespace oder eines globalen assoziativen Arrays, um Referenzen/Variablen zu verwalten.Wenn mehr als eine Instanz Ihres Programms gleichzeitig ausgeführt wird, machen Sie es zu einem anonymen Namespace, damit er für jede Instanz eindeutig ist.Für ein assoziatives Array: ::varRef_aa = Associative Array(); ::varRef_aa << Standardwert festlegen (-9999); Geben Sie dann in Ihrem Skript ::varRef_aa[a] = 1; Ein Vorteil der Verwendung eines NameSpace besteht darin, dass ein unbeabsichtigtes Clear Globals() weder den Namespace noch seinen Inhalt löscht.
- Ich bin kein Fan von „Präsentation speichern“, da jedes Objekt auf einer anderen Seite gespeichert wird und es kaum Kontrolle über die Skalierung gibt. Ich verwende ein kostenloses externes Programm namens P3ICLI . Normalerweise erstelle ich ein Ausgabeverzeichnis, das für die Aufgabe oder den Bericht eindeutig ist, und speichere dann die gewünschte Ansicht als Bild in diesem Verzeichnis. Ich erwähne seine Methode, denn durch das Speichern der gewünschten Ausgabe, als Folie 1, 2 usw., können Sie dürfen Verwenden Sie „Präsentation speichern“, indem Sie in Directory() eine Liste von Dateien für das gespeicherte Verzeichnis erstellen und diese mithilfe von „Präsentation speichern“ in einer for-Schleife an Ihr PPTX anhängen. Durch das Speichern eines Bilds können Sie außerdem eine Anzeige mit mehreren Objekten erstellen, und wenn Sie „Präsentation speichern“ verwenden, befinden sich alle Elemente auf derselben Seite.Es bietet eine gewisse Kontrolle über den PPTX-Bericht.
Schließlich ist es ja ärgerlich, dass Open Database(connect_str, ...) und Create Database Connection(connect_str) dieselbe Verbindungszeichenfolge verwenden können, die den abschließenden Schrägstrich erfordert, New SQL Query() jedoch erfordert, dass der abschließende Schrägstrich entfernt wird und a Präfix von ODBC: bei Verbindung mit einer Datenbank.
//--- Method 3: New SQL Query platform script -----------------------------------
//remove the trailing slash on importpath
importnoslash = substr(connect_str, 1, length(connect_str)-1 );
nconnect = "ODBC:" || importnoslash
Nur ein paar Ideen.
Ein weiteres Beispiel hinzufügen:
dir = Get Default Directory();
query = Open( dir || "query.jmpquery", Private );
query << Run(
On Run Complete(
queryResult << // some function
a = 1
)
);
Write( a ); // variable is unknown
Auf das Erstellen einer Variablen innerhalb von Run() kann außerhalb von Run() nicht zugegriffen werden.