Add-In aus Anwendung erstellen? App-Pfad abrufen?Gibt es eine Möglichkeit, aus einer von mir erstellten Anwendung ein Add-In zu erstellen? Die Anwendung ist ziemlich komplex und ich möchte sie nur in einem Add-In bündeln. Darüber hinaus könnte dieses Problem möglicherweise gelöst werden, wenn mir jemand bei der Lösung des folgenden Problems helfen kann:
Ich habe eine Anwendung erstellt und habe sie in einem Ordner (myApp/) und habe Skripte, die ich aus dem Quellverzeichnis (myApp/src/) einbinden möchte. Wenn ich jedoch versuche, „Get Default Directory()“ aus der App heraus abzurufen, wird „/“ zurückgegeben, sodass ich den Quellordner nicht finden kann, wenn die Anwendung auf einem anderen Computer ausgeführt wurde. Gibt es eine Möglichkeit, den Standort der aktuell ausgeführten App abzufragen? Gibt es alternativ eine Möglichkeit, Dateien in der Anwendung zu bündeln, damit ich zuverlässig auf meine Dateien zugreifen kann (vielleicht über eine Standardpfadvariable)?
Meine Versuche, die Anwendung in ein Add-In zu integrieren, sind fehlgeschlagen. Ich kann die App (.jmpappsource oder .jmpapp) nicht über das Add-In ausführen. Da die Anwendung außerdem ziemlich komplex ist, möchte ich sie nicht im Add-In-Builder neu erstellen. Gibt es eine Möglichkeit, die App in einem Add-In zu organisieren? Es wäre großartig, wenn JMP die Funktion „Anwendung als Add-In exportieren“ oder „Add-In aus Anwendung erstellen“ hinzufügen würde.
Betreff: Add-In aus Anwendung erstellen? App-Pfad abrufen?Vielen Dank an nascif_jmp für das Teilen Ihrer Methode und vielen Dank an ian_jmp für das Teilen des Artikels! Beides war hilfreich, aber ich entschied mich für einen anderen Ansatz – die Umstrukturierung meiner App/ meines Add-Ins. Hier sind die Schritte, die ich unternommen habe, um sicherzustellen, dass meine Anwendung ihre Include-Dateien zuverlässig auf verschiedenen Computern findet.
- Legen Sie alle für die Anwendung relevanten Dateien/Ordner in einem Ordner ab (ich nenne ihn das App-Stammverzeichnis, oder kurz Stammverzeichnis).
- Verwenden Sie eine Pfadvariable für das App-Stammverzeichnis und relative Pfade, um auf Dateien und Verzeichnisse in der Anwendung zu verweisen.
- Zum Beispiel ein Verzeichnis „$appRoot/“, das einen Ordner „src/“ mit meinen Skripten und einen „lib/“ mit Bildern und Symbolen enthält. Ich bezeichne diese als „$appRoot/src/“ und „$appRoot/lib/“.
- Speichern Sie Ihre App als .jmpapp-Datei, die sich irgendwo in Ihrem App-Stammverzeichnis oder in einem seiner Unterverzeichnisse befindet (egal wo, solange der Zugriff über den relativen Pfad vom Stammordner aus möglich ist).
- Erstellen Sie ein Add-In und fügen Sie unter „Zusätzliche Dateien“ das Stammverzeichnis der App hinzu (jmp importiert auch alle seine Dateien und Unterverzeichnisse, um sie in das Add-In aufzunehmen).Diese Dateien befinden sich im Verzeichnis des Add-Ins.
- Jetzt können Sie alle Ihre Dateien finden, indem Sie auf das Verzeichnis des Add-Ins verweisen, das sich auf jedem Computer an einem Standardspeicherort befindet. Dieser Speicherort wird durch getPathVariable("ADDIN_HOME("My Add-In Name")) abgerufen. Verwenden Sie diese Option, um die Dateien und Verzeichnisse zu finden, die Sie im vorherigen Schritt hinzugefügt haben. Legen Sie in Ihrem Add-In-Skript die Pfadvariable auf das Add-In-Stammverzeichnis fest:
- ADDIN_NAME = „Mein Add-In-Name“;
- setPathVariable("appRoot", getPathVariable(evalInsert("ADDIN_HOME(^ADDIN_NAME^)")) || "App-Stammverzeichnis/");
- Legen Sie andere Pfadvariablen relativ zu diesem Stammverzeichnis fest
- Führen Sie Ihre Anwendungsdatei über Ihr Add-In-Skript aus, indem Sie open("$appRoot/pathToMyApp/myApp.jmpapp"); verwenden.
- Um Ihre Anwendung zu verteilen, verteilen Sie stattdessen das Add-In, das Ihre Anwendung zusammen mit den erforderlichen Dateien enthält
Betreff: Add-In aus Anwendung erstellen? App-Pfad abrufen?Darüber hinaus ist dieses Papier von Vorhersage würde zeigen, wie andere das geschafft haben: Best Practices in JMP ® Add-In-Verwaltung
Betreff: Add-In aus Anwendung erstellen? App-Pfad abrufen?Ich hatte ein ähnliches Problem, als ich versuchte, ein JSL-Framework in mehrere Module zu zerlegen, die einander beinhalteten. Ich habe es gelöst, indem ich dem Hauptmodul den folgenden Code hinzugefügt habe:
// Find the current location in the source tree for the given file
__getThisPath = Function( {this_f},
{Default Local},
this_p = "";
ifl = Include File List();
For( ifli = 1, ifli <= N Items( ifl ), ifli++,
a_path = ifl[ifli];
idx = Contains( a_path, this_f );
If( idx > 0,
this_p = Left( a_path, idx - 1 );
Break();
);
);
If( this_p == "",
Throw( "Unable to find path for " || this_f )
);
Return( this_p );
);
Nachdem ich den Speicherort meines Skripts im Dateisystem ermittelt hatte, konnte ich damit seine Abhängigkeiten finden und einschließen:
// Use the current location in the source tree for this file
// in order to load its dependencies.
__INCLUDE = __getThisPath( "timeit.jsl" );
Set Path Variable( "TI_HOME", __INCLUDE );
Include( "$TI_HOME/../JSLhelpers/mfr.jsl" );