Add-In-ManagerBeschreibung
Add-In-Manager ermöglicht es Ihnen, Add-In-Dateien einfach zu erstellen und neu zu erstellen, Versionen eines Add-Ins im Laufe der Zeit zu verwalten, direkt auf Quelldateien zuzugreifen und zusätzliche Anpassungen für Ihr Add-In vorzunehmen. Jetzt mit Version 2.0 von Add-In-Manager , können Sie jetzt den gesamten Lebenszyklus Ihrer JSL-Anwendungsentwicklung steuern, da Sie Ihre Add-Ins direkt aus Ihren Benutzern bereitstellen können Add-In-Manager !
Erstellen Sie schnell Add-Ins
Das grundlegende Merkmal von Add-In-Manager ist die Möglichkeit, eine JMP-Add-In-Datei direkt aus Quelldateien zu erstellen. Diese Funktion war ursprünglich in meiner enthalten Benutzerdefinierter Add-In-Generator Zusatz und Add-In-Manager hat die Grundlagen dieses Add-Ins übernommen und verbessert.

Stellen Sie ein Add-In für Benutzer bereit
Mit Version 2.0 von Add-In-Manager , können Sie Add-Ins jetzt direkt aus für Ihre Benutzer bereitstellen (oder pushen). Add-In-Manager . Sie können an einem TEST-Speicherort bereitstellen, damit Ihre Benutzer Ihr Add-In testen können, und Sie können es auch an einem PROD-Speicherort bereitstellen.

Bei der Bereitstellung in PROD wird ein JSL-Skript mit einem assoziativen Array automatisch mit dem spätesten Veröffentlichungsdatum/Zeitpunkt aktualisiert. Dieses assoziative Array kann von einem automatisch generierten „updateCheck.jsl“-Skript verwendet werden, das das Build-Datum des Add-Ins des Benutzers mit dem Build-Datum gemäß dem assoziativen Array vergleichen kann. Wenn eine neuere Version des Add-Ins verfügbar ist, wird dem Benutzer das folgende Fenster angezeigt, in dem er auswählen kann, ob er auf die neueste Version aktualisieren möchte. Dieses Konzept, das ein assoziatives Array verwendet, um nach Updates zu suchen, wurde angepasst @brady_brady Methode zur Verwendung einer Tabelle mit Veröffentlichungsdaten. Diese Methode ist beschrieben in @Jeff_Perkinson 's Beitrag So schreiben Sie sich selbst aktualisierende JMP-Add-Ins .

Versionen eines Add-Ins verwalten
Add-In-Manager hat die Fähigkeit, jedes Mal, wenn eine neue erstellt wird, automatisch einen Versionsverlauf einer Add-In-Datei zu führen. Es ermöglicht Ihnen, eine frühere Version eines Add-Ins zu installieren, wiederherzustellen oder zu löschen. Sie können optional einen Kommentar für jeden Build hinzufügen, damit Sie nachverfolgen können, welche Änderungen in jeder Version vorgenommen wurden.

Zusätzliche Add-In-Anpassungen vornehmen
Add-In-Manager ermöglicht es Ihnen, einige Anpassungen an Ihrem Add-In vorzunehmen, für die zuvor manuelle Änderungen an XML erforderlich waren. Nachfolgend sind die zusätzlichen Anpassungen aufgeführt, die in verfügbar sind Add-In-Manager .
- Maximale JMP-Version
- Eingebaute JMP-Icons für Menüpunkte
- Vor Position einfügen, um eine Position für einen Menüpunkt anzugeben
- Benutzerdefinierte Menüleiste – Erstellen Sie Ihr eigenes Menü oder verwenden Sie ein vorhandenes Menü außer „Add-Ins“
- Neu in Add-In-Manager 2.0: Mehrere Hauptmenüs in einem einzigen Add-In

Direkter Zugriff auf Quelldateien aus JMP
Auf der Registerkarte Dateien in Add-In-Manager können Sie Dateien in Ihrem Quellordner direkt aus JMP öffnen, indem Sie auf die gewünschte Datei in der Tabelle doppelklicken.

Automatische Verwaltung benutzerdefinierter Metadaten
Mit Add-In-Manager Version 2.0 können Sie Ihre eigenen benutzerdefinierten Metadaten zusätzlich zu den automatisch enthaltenen und verwalteten Metadaten erstellen Add-In-Manager .

Verwalten von zuvor installierten Add-Ins
Auf der Registerkarte Installiert können Sie installierte Add-Ins aktivieren, deaktivieren oder registrieren sowie nicht installierte Add-Ins registrieren.

System Anforderungen
Dieses Add-In wird auf Windows- und Mac-Betriebssystemen mit JMP 13 oder höher unterstützt.
Blog-Reihe
Add-In-Manager, Teil 1: Definieren und Erstellen eines JMP-Add-Ins
Add-In-Manager, Teil 2: Bereitstellen von automatisch aktualisierenden Add-Ins für Benutzer
Add-In-Manager, Teil 3: Erweiterte Anpassung
Änderungsprotokoll
Version 1.1-1.3 (16. Oktober 2017)
- Es wurden einige Fälle behoben, die dazu führten, dass das Add-In einen Fehler auslöste
- Neue Einstellungen hinzugefügt, um zu steuern, ob Menüs und Symbolleisten angezeigt werden
Version 2.0 (22. November 2017)
- Unterstützung für die Bereitstellung von Add-Ins an TEST- und PROD-Standorten hinzugefügt.
- Unterstützung für benutzerdefinierte Metadaten über ein assoziatives Array hinzugefügt, das in Ihre Skripts eingefügt werden kann.
- Möglichkeit hinzugefügt, mehrere Hauptmenüs in einem einzigen Add-In zu haben.
- Möglichkeit zum Kopieren und Einfügen von Menüelementen im Menüelementbaum hinzugefügt.
- Unterstützung für das Erstellen eines Quellordners aus einer vorhandenen 'jmpaddin'-Datei hinzugefügt.
- Möglichkeit hinzugefügt, nach einer neuen Version zu suchen, die direkt aus der JMP-Community abgerufen wird.
- Einstellung hinzugefügt, um Add-Ins nach dem Erstellen automatisch zu installieren.
- Die Unterstützung für das gleichzeitige Erstellen mehrerer Add-Ins wurde aus verschiedenen Gründen entfernt.
- Andere verschiedene Bugs gequetscht.
Version 2.1 (26. Februar 2018)
- Einstellung hinzugefügt, um unsichtbare Dateien und Ordner auszuschließen (dh Dateien/Ordner, die mit einem Punkt beginnen). Dies ist nützlich, wenn Sie ein Versionskontrollsystem wie Git verwenden.
- Die Datei customMetadata.jsl wird jetzt ignoriert, wenn festgestellt wird, ob Sie die neueste Version installiert haben.
Version 2.2 (8. März 2018)
- Ein Problem beim Hinzufügen von mehr als zwei Hauptmenüs der obersten Ebene wurde behoben.
- Neue Symbole zum Auswahlbildschirm hinzugefügt. Entfernte Symbole, die nur auf einem Betriebssystem verfügbar sind.
Version 2.3 (6. April 2018)
- Fehler auf dem Mac behoben, der verursacht wurde, wenn ein Quellordner umbenannt oder gelöscht wurde
- Das Einstellungsfenster funktioniert jetzt auch dann, wenn Sie die Consolas-Schriftart nicht auf Ihrem Computer installiert haben.
Version 2.4 (9. Januar 2020)
- Lassen Sie das Einfügen von Menüelementen entweder vor oder nach anderen Elementen zu, anstatt nur das Einfügen danach zuzulassen.
- Fügen Sie 15 und 16 als minimale/maximale JMP-Versionsnummern hinzu.
Version 2.5 (5. Februar 2020)
- Verbesserte Lesbarkeit bei Verwendung von macOS Dark Mode und Windows High Contrast Mode in JMP 15.
- Behebung der Warnung, die beim Öffnen der Einstellungen auf dem Mac angezeigt wird.
Version 2.6 (4. Juni 2020)
- Fehler beim Analysieren von Add-Ins mit benutzerdefinierten Menüs behoben.
- Diagnoseinformationen für Parsing-Fehler hinzugefügt, um bei zukünftigen Problemen zu helfen.
Version 2.7 (10. Juni 2020)
- Problemumgehung für temporären Fehler in JMP 16 EA hinzugefügt
Version 2.8 (24. September 2020)
- Problem beim Entpacken von Add-Ins mit Unterordnern behoben
- Option hinzugefügt, um automatisch einen Ordner zu erstellen, wenn eine Add-In-Vorlage verwendet wird (standardmäßig aktiviert).
Version 2.9 (4. Februar 2021)
- Einige Datumsformatierungen wurden in Locale-Formate geändert
- Die Funktion zur Suche nach Updates wurde korrigiert
Version 3.0 (18. Januar 2022)
- XML-Sonderzeichen (wie '&') sollten addin.jmpcust-Dateien nicht mehr beschädigen.
Version 3.1 (4. März 2022)
- Behoben: Datumsformat-Warnung für einige Gebietsschemas beim Archivieren von Add-Ins.
Lassen Sie mich wissen, wenn Sie irgendwelche Probleme finden!
Aktuelle Version=3.1
2.9
Mit dem Add-In-Manager können Sie Add-In-Dateien einfach erstellen und neu erstellen, Versionen eines Add-Ins im Laufe der Zeit verwalten, direkt auf Quelldateien zugreifen, zusätzliche Anpassungen für Ihr Add-In vornehmen und Ihre Add-Ins bereitstellen Ihre Benutzer.

DienstprogrammeBetreff: Add-In-Manager@Justin_Chilton JMP17 zeigt leere Menüstrukturen für meine Add-Ins an, wo JMP16 Menüelemente anzeigt. Das gilt für alle drei Addins. Siehe meine frühere Nachricht vom 14. September 2021.

Betreff: Add-In-Manager@Justin_Chilton , @nathan-clark Ich komme endlich zurück zu meiner TEST-Addin-Auto-Update-Funktion. Ich denke, ich habe es zum Laufen gebracht, mit der Ausnahme, dass der Add-In-Manager den Metadatenordner für das TEST-Setup nicht ausschreibt.
Gibt es eine Möglichkeit dies zu aktivieren? Andernfalls muss man diese Dateien jedes Mal manuell aktualisieren, was ziemlich fehleranfällig ist.
Hennig
Betreff: Add-In-ManagerHi @Justin_Chilton
Als ich nach dem Posten der Frage verschiedene Dinge ausprobierte, vermutete ich, dass die Datei durch das interne Sicherheitssystem der Branche beschädigt wurde.
Als ich die Datei von außen erhielt und mit der Neuinstallation fortfuhr, wurde sie normal installiert.

Ich werde die Fragen und Antworten für denselben Fall aufbewahren.
Danke immer, Justin
Dave_Ryu.
Betreff: Add-In-ManagerHi @Justin_Chilton
Ich erhalte viel Hilfe beim Erstellen mit dem Add-In-Manager.
Ich habe es bis v2.9 gut verwendet, aber bei der Neuinstallation tritt der folgende Fehler auf.
Dieser Fehler tritt sowohl in v2.9 als auch in der neuesten Version von v3.1 auf.
Wenn ich die Installationsdatei ausführe, tritt der Fehler sofort auf und wird nicht fortgesetzt.
Können Sie mir sagen, wie ich bei dem Fehler vorgehen kann?

Danke schön.
Dave_Ryu.
Betreff: Add-In-ManagerHALLO @Justin_Chilton , bin ich auf diesen Fehler unten gestoßen, als ich in einem TEST-Ordner bereitgestellt habe. Schätzen Sie das Add-In ansonsten! Dies sollte eine Standardfunktion in JMP sein 
Fehlermeldung:
{"argument should be character"(1, 2, "Concat", Bad Argument(currentAddinInfo["Name"]), "You have not saved your updated information for the " || /*###*/currentAddinInfo[" Name"] || /*###*/" Add-In." /*##****/)}
Fehler: Argument sollte Zeichen sein
1 mal).
Typ: Fehler
Funktionsname: Konkat
Schlechtes Argument: currentAddinInfo["Name"]
Funktion wird ausgeführt: "Sie haben Ihre aktualisierten Informationen für " || nicht gespeichert /*###*/currentAddinInfo["Name"] || /*###*/" Add-In." /*##*/
Call-Stack:
saveButtonCheck
refreshAddinTableBox
deploySelected
Betreff: Add-In-Manager@Justin_Chilton danke für den vorschlag. Sie haben Recht, dass das, was ich wollte, von include() behandelt werden kann.Danke für den Tipp zu <
Ich bin mir nicht sicher, warum mein Zip nicht funktioniert hat, aber ich habe es auf einem Mac gemacht, und alle Einträge sind nach meinem manuellen Versuch verschwunden.Jetzt, wo ich das Include zum Laufen gebracht habe, sind sowieso keine manuellen Änderungen mehr erforderlich.
Betreff: Add-In-Manager@Steveylin , einfach den Inhalt des Add-Ins zu komprimieren und in xxx.jmpaddin umzubenennen sollte funktionieren, Sie müssen nur sicherstellen, dass sich die jmpcust- und def-Dateien im Stammverzeichnis der jmpaddin-Zip-Datei befinden.
Alternativ würde ich vorschlagen, Ihren Pfad als include() für "Run thi JSL" hinzuzufügen, anstatt das Skript direkt mit einem Pfad zu verwenden. Dies würde die Notwendigkeit vermeiden, die jmpcust-Datei manuell zu bearbeiten. Ich bin mir nicht sicher, warum path für Sie nicht funktionieren würde, aber dies ist das Setup, das ich tatsächlich für meine Add-Ins verwende.

Ich verwende gerne <
Betreff: Add-In-ManagerIch bin ein Anfänger, der versucht, Add-ins zum Laufen zu bringen.Ich habe es zum Laufen gebracht, indem ich auf ein Verzeichnis verweise, aber es ist standardmäßig "Text" und ich muss manuell zu "Pfad" wechseln.
"Weg" >$ADDIN_HOME(com.cirrus.pejmpscriptsMac)\pe-jmp-scripts\Check_Duplicate_Measurements.jsl
Das Problem, das ich habe, ist, dass ich .jmpcust ändern kann, damit es auf meinem Computer funktioniert, aber ich kann es nicht exportieren.Gibt es eine einfache Möglichkeit, die addin.def/addin.jmpcust selbst zu komprimieren?Ich hoffe, es ist etwas Einfaches und ich muss den Add-In-Manager nicht verwenden.
Ich habe versucht, zip zu verwenden und umzubenennen, aber das hat nicht funktioniert.
Grüße,
Steve
Betreff: Add-In-ManagerHi @Justin_Chilton , ich habe vor kurzem diesen Fehler beim Bereitstellen einer neuen Prod-Version erhalten.
Fehlermeldung:
{"argument should be character"(1, 2, "Concat", Bad Argument(currentAddinInfo["Name"]), "You have not saved your updated information for the " || /*###*/currentAddinInfo[" Name"] || /*###*/" Add-In." /*##****/)}
Fehler: Argument sollte Zeichen sein
1 mal).
Typ: Fehler
Funktionsname: Konkat
Schlechtes Argument: currentAddinInfo["Name"]
Funktion wird ausgeführt: "Sie haben Ihre aktualisierten Informationen für " || nicht gespeichert /*###*/currentAddinInfo["Name"] || /*###*/" Add-In." /*##*/
Call-Stack:
saveButtonCheck
refreshAddinTableBox
deploySelected
Betreff: Add-In-ManagerHallo Nathan,
Ja, ich habe es zuerst gebaut und ich habe keine Fehler bekommen. Aber ich bekomme trotzdem die Deploy-Meldung.
John
Betreff: Add-In-Manager@Gido_vanderStar ,
Es sieht so aus, als ob Sie wahrscheinlich ein anderes Gebietsschema verwenden als ich, was den unbekannten Formatfehler verursacht. Ich habe gerade das Add-In (v3.1) aktualisiert, wodurch das während des Archivierungsprozesses verwendete Datumsformat das Datumsformat für Ihr Gebietsschema berücksichtigt.
Betreff: Add-In-Manager@John madden Hast du zuerst auf den Build-Button geklickt? Das ist die Schaltfläche neben dem Speichern-Symbol. Dadurch wird das Add-In erstellt und im Entwicklungsordner abgelegt.
Dann können Sie DEV installieren .... Oder Sie können einen TEST- oder PROD-Build des Add-Ins bereitstellen. (Sie müssen ein TEST- oder PROD-Add-In bereitstellen, bevor Sie das TEST- oder PROD-Add-In installieren können.
Betreff: Add-In-ManagerHallo, Justin,
Wenn ich versuche, mein Add-In zu installieren (das von AIM problemlos erstellt wird), erhalte ich die Fehlermeldung „Das DEV/TEST/PROD-Add-In existiert nicht“. Was könnte ich falsch machen?
John
AIM 3.0, JMP Pro EA 17.0b6, OS X 12.2.1
Betreff: Add-In-ManagerHi @Justin_Chilton ,
Danke für dieses Plugin. Wollte nur einen Ärger melden. Beim Installieren oder Bereitstellen eines Add-Ins erhalte ich etwa 50 Mal die folgende Meldung im Protokoll:
Unknown format: m/d/y h:m
Verwendung der neuesten Version (v3.0) des Add-Ins in JMP 16.0.0, Windows10.
Betreff: Add-In-Manager@vohwinkelh0 Ich habe Justins Auto-Update-Code geerntet, und es wäre ziemlich einfach - glaube ich - ein paar Updates vorzunehmen, um das zu ermöglichen, worüber Sie sprechen.
Je nachdem, wie Sie es integriert haben, können Sie möglicherweise mit Ihrem lokalen Code spielen, um diese Aktualisierungen vorzunehmen. So wie es aussieht, hat der Code einen Schritt, der im Grunde sieht, ob die installierte Version PROD ist, und dann nach einem neueren Build sucht. Ich glaube, Sie könnten den Prozess durchführen, wenn die installierte Version PROD ODER TEST ist ... und die Metadaten des Bereitstellungsbereichs überprüfen, um festzustellen, ob es einen neueren PROD-Build gibt.
Es könnte etwas sein, das Sie prüfen könnten, um Ihre Bedürfnisse zu decken, bis sich die Bandbreite öffnet 
Betreff: Add-In-Manager@pauldeen , danke, dass du das gemeldet hast! Es sollte in v3.0 behoben werden.
Betreff: Add-In-Manager@vohwinkelh0 , das klingt nach einer großartigen Idee für ein Feature im Add-In-Manager. Es hört sich so an, als würden Sie eine Art separate TEST- (oder Beta-) Versionierung benötigen? Leider habe ich derzeit nicht die Bandbreite, um so etwas zu implementieren, aber ich bin sicher, dass dies möglich wäre, indem Sie einige benutzerdefinierte Metadatenfelder hinzufügen und diese in Ihrem Code verwenden, um festzustellen, ob es sich um einen TEST-Build handelt.
Betreff: Add-In-Manager@Justin_Chilton Die Eingabe eines & in das Tooltip-Feld verursacht eine Fehlfunktion beim Schreiben in addin.jmpcust, wodurch es nicht mehr geparst werden kann. (JMP 16.1 Windows 10).
Betreff: Add-In-Manager@Justin_Chilton Wissen Sie, ob es eine Möglichkeit gibt, die Auto-Update-Funktion auch auf TEST zu implementieren? Ich stolpere häufig über die Tatsache, dass ich den TEST an Benutzer austeile, um eine Funktion zu testen, aber sobald PROD aktualisiert wird, erhalten sie dieses Update nicht bereitgestellt, da das TEST-Add-In nicht automatisch prüft, ob es eine neue PROD-Version gibt?
Betreff: Add-In-ManagerVielen Dank @pauldeen ! Wusste nicht, dass die Funktion addinLoad.jsl verfügbar ist (im Handbuch versteckt). Diese Lösung funktioniert für mein Problem!
Betreff: Add-In-Manager@Djtjhin Sie können entweder ein leeres Add-in auf allen Computern mit einer addinLoad.jsl-Datei bereitstellen, die Ihre benutzerdefinierten Funktionen enthält
Oder
Sie können Ihre IT-Abteilung verwenden, um eine jmpStartAdmin.jsl-Datei bereitzustellen, die Ihre benutzerdefinierten Funktionen wie beschrieben enthält hier , kein Add-in erforderlich.
Betreff: Add-In-ManagerHey @Justin_Chilton , versuche ich, den Add-In-Manager zu verwenden, um benutzerdefinierte benutzerdefinierte Funktionen bereitzustellen, die idealerweise beim Start ausgeführt werden. Können Sie die beste Möglichkeit empfehlen, dies mit dem Add-In-Manager zu tun?
Betreff: Add-In-Manager@Justin_Chilton JMP17EA2 zeigt wieder leere Menüstrukturen, keine Fehler im Log. Danke für dieses Add-In, es sollte direkt in JMP integriert werden!
Betreff: Add-In-Manager@Justin_Chilton @MikeD_Anderson
Vielen Dank für die Antwort! Ich bin gerade neulich über die Möglichkeit dazu gestolpert, aber Sie sind mir zuvorgekommen, als ich es hier gepostet habe.
@MikeD_Anderson - Die Informationen über den schnellen JMP-Start sind wirklich gut zu wissen, die App-Skripte wurden definitiv ziemlich umfangreich, das hilft also sehr.
Ein Teil dessen, was ich mit dem Add-In-Manager erreichen wollte, bestand darin, den Schritt zu überspringen, die .jmpappsource jedes Mal, wenn ich etwas testen wollte, in eine .jsl- oder .jmpapp-Datei exportieren zu müssen, also habe ich am Ende den folgenden Code erhalten . Ich bin mir nicht ganz sicher, wie es funktioniert, aber bei Verwendung von OpenFile() startet die .jmpappsource den App Builder nicht und die App kann direkt ausgeführt werden. Genau das, was ich brauchte!
app = JMPApp();
app << OpenFile("$ADDIN_HOME(com.example.addin)\MyApp.jmpappsource");
app << Run;Betreff: Add-In-Manager@mringqui & @Justin_Chilton - Nur ein kleiner Farbkommentar zu der Methode, die Justin erwähnt. Sie müssen zuerst die jmp-App-Quelldatei in eine .jmpapp-Datei kompilieren. Dies kann unter Datei > Exportieren erfolgen, wenn Sie sich im Application Builder befinden. Anschließend fügen Sie die .jmpapp-Datei in das Add-In-Paket ein und öffnen die .jmpapp-Datei:
open("$ADDIN_HOME(com.example.me.myaddin)/MyApp.jmpapp");
So sieht der JMP-Standard-Add-In-Assistent aus.

Beachten Sie, dass dies einige nette Folgeeffekte hat, wenn Sie nur die JSL direkt einbetten. Das Größte ist, dass es bei wirklich großen Apps verhindert, dass JMP beim Start langsam ist. Der gesamte Code muss beim Start analysiert werden - wenn Ihr Skript also wirklich groß ist oder Sie eine Menge davon haben, kann es die Dinge verlangsamen - ein Problem, das ich mit dem STK hatte. Das Einbetten als App bedeutet, dass JMP beim Start nur eine Codezeile parsen muss. Es gibt einige andere, aber das ist meiner Meinung nach das wichtigste.
Betreff: Add-In-Manager@mringqui , Danke, dass Sie sich gemeldet haben. Ich dachte, dass dies einige Änderungen am Add-In-Manager-Add-In erfordern würde, aber @MikeD_Anderson hat mir gezeigt, wie das mit der Funktionsweise des Add-In-Managers geht.
Anstatt eine auszuführende Datei festzulegen, verwenden Sie ein Skript, das die JMP-App-Quelldatei ausführt. Sie würden dies einfach in das Textfeld für „Run this JSL“ einfügen.
Include("$ADDIN_HOME(com.example.me.myaddin)/MyApp.jmpappsource");</CODE></PRE></LINGO-BODY><LINGO-SUB id="lingo-sub-394777" slang="en-US">Betreff: Add-In-Manager</LINGO-SUB><LINGO-BODY id="lingo-body-394777" slang="en-US"><P>Hallo, tolle Arbeit! Ich hoffe, ein Add-In zu erstellen, das eine .jmpappsource-Datei als Aktion „JSL in dieser Datei ausführen“ für das Menüelement verwendet. Ist das etwas, das leicht hinzugefügt werden könnte? Im Moment schränkt die Tatsache, dass ich gezwungen bin, eine .jsl-Datei zu verwenden, meine Möglichkeiten ein, den Add-In-Manager bequem zu verwenden. Vielen Dank!</P></LINGO-BODY><LINGO-SUB id="lingo-sub-386516" slang="en-US">Betreff: Add-In-Manager</LINGO-SUB><LINGO-BODY id="lingo-body-386516" slang="en-US"><P><A href="https://community.jmp.com/t5/user/viewprofilepage/user-id/1855" target="_blank">@Justin_Chilton</A><BR /> Ich verwende eine Kombination aus $ADDIN_HOME und Get Default Directory(), je nachdem, wo/wie ich Dinge einfügen muss. Und für viele meiner Includes habe ich eine Reihe von Bibliotheken, die vielen meiner Tools gemeinsam sind, und ich behandle sie insgesamt als separates Add-In. Dann enthält jedes Tool, das ich mache, einfach die Datei von $ADDIN_HOME und alle Bibliotheksfunktionen stehen mir oder jedem anderen zur Verfügung, der sie verwenden möchte.<BR /><BR /> Ich bin mir nicht sicher warum<A href="https://community.jmp.com/t5/user/viewprofilepage/user-id/2173" target="_blank"> @tsl</A> muss diese zusätzliche Schicht zum Reißverschluss hinzufügen. Aus meiner Sicht würde es die Dinge insgesamt einfacher machen, es so zu belassen, wie die Organisation in seiner ersten Hierarchie, aber da ich nicht alle Besonderheiten dieser Infrastruktur kenne, fehlt mir vielleicht etwas.<BR /> Typischerweise ist das einzige Update, das ich an einer .jmpcust-Datei vornehmen muss, sobald das Originalmaterial eingestellt ist, das Aktualisieren des Anzeigenamens für ein Versionsupdate (was ich in meinem Repo mache, aber im Add-In-Manager durchgeführt werden könnte).</P></LINGO-BODY><LINGO-SUB id="lingo-sub-386499" slang="en-US">Betreff: Add-In-Manager</LINGO-SUB><LINGO-BODY id="lingo-body-386499" slang="en-US"><P>Danke für die Klarstellung<A href="https://community.jmp.com/t5/user/viewprofilepage/user-id/2173" target="_blank"> @tsl</A> . Es sieht so aus, als könnte es mit ein paar Änderungen an Ihrem Prozess funktionieren.</P>
<OL>
<LI>Ändern Sie den Ordner $ADDIN_HOME nicht und verwenden Sie stattdessen relative Pfade und Get Default Directory(). Dies erleichtert auch die Entwicklung des Add-Ins, da alle Verweise darauf für die installierte Version gelten würden.</LI>
<LI>Verwenden Sie eine Variable, um die relative Pfadposition von CommonFiles zu bestimmen, und verwenden Sie diese in Ihren Include-Dateien, da die Position zwischen einem Produktions-Add-In und dem Entwicklungsrepo variiert.</LI>
</OL>
<P>Alternativ können Sie die Idee verwerfen, CommonFiles in jedes Add-In zu kopieren. Sie können einen separaten Add-In-Eintrag für CommonFiles erstellen (er hätte keine Befehlselemente) und verlangen, dass der Benutzer diesen zusätzlich zum Add-In installiert. Dies würde bedeuten, dass es nur eine Kopie der CommonFiles für den Benutzer gibt (dies kann gut oder schlecht sein, je nachdem, wie oft Sie alle Add-Ins nach der Aktualisierung von CommonFiles testen. Damit könnten Sie die Dateien mit der Pfadvariablen $Addin_Home einbinden, aber Sie müssten noch herausfinden, wie Sie sie aus der Entwicklung einbinden. Dies könnte dem ähnlich sein, was<A href="https://community.jmp.com/t5/user/viewprofilepage/user-id/6649" target="_blank"> @nathan-clark</A> tut, aber ich bin mir nicht sicher.</P>
<P>Eine weitere Alternative ist, dass ich, anstatt die Kopie für Sie zu implementieren (jemand, der etwas restriktiv macht), einfach ein sehr flexibles Nachbearbeitungsskript implementieren kann, das Sie definieren können. Angenommen, Sie definieren eine Funktion, die eine Referenz auf das ZipArchive verwendet, und Sie können sie nach Belieben manipulieren. Diese Lösung erfordert wahrscheinlich die geringste Änderung von Ihnen und mir.</P>
<P>Entschuldigung für all das Geschwätz, aber hoffentlich bringt uns einer dieser Vorschläge in die richtige Richtung!</P></LINGO-BODY><LINGO-SUB id="lingo-sub-386453" slang="en-US">Betreff: Add-In-Manager</LINGO-SUB><LINGO-BODY id="lingo-body-386453" slang="en-US"><P><A href="https://community.jmp.com/t5/user/viewprofilepage/user-id/1855" target="_blank">@Justin_Chilton</A> , ja, Sie beschreiben etwas, das dem sehr nahe kommt, was ich tue. Lassen Sie mich ein wenig näher darauf eingehen und zeigen, was passiert, wenn ich den Addin-Manager verwende. (Und ich erforsche und lerne immer noch, wie es funktioniert, also vergib mir, wenn ich falsch darstelle, was es kann!)</P><P> </P><P>Nachdem ich das Add-In erstellt habe, wobei ich den Quellordner Addin_1\Source lasse, habe ich eine Datei, die wir Addin_1.jmpaddin nennen und die sich im Ordner Addin_1\Release befindet.</P><P>Ich benenne das in eine .zip-Erweiterung um, öffne es und schaue es mir an. Ich finde es sieht so aus:</P><P> </P><P><SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Addin_Initial_Folder_Structure.png" style="width: 217px;"><span class="lia-inline-image-display-wrapper" image-alt="Addin_Initial_Folder_Structure.png" style="width: 217px;"><img src="https://us.v-cdn.net/6038925/uploads/images/32932i1AD28B843A933FC3/Addin_Initial_Folder_Structure.png" role="button" title="Addin_Initial_Folder_Structure.png" alt="Addin_Initial_Folder_Structure.png" /></span></SPAN></P><P> </P><P>(Es gibt auch ein paar XML-Dateien, die ich zum Verwalten einiger Dinge verwende, aber wir können diese der Einfachheit halber überspringen.)</P><P>Dann ändere ich die Zip-Datei manuell, indem ich einen neuen Ordner innerhalb der .zip-Datei erstelle und alle Source_1-Dateien usw. in diesen neuen Unterordner ziehe. Ich belasse die addin.jmpcust und add.def in der Root-Ebene, da das Add-In sonst nicht installiert wird. Ich lasse auch CustomMetaData.jsl auf der Stammebene, weil ich vermute, dass es dort sein muss.</P><P>Dann ziehe ich den CommonFiles-Ordner, den ich auch brauche, in die ZIP-Datei. Meine endgültige Zip-Struktur sieht so aus:</P><P><SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Addin_Final_Folder_Structure.png" style="width: 220px;"><span class="lia-inline-image-display-wrapper" image-alt="Addin_Final_Folder_Structure.png" style="width: 220px;"><img src="https://us.v-cdn.net/6038925/uploads/images/32933i3C14631B2CA97BE7/Addin_Final_Folder_Structure.png" role="button" title="Addin_Final_Folder_Structure.png" alt="Addin_Final_Folder_Structure.png" /></span></SPAN></P><P>Dann muss ich noch etwas tun: Die Zeilen <ACTION type=""path""> in der .jmpcust-Datei müssen jetzt bearbeitet werden. Während es heißt</ACTION></P><P>$ADDIN_HOME(com.xyz)\Quelle_1\Code_1.jsl</P><P>Ich muss es ändern, um es zu lesen</P><P>$ADDIN_HOME(com.xyz)\Addin_1\Source_1\Code_1.jsl</P><P>Was ich mit einem Suchen / Ersetzen in einem Texteditor tun kann.</P><P>Wenn alle diese Schritte erledigt sind, kann ich das Add-In bereitstellen und installieren, und alles funktioniert.</P><P> </P><P>Zu Ihrem letzten Kommentar: Da es sich bei diesem Add-In um eine Reihe von Tools handelt, hat jedes seinen eigenen Unterordner "Source" in Addin_1. Um auf die CommonFiles zu verweisen, haben meine Include()-Anweisungen in Code_1.jsl usw. ein Extra "..\", um eine zusätzliche Ebene nach oben zu gehen, um die Include-Dateien korrekt zu finden.</P><P> </P></LINGO-BODY><LINGO-SUB id="lingo-sub-385991" slang="en-US">Betreff: Add-In-Manager</LINGO-SUB><LINGO-BODY id="lingo-body-385991" slang="en-US"><P><A href="https://community.jmp.com/t5/user/viewprofilepage/user-id/2173" target="_blank">@tsl</A><BR /> Ich mache etwas Ähnliches mit Subversion und verwende den Add-In-Manager, um alle Repo-Aktivitäten zu posten. Sobald der gesamte Code festgeschrieben ist, exportiere ich an einen Speicherort, der zur "Quelle" für das Add-In wird (ein lokaler oder Netzwerkordner). Persönlich verwalte ich meine .jmpcust-Dateien und .def-Dateien in meinem Repo, damit diese auch exportiert werden, aber Sie könnten einfach Code exportieren und die .def- und .jmpcust-Dateien mit Addin Manager erstellen (er erstellt die Dateien im Quellordner , und in meinem Fall werden beim Exportieren neuer Inhalte aus dem Repo nur die exportierten Dateien überschrieben).<BR /><BR /> Dann verwende ich sein Tool, um das gesamte Packen, Archivieren und Verteilen an meine Produktionsordner zu erledigen (das ist sowieso immer das, was manuell am meisten Zeit in Anspruch genommen hat). Da ich auch viele Add-Ins vor dem Add-In-Manager verwalten musste, habe ich, um es mir selbst leichter zu machen, auch die JMP-Datei manuell bearbeitet, in der alle Informationen (Add-In, Name, Quellordner usw.) gespeichert sind, sodass ich alle meine Add-Ins bereit hatte zu gehen, wenn ich das Add-in gestartet habe, anstatt sie manuell über diese Schnittstelle hinzuzufügen).</P><P> </P><P>Zusätzlich zum Add-In selbst sind auch einige Funktionen enthalten, die ich aktualisiert habe, damit meine Benutzer benachrichtigt werden und Add-Ins automatisch aktualisieren können, wenn neue Versionen in Produktion gehen.</P></LINGO-BODY><LINGO-SUB id="lingo-sub-385979" slang="en-US">Betreff: Add-In-Manager</LINGO-SUB><LINGO-BODY id="lingo-body-385979" slang="en-US"><P><A href="https://community.jmp.com/t5/user/viewprofilepage/user-id/2173" target="_blank">@tsl</A> , wie sieht die Dateistruktur für das Add-In aus, wenn Sie es manuell komprimieren?</P>
<P>Da Ihr Code relative Pfade zum CommonFiles-Verzeichnis enthält, stelle ich mir vor, dass Ihr Add-In etwa so aussieht?<SPAN style="font-family: inherit;">Ist der Release-Ordner nicht in der Add-In-Datei enthalten?</SPAN></P>
<P> </P>
<PRE>Addin_1.jmpaddin
|_Addin
|_Source<BR /> |_Code.jsl<BR /> |_Release<BR /> |_Something?<BR /> |_CommonFiles</PRE>
<P>In der obigen Struktur existiert der Ordner „Addin“ nur, um die Ordnerstruktur für Ihre relativen Pfade gleich zu halten. Ist dies bei Ihnen der Fall?</P>
<P>Ich denke, ich kann einen neuen optionalen Verzeichnispfad hinzufügen, der als Teil des Build-Prozesses in die Add-In-Datei kopiert werden kann. Wir müssen jedoch noch das Verzeichnisproblem lösen. Um das zu lösen, habe ich die Idee, ein kleines Snippet hinzuzufügen, um den Speicherort des CommonFiles-Verzeichnisses festzulegen, und dieses für alle Ihre gemeinsamen Datei-Includes zu verwenden. Alternativ könnten Sie eine „IncludeCommonFile()“-Funktion erstellen, die versucht, vom Produktionsstandort und Failover zum Entwicklungsstandort einzuschließen</P>
<P> </P>
<PRE><CODE class=" language-jsl">commonFilesDir = Directory Exists("../CommonFiles/",
"../CommonFiles/", // production location
"../../CommonFiles/" // development location
);
//or
IncludeCommonFile = Function({file},
Try(Include("../CommonFiles/" || file), Include("../../CommonFiles/" || file));
);
Dies würde Ihnen die folgende Struktur geben, und ich * denke * würde funktionieren, wenn ich eine Funktion für freigegebene Ordner hinzufügen würde. Der einzige Schluckauf, an den ich denken kann, wäre, dass, wenn Sie zusätzliche Ordner in Source haben, die Include-Funktion nicht funktionieren würde, oder Sie zusätzliche '../' in Ihren Includes benötigen würden, die die Verzeichnisvariable verwenden.
Addin_1.jmpaddin
|_Source
|_Code.jsl
|_CommonFiles
Betreff: Add-In-ManagerHi @Justin_Chilton ,
Ich habe gerade Ihren Add-In-Manager entdeckt und bin fasziniert. Ich verwalte Add-Ins seit Jahren manuell, bis hin zur manuellen Bearbeitung von .jmpcust-Dateien. Ich sehe die Möglichkeit, mein Leben mit Ihrem Add-In-Manager viel einfacher zu machen. Ich frage mich jedoch, wie ich es unterstützen kann, was ich tun möchte.
Ich werde auf das beigefügte Bild der vorgeschlagenen Ordnerstruktur verweisen. Die Idee ist, dass es einen Ordner gibt, der JMP-Code enthält, wir nennen ihn hier RepositoryRoot. Dieser Ordner befindet sich in einem GIT-Lab-Repository und wird von zwei oder mehr JSL-Entwicklern gemeinsam genutzt und synchronisiert.
Jeder Entwickler besitzt ein Add-in im Repository. Nennen wir sie Addin_1 und Addin_2. Diese Add-Ins befinden sich in ihren eigenen jeweiligen Unterordnern innerhalb des Repositorys.
Es gibt auch einen Ordner innerhalb des Repositorys, den wir CommonFiles nennen und der einige standardmäßige JSL-Bibliotheksdateien enthält, die von beiden Add-Ins verwendet werden.
Diese Standardbibliotheksdateien sind in den einzelnen Add-Ins enthalten, z. B. könnte eine JSL-Datei in Addin_1\Source eine Zeile wie
include("..\..\CommonFiles\LibraryFile1.jsl");

Die Frage ist also, wie wir diese Struktur mit dem Add-In-Manager nutzen könnten? Ich habe Probleme mit zwei möglichen Optionen:
1) Wenn ich im Add-In-Manager „RepositoryRoot“ als Quellordner lasse, werden Addin.def und Addin.jmpcust in RepositoryRoot erstellt. Dies funktioniert nicht, da wir nur eine addin.def in einem bestimmten Quellordner haben können und wir separate Add-Ins mit separaten Entwicklern haben möchten, aber den Code gemeinsam nutzen möchten.
2) Wenn ich „RespositoryRoot\Addin_1\Source“ als Quellordner lasse, werden addin.def und addin.jmpcust im Quellordner des Unterordners von Addin_1 erstellt. Und das ist gut, weil es in einem eigenen Ordner enthalten ist. ABER ich sehe keine Möglichkeit, den CommonFiles-Ordner von zwei Ebenen nach oben in der Verzeichnisstruktur zum Add-In hinzuzufügen. Der Code erfordert diesen gemeinsamen Dateiordner, aber wir möchten ihn für die Codefreigabe und -synchronisierung auf der höheren Ebene halten.
Ich verstehe, dass der Ordner „CommonFiles“ letztendlich in jede endgültige .jmpaddin-Datei dupliziert werden muss, bevor das Add-In veröffentlicht wird.
Die Hoffnung war, dass wir eine Add-In-Manager-Funktion finden könnten, die das für uns handhabt. Unsere Alternative besteht darin, manuell eine .zip-Datei zu erstellen und die Ordnerstruktur so einzurichten, wie wir sie benötigen, und dann vor der Veröffentlichung die Erweiterung in .jmpaddin zu ändern.
Wenn Sie Ideen haben oder in Betracht ziehen würden, dass der Add-In-Manager diese Funktion unterstützt, wäre das großartig.
Danke schön
Tom
Betreff: Add-In-ManagerDanke für Ihre Antwort @Justin_Chilton ! Am Ende habe ich ein Lichtthema für jmp durchgesetzt, um das Farbproblem vollständig zu vermeiden. Ich werde Ihre Vorschläge ausprobieren und auf die Escape-Taste klicken, um die Verzögerungszeit zu lösen.
Betreff: Add-In-ManagerHi @alavi ,
Ich bin mir nicht sicher, was mit der langsamen Reaktionszeit los ist. Ich muss weitere Nachforschungen anstellen, um festzustellen, ob es sich um ein Problem mit meinem Add-In oder um ein Problem mit JMP handelt. Allerdings habe ich einen anständigen Workaround gefunden. Wenn Sie zum ersten Mal in ein Textbearbeitungsfeld klicken, halten Sie die Escape-Taste gedrückt, bis der Text nicht mehr im Fokus ist. Jetzt sollten alle Bearbeitungsfelder ohne Verzögerung funktionieren, nachdem Sie darauf geklickt haben.
Was das Farbschema betrifft, bin ich mir nicht sicher, was dies verursachen würde. Jede Version des Add-Ins nach 2.5 sollte die richtige Farbgebung für dunkle Designs haben. Ich denke, die einzige Möglichkeit, dieses Problem zu reproduzieren, besteht darin, von hellem zu dunklem Design zu wechseln, während JMP geöffnet ist. Ich bekomme immer die Ansicht unten mit dem grauen Thema.

Betreff: Add-In-ManagerHey @Justin_Chilton ,
Ich verwende v2.9 des Add-Ins auf JMP 15.1, das auf MacOS ausgeführt wird. Jedes Mal, wenn ich Text in eines der Textfelder des Add-Ins eingeben muss, stoße ich auf eine SEHR langsame Reaktionszeit. Dies ist so langsam, dass das Add-In unbrauchbar wird.
Ein zweites, kleineres Problem ist, dass keines der Farbschemata richtig funktioniert, wenn JMP im Dunkelmodus eingestellt ist. Die Farbe des Textes in den Textfeldern ist zu hell und kann nicht gegen die Hintergrundfarbe gelesen werden.

Betreff: Add-In-Manager@Justin_Chilton Ich glaube, ich habe Schreibzugriff, da ich sehen kann, dass das alte Add-In korrekt archiviert und das neue Add-In aktualisiert wurde, aber ich sehe den Fehler immer noch. Ich bin mir nicht sicher, welcher Schritt speziell fehlgeschlagen ist. In Bezug auf das gemountete Netzlaufwerk bin ich leider wahrscheinlich überfordert. Ich bin mir über diesen Status nicht sicher, aber vielleicht kann ich mich bei meinen Kollegen erkundigen, um mehr zu erfahren.
Betreff: Add-In-Manager@Djtjhin , es hört sich so an, als ob es sehr wahrscheinlich damit zusammenhängt, dass es sich um einen Sharepoint-Speicherort handelt. Können Sie bestätigen, dass Sie Schreibzugriff auf diesen Speicherort haben, indem Sie eine Datei im Datei-Explorer erstellen? Selbst wenn Sie die Berechtigung haben, hat JMP möglicherweise keine Berechtigung als Anwendung. Verwenden Sie einen normalen Netzwerkpfad oder speichern Sie über ein gemountetes Netzlaufwerk? Das Bereitstellen Ihres Sharepoint-Servers als Netzlaufwerk kann Probleme mit Berechtigungen lösen, da JMP einfach auf dem bereitgestellten Laufwerk speichern kann. Beim regulären Netzwerkpfad sind möglicherweise Anmeldeinformationen erforderlich, was von JMP nicht unterstützt wird.
Betreff: Add-In-ManagerDanke für die Klarstellung Justin!
Folgefrage: Ich erhalte die folgende Fehlermeldung, als ich versuchte, sie in der Produktion bereitzustellen. Der Zielordner ist eigentlich ein Sharepoint. Ich bin mir nicht sicher, ob das der Grund ist oder vielleicht gibt es eine Problemumgehung.
Fehlermeldung:
{"Datei nicht im Schreibmodus geöffnet. "(1, {1}, 2, "Textdatei speichern", Textdatei speichern /*###*/(filepath, str))}
Fehler: Datei nicht im Schreibmodus geöffnet.
1 mal).
Datentabellen-Indizes: 1
Typ: Fehler
Funktionsname: Textdatei speichern
Ausgeführte Funktion: Save Text File /*###*/(filepath, str)
Call-Stack:
deploySelected
Betreff: Add-In-Manager@Djtjhin ,
Ich würde empfehlen, die Anweisung in jeden Befehl einzufügen, um die Prüfung immer dann zu haben, wenn das Add-In verwendet wird, und nicht jedes Mal, wenn der Benutzer JMP startet. Außerdem gab es Probleme beim Aktualisieren von Add-Ins beim Start, daher ist es sicherer, dies zu tun, wenn ein Benutzer auf einen Add-In-Befehl klickt.
Betreff: Add-In-Manager@Justin_Chilton Kann ich eine Antwort erläutern, die Sie Sebastien zuvor gegeben haben? Funktioniert die Auto-Update-Anweisung (unten) also, wenn ich sie in das "Start-up-Skript" (Schnappschuss) platziere? Oder sollten wir die Auto-Update-Anweisung nur unter jedem Befehlsskript einfügen?
Include( "$ADDIN_HOME(com.jmp.myaddin)\updateCheck.jsl" );
com.jmp.juchil.addinmanager:checkForUpdate();

Vielen Dank
Daniel
Betreff: Add-In-ManagerBestätigt, es funktioniert wieder, danke!
Betreff: Add-In-ManagerVielen Dank @pauldeen .Ich denke, dass da mehrere Faktoren zusammengeprallt sind. Zum einen sollte der Fehler in der endgültigen Version von JMP 16.0 behoben sein, war aber für EA8 enthalten. Außerdem tritt dieser Fehler wahrscheinlich auf, weil Ihr Gebietsschema das von mir verwendete Datumsformat nicht unterstützt. Um dies zu beheben und um das Gebietsschema freundlicher zu gestalten, habe ich einige Stellen, an denen ich Datumsangaben formatiere, so aktualisiert, dass anstelle spezifischer Formate Gebietsschema-Datumszeit verwendet wird. Dies sollte den Fehler beheben und die Daten in ein freundlicheres Format bringen.
Betreff: Add-In-ManagerDanke für die 2.8-Korrektur für die Ordner!
Ich habe ein neues für dich:
Add-In-Manager geöffnet, Add-In ausgewählt:

Ausführen von JMP 16EA8.
Kein Problem mit dem gleichen Ding auf JMP 15.2.0 sowohl unter Windows 10
Betreff: Add-In-Manager@Justin_Chilton Vielen Dank! Ich werde das versuchen.
Betreff: Add-In-Manager@pauldeen , ich habe gerade eine neue Version (v2.8) hochgeladen, die das Problem mit den Unterordnern behebt, das Sie gesehen haben. Ich habe auch eine Checkbox-Option hinzugefügt, um automatisch einen Ordner für Sie zu erstellen, so wie Sie es ursprünglich erwartet hatten.
Betreff: Add-In-Manager@Sburel , Sie können diesen Code überall dort hinzufügen, wo Sie nach einem Update suchen möchten, z. B. am Anfang eines Menüelementbefehls. Dies könnte dazu führen, dass ein Benutzer, wenn er auf den Befehl klickt, vor dem Starten des Add-Ins nach einer neuen Version sucht.
Wenn ich mich richtig erinnere, gab es ein Problem mit der Verwendung dieses Codes in der Datei addinLoad.jsl, was dazu führen würde, dass es beim Start von JMP überprüft wurde, aber es gab Probleme mit der Neuinstallation des Add-Ins während des Add-Ins wird noch geladen. Dieses Problem kann immer noch ein Problem sein oder auch nicht.
-Justin
Betreff: Add-In-Manager@Justin_Chilton
Wirklich cooles Add-in. Funktioniert wirklich gut.Ich habe jedoch Probleme, die Auto-Update-Funktion zu verwenden. Insbesondere bin ich verwirrt mit der entsprechenden Datei/dem entsprechenden Speicherort, um das folgende Code-Snippet hinzuzufügen
Include( "$ADDIN_HOME(com.jmp.myaddin)\updateCheck.jsl" );
com.jmp.juchil.addinmanager:checkForUpdate();
Am besten
Sebastian
Betreff: Add-In-Manager@Justin_Chilton Ah ja, wenn Sie einen leeren Ordner erstellen, kommen Sie an diesem Bildschirm vorbei. Der Name des Ordners scheint nicht wichtig zu sein, nur die Tatsache, dass er leer ist.
Beim Testen fand ich diesen anderen Fehler:
Wenn ich Ihren Add-In-Manager v2.7.jmpaddin nehme und den leeren Ordner erstelle und ihn dann so lade, komme ich über den Hinzufügen-Bildschirm hinaus, aber mit einem großen Fehler: Dasselbe passiert mit anderen Add-Ins, die Unterordner enthalten .

Betreff: Add-In-Manager@pauldeen Im Quellordner wird auch die jmpaddin-Datei entpackt (ich hätte wahrscheinlich den Ordner automatisch erstellen sollen, aber ich denke, ich habe es nicht getan). Ich schlage vor, einen Ordner mit dem Namen „ASM Training Material“ im Ordner „Desktop“ zu erstellen und diesen als Quellordner festzulegen. Der Quellordner darf nichts enthalten, da alles gezippt im Add-In landen würde.
Betreff: Add-In-Manager@Justin_Chilton Beim Hinzufügen eines Add-Ins aus einer vorhandenen .jmpaddin-Datei haben wir einen Fehler auf diesem Bildschirm:

Sie können den Quellordner nicht leer lassen und wenn Sie dort etwas einfügen, erhalten Sie eine Warnung, dass er leer sein muss, wenn Sie von einer jmpaddin-Datei starten.
Betreff: Add-In-Managerklappt wunderbar. Danke Hennig
Betreff: Add-In-ManagerHi @vohwinkelh0 ,
Danke, dass du das gemeldet hast. Ich habe diesen Fehler vor ein paar Tagen gesehen und Ihr Kommentar hat mich daran erinnert, sodass ich das Problem endlich auf einen Fehler mit einer der Datei-/Verzeichnisfunktionen zurückführen konnte.
Ich habe das Add-In auf dieser Seite aktualisiert, um dieses Problem vorerst zu umgehen, aber ich habe das Problem auch in JMP notiert, damit wir es beheben können, bevor JMP 16 veröffentlicht wird.
Vielen Dank,
Justin
Betreff: Add-In-ManagerJustin,
Ich erhalte einen Fehler mit Ihrem Add-In als Teil der JMP16EA-Programme. Soll ich dort einen Fehlerbericht einreichen oder soll ich ihn hier posten?
Hennig
Betreff: Add-In-ManagerVielen Dank fürs Teilen... werde es nächste Woche ausprobieren.
Betreff: Add-In-Manager@guillaumebugnon Also verwende ich diese Funktion in einer for-Schleife zum Verschlüsseln der Skripte.
encryptScript = Function({filepath},
{defaultLocal},
errortxt = "";
winCount = N Items (Window ());
scriptWin = Open (filePath);
scriptWin << Bring Window to Front;
Wait (1);
Main Menu ("Encrypt Script");
windowList = Window ();
encryptedWin = windowList[nitems(windowList)]; // get reference to encrypted script window (i.e. the last window)
//TODO: Implement without Try
Try (
encryptedScript = encryptedWin[Script Box(1)] << Get Text;
save text file(filePath, encryptedScript);
ConsoleMsg("File Encrypted: "||filepath); // hoping this goes to stdout
,
errortxt ||= char(exception_msg) || "\!r\!n";
);
Try (scriptWin << Close WIndow());
Try (encryptedWin << Close WIndow());
Return (errortxt)
);
Dann habe ich noch eine autoit Skript, das durchgeht und das Passwort eingibt und die Eingabetaste drückt.
Es ist definitiv keine perfekte Lösung und Ihre Artikel auf der Wunschliste wäre viel besser.
Betreff: Add-In-Manager@pauldeen ,
Vielen Dank, dass Sie dieses Problem mit den benutzerdefinierten Menü-Add-Ins gemeldet haben. Ich habe gerade eine neue Version hochgeladen, die das beheben sollte.
-Justin
Betreff: Add-In-Manager@Justin_Chilton Danke für deine Antwort.
Es könnte nützlich sein, eine jsl-fähige Funktion zu haben, die andere jsl-Dateien verschlüsseln kann (oder eine andere Möglichkeit, dies zu tun).
ich beobachtete @vince_faller Präsentation heute morgen (französische Zeit). Schön.
Wir haben auch einige Devops-Prozesse, müssen aber mehr automatisieren.
Guillaume
Betreff: Add-In-Manager
@guillaumebugnon ,
@vince_faller könnte einige Tipps zum Verschlüsseln von Skripten haben. Ich müsste dem Add-In-Manager jedoch eine Funktion hinzufügen, um das Ändern der hinzuzufügenden Dateien vor dem Zip-Vorgang zu ermöglichen.
Ich finde @vince_faller habe gestern auch eine Präsentation/einen Webcast gemacht, die/der hier für dich nützlich sein könnte: https://www.brighttalk.com/webcast/18305/412912
- Justin
Betreff: Add-In-ManagerHallo zusammen,
Hat jemand Tipps oder Erfahrungen zum Verschlüsseln von Skripten, bevor sie in die jmpaddin-Datei gezippt werden?
Vielen Dank
Grüße,
Guillaume
Betreff: Add-In-Manager
Unter JMP15 Windows 10 kann der Add-In-Manager die Menüstruktur eines vorhandenen Add-Ins nicht mehr parsen.
Zum Reproduzieren: Erstellen Sie ein neues Add-In und benennen Sie das Menü der obersten Ebene mit Benutzerdefiniert um. Erstellen Sie einen Befehl und speichern Sie die Add-In-Definition.
Schließen Sie den Add-In-Manager, öffnen Sie ihn erneut und versuchen Sie, die Registerkarte „Menüelemente“ für das gerade erstellte Add-In anzuzeigen (stellen Sie sicher, dass Sie diese Registerkarte zuerst anzeigen, bevor Sie sich die Menüstruktur Ihrer anderen Add-Ins ansehen).
Damit dies funktioniert, erstellen Sie ein zweites Add-In, in dem Sie den obersten Menüpunkt nicht ändern, sondern den Standard "Add-Ins" belassen. Speichern Sie dieses Add-in. Schließen Sie den Add-In-Manager, öffnen Sie ihn erneut, zeigen Sie zuerst die Menüstruktur des Add-In-Managers mit dem Standardnamen der obersten Ebene an und zeigen Sie dann die Menüstruktur des benutzerdefinierten an. Es funktioniert alles wieder.
Betreff: Add-In-Manager#2 begann mit JMP15/OSX15, aber ich habe 2.4 noch nicht ausprobiert und werde mich bei Ihnen melden.
Betreff: Add-In-ManagerDanke Justin!!
Betreff: Add-In-ManagerHi @John madden ,
Vielen Dank, dass Sie sich gemeldet haben, und entschuldigen Sie die Verzögerung.
#1 sollte in v2.4 angesprochen werden, die ich gerade hier hochgeladen habe.
Für Nr. 2 kann ich dieses Problem nicht unter Windows replizieren, aber ich werde es auf dem Mac weiter untersuchen. Wissen Sie zufällig, ob dieses Problem mit einer bestimmten JMP-Versionsnummer (z. B. JMP 14/15) oder mit einer macOS-Version (10.14/15) aufgetreten ist, oder ist es bei Ihnen schon immer aufgetreten?
Vielen Dank,
Justin
Betreff: Add-In-ManagerHallo, Justin,
Ich habe einige Probleme mit dem Add-In-Manager unter JMP 15/Mac OS 10.15.
(1) [Trivial] maximale/minimale JMP-Versionsoptionen müssen 15 enthalten
(2) [weniger trivial] Das Eingeben von Text in Textfelder in einer Reihe von Fenstern innerhalb des Managers scheint (teilweise) fehlerhaft zu sein. Ich kann Text (z. B. Add-In-Name, Version usw.) durch Einfügen eingeben, aber nicht durch Eintippen.
Vielen Dank.
John madden
Betreff: Add-In-ManagerHallo, ich habe begonnen, den Add-In-Manager zu verwenden, nachdem ich viele Jahre lang Änderungen manuell verwaltet hatte. Ich hatte jedoch kürzlich ein Problem mit nicht sichtbaren Menüelementen. Ich habe kürzlich auf JMP 14.3.0 aktualisiert, bin mir nicht sicher, ob dies damit zusammenhängt. Damit hatte ich vorher keine Probleme.
Wie Sie sehen können, sind keine Fehler im Build oder in der Bereitstellung gekennzeichnet, sodass ich nicht weiß, was passiert.
Jede Hilfe oder Vorschläge sind willkommen, da ich es wirklich nicht von Grund auf neu erstellen möchte.
Grüße,
Derek.

Betreff: Add-In-ManagerHallo Adam,
Entschuldigung für die verspätete Antwort. Basierend auf der Fehlermeldung, die Sie beim Entfernen des Versuchs sehen, sieht es so aus, als ob meine Annahme, dass das updateCheck-Skript die customMetadata-Datei finden kann, richtig war. Ich sehe, wo du die '
aa = einschließen ( "$ADDIN_HOME(com.jmpTest.myjmpaddin)\customMetadata.jsl" ) ;' Teil Ihres Skripts. Sie müssen die Datei jedoch nicht wirklich dort einfügen. Stattdessen möchten Sie das Include im Skript updateCheck.jsl ändern. Es sollte etwa wie folgt aussehen (etwa Zeile 11).
customMetadata_aa = Include( "<SPAN>$ADDIN_HOME(com.jmpTest.myjmpaddin)\</SPAN>customMetadata.jsl" );
Lassen Sie mich wissen, wenn Sie weitere Fragen haben.
Grüße,
Justin
Betreff: Add-In-ManagerHallo Justin,
Da dies mein erstes Add-In ist und ich in Bezug auf die JMP-Erfahrung noch ein Kleinkind bin (ungefähr 11 Monate in Gebrauch), kann ich jetzt anfangen, einfache Fragen zu stellen, während ich die Aktivierung der Update-Check-Funktion durcharbeite.Ich habe ein einfaches Test-Add-In erstellt, um mich nur auf die Aktualisierungsfunktion zu konzentrieren, damit ich diese Funktionalität verstehen kann, bevor ich sie auf mein robusteres Programm anwende.
DAS SCHRIFT:
aa = Include( "$ADDIN_HOME(com.jmpTest.myjmpaddin)\customMetadata.jsl" );
Include( "$ADDIN_HOME(com.jmpTest.myjmpaddin)\updateCheck.jsl" );
com.jmp.juchil.addinmanager:checkForUpdate();
New Window ("Test 3",
Panel Box ("Test 3",
Text Box("Test 3")
)
);
Beantwortung Ihrer Fragen:
- Hatte ich die Einstellung „Metadatendatei erstellen“ eingestellt?
- Ich hatte das Kontrollkästchen für "Metadatendatei erstellen" aktiviert, aber ich hatte nicht den benutzerdefinierten Metadatencode, der die Include-Anweisung in meinem Skript enthielt.Ich habe diese Codezeile der Zeile unmittelbar vor dem Update-Prüfcode hinzugefügt, wie Sie oben sehen können, aber das Problem wurde dadurch nicht behoben.
- Wie ist die Verzeichnisstruktur meines Add-Ins?
- Im mittleren Bereich des Add-In-Manager-Fensters befinden sich auf der Registerkarte „Dateien“ addin.def, addin.jmpcust, customMetadata.jsl und updateCheck.jsl alle im selben Ordner.Dieser Ordner befindet sich im selben übergeordneten Ordner wie die Add-In-Datei selbst (.jmpaddin).
- Dieser Ordner existiert auf meinem C-Laufwerk, NICHT auf dem Server.Hätte ich diese Dateien auch auf dem Server speichern sollen?
- Im unteren Abschnitt, Registerkarte Prod, habe ich alle drei Optionen zum Speichern an einem Serverstandort.Sie haben jeweils einen eigenen Ordner, und alle drei Ordner befinden sich im selben übergeordneten Ordner.
- ARCHIV – enthält nur frühere Iterationen des Add-Ins, während ich es bereitstelle.
- META – enthält nur die Datei publishAddins.jsl
- PROD – enthält nur die Add-In-Installationsdatei .jmpaddin
- Welche Fehlermeldung erhalte ich, wenn ich „Try()“ auskommentiere?
- Ich erhalte die Fehlermeldung „Error with file: Path is invalid: \customMetadata.jsl“
- Ich habe versucht, den obigen Speicherortpfad von der Sprache $ADDIN_HOME... auf den genauen Speicherort auf meinem C-Laufwerk zu ändern, wie er auf der Registerkarte Datei (mittlerer Abschnitt) angegeben ist.Es hat nicht geholfen, ich habe die gleiche Fehlermeldung erhalten.
Vielen Dank für Ihre Hilfe!
-Adam
Betreff: Add-In-ManagerHi @Adam_R ,
Danke für die Detailarbeit! Ein paar Fragen und Dinge zum Ausprobieren:
- Haben Sie die Einstellung „Metadatendatei erstellen“ in der Einstellungsgruppe „Benutzerdefinierte Metadaten“ festgelegt? Diese Datei ist erforderlich, damit das Aktualisierungsskript ausgeführt werden kann.
- Wie sieht die Verzeichnisstruktur für Ihr Add-In aus? Befindet sich das Skript, das „com.jmp.juchil.addinmanager:checkForUpdate“ aufruft, in einem untergeordneten Ordner? Wenn dies der Fall ist, erwartet die Datei updateCheck.jsl, dass sie sich im selben Ordner befindet, aus dem der Ordner aufgerufen wird, sodass die Funktion nicht funktioniert. Eine Problemumgehung besteht darin, eine weitere JSL-Datei auf der Stammebene Ihres Add-Ins hinzuzufügen (wie customMetadata.jsl und updateCheck.jsl), die die updateCheck-Funktion aufruft, und diese Datei einfach in das JSL-Skript der unteren Ebene aufzunehmen. Eine andere Option besteht darin, das Skript updateCheck.jsl so zu bearbeiten, dass „$addin_home(com.jmp.myaddin)/customMetadata.jsl“ anstelle nur des relativen Dateinamens verwendet wird. Wenn dies das Problem ist, kann ich das Add-in aktualisieren, um es flexibler zu machen, wo es nicht so sehr vom Standardverzeichnis abhängt, in dem Sie die Funktion aufrufen.
- Das updateCheck.jsl-Skript ist so implementiert, dass es unbemerkt mit einem Try() fehlschlägt, um den Workflow Ihres Add-Ins nicht zu beeinträchtigen. Wenn also keiner der ersten beiden Vorschläge das Problem behebt, könnten Sie Try() in der Datei updateCheck.jsl auskommentieren und mir mitteilen, welche Fehlermeldung Sie erhalten, wenn Sie versuchen, nach einem Update zu suchen?
Lassen Sie mich wissen, wenn Sie Fragen haben.
Grüße,
Justin
Betreff: Add-In-ManagerHallo Justin,
Add-In Manager v2.3 funktioniert wunderbar in allen Aspekten für mich, aber eins, ich bin nicht in der Lage, den updateCheck dazu zu bringen, Updates korrekt zu pushen.Einige Fakten:
- Mein Code außerhalb der Updateprüfung läuft korrekt.
- Meine PROD-Ordner „Metadata“ und „Deployment“ befinden sich beide auf Serverstandorten unter demselben übergeordneten Ordner, und ich habe überprüft, dass Benutzer auf beide zugreifen können.
- Im Abschnitt „Einstellungen“ habe ich „Update-Check-Skript einschließen“ ausgewählt und die in diesem Abschnitt bereitgestellte Include-Anweisung in meinen Code kopiert.Ich habe den Add-In-ID-Abschnitt dieser Anweisung von (com.jmp.myaddin) so bearbeitet, dass er meinem Add-In entspricht.Ich habe nichts anderes in dieser Anweisung bearbeitet und nichts im updateCheck.jsl-Skript bearbeitet.
- Beim Vornehmen von Änderungen am Add-In und Bereitstellen in PROD habe ich überprüft, dass sich das „pubDate“ in der Datei „publishedAddins.jsl“ in der Metadaten-Serverdatei bei jeder Bereitstellung geändert hat
- Ich habe Benutzer dazu gebracht, eine vorhandene Version der Datei im PROD-Ordner herunterzuladen, JMP zu schließen, JMP erneut zu öffnen und das Add-In erfolgreich auszuführen.
- Ich habe eine neuere Iteration für PROD bereitgestellt, überprüft, ob sich das PubDate geändert hat, und den vorherigen Benutzer aufgefordert, JMP erneut zu öffnen und das vorhandene Add-In auszuführen.Der Benutzer wird nie aufgefordert, das Add-In zu aktualisieren.
- Ich habe denselben Benutzer dazu gebracht, in den PROD-Ordner zu gehen und das Add-In neu zu installieren, wodurch das Add-In erfolgreich aktualisiert wurde.
Betreff: Add-In-ManagerHallo Aubrey,
Die Include-Anweisung im Skript updateCheck.jsl verwendet einen relativen Pfad zur Datei customMetadata.jsl. Solange sich beide Dateien im selben Ordner befinden, sollte es ordnungsgemäß funktionieren. Wie sieht die Ordnerstruktur für Ihr Add-In aus?
Fühlen Sie sich frei, mir eine private Nachricht zu senden, wenn Sie etwas senden müssen, was Sie in diesem öffentlichen Beitrag nicht möchten.
Vielen Dank,
Justin
Betreff: Add-In-ManagerJustin,
Ich habe ein Problem mit der Autoupdate-Funktion.Ich habe das Problem auf das Skript updateCheck.jsl zurückgeführt.
Die folgende Zeile schlägt fehl, dann wird die try-Anweisung beendet.
customMetadata_aa = Include("customMetadata.jsl" );
Wenn ich dem Dateipfad Folgendes hinzufüge, gibt es keine Probleme und es sieht so aus, als ob die Dinge wie angekündigt funktionieren.
$ADDIN_HOME(my_addin_here)
Soll ich das für jedes Add-in tun oder sollte das automatisch sein?
Vielen Dank,
Aubrey
Betreff: Add-In-ManagerJustin,
Version 2.3 funktioniert auf meinem Mac wie am Schnürchen!Vielen Dank!!!
John
Betreff: Add-In-Manager@Justin_Chilton Vielen Dank! Ich werde das versuchen.
Betreff: Add-In-Manager@John madden ,
Danke, dass du das gemeldet hast! Es sieht so aus, als würden Sie einen Mac verwenden, und Sie müssen einen Ihrer Quellordner umbenannt oder gelöscht haben. Ich habe jetzt eine Prüfung dafür hinzugefügt (v2.3), damit es nicht mehr fehlschlagen sollte.
Betreff: Add-In-Manager@nathan-clark ,
Wenn Sie noch Version 1.3 des Add-Ins haben, können Sie die ID und den Namen des Menüelements für diese Version ändern und sie zusammen mit der neuen Version verwenden. Version 1 ermöglicht es Ihnen, Kontrollkästchen zu verwenden, um mehrere gleichzeitig zu erstellen, und sollte in der Lage sein, sich mit der von Version 2 verwendeten Datentabelle zu verbinden. In v2.0 gab es viele architektonische Änderungen, daher musste ich leider die Kontrollkästchen entfernen. Ich habe es auf meiner Liste, diese in Zukunft wieder hinzuzufügen.
Betreff: Add-In-ManagerHallo, Justin,
In JMP 14.0.1 erhalte ich ständig diesen Fehler:
Fehlermeldung: {"Argument sollte Liste sein"(1, 2, "Concat Items", Concat Items /*###*/(errorList, " "))} Fehler: Argument sollte 1 Mal Liste sein. Typ: Fehler Funktionsname: Concat Items Ausgeführte Funktion: Concat Items /*###*/(errorList, " ") Call Stack: getLastModifiedDateOfNewestFile getStatusIcon refreshAddinTableBox initialize
Irgendwelche Ideen? Dies ist Manager 2.2.
John
Betreff: Add-In-Manager@Justin_Chilton
Nochmals vielen Dank für dieses Add-in. Ich komme endlich mit der neuen Version auf den neuesten Stand und nutze einige Ihrer Verbesserungen gegenüber dem, was ich manuell gemacht habe
Meine einzige Frage, und ich bin mir nicht sicher, ob dies möglich ist, ist, mehrere Add-Ins gleichzeitig erstellen zu können. Ich weiß, dass die unteren Bereiche für Informationen und Verzeichnisse Add-In-spezifisch sind, aber diese könnten möglicherweise verschwinden, wenn mehr als ein Add-In ausgewählt wird. Dann könnten alle ausgewählten DEVd/Deployed/etc sein.
Ich verwalte im Moment über 40 Add-Ins und mache Updates oft in Stapeln, also wäre es erstaunlich, wenn ich in der Lage wäre, einen Haufen aller Add-Ins auf einmal zu machen!
Betreff: Add-In-ManagerDanke dafür! Das Erstellen und Aktualisieren von Add-Ins ist jetzt so einfach, dass ich meine eigenen Add-Ins öfter entwickle und verbessere als in den dunklen Zeiten vor diesem Tool.
Betreff: Add-In-ManagerIch möchte so gut und wohltätig sein und JMP-Entwicklern für die 13. Version eines Softwareprogramms danken, mit dem ich gerne unterrichte. Ich habe es seit Version 5.0, mit seinen gut durchgeblätterten Papierhandbüchern und um ehrlich zu sein, wurde seit dieser Version nichts hinzugefügt, was für mich von Wert ist. Aber da ich Version 5.0 so liebe wie ich, habe ich jedes Jahr gerne und bereitwillig ein Upgrade durchgeführt. Und dann die ROC-Kurve & partieller Bereich unter der Kurvenanalyse Skript kam hinzu, was in JMP12 wunderschön war. Ich habe eine Unterrichtssitzung eingerichtet, um meinen Schülern ROC-Kurven zu zeigen ... und ich habe auf v13 aktualisiert ... und jetzt werden die Kurven nicht angezeigt. Buh.
Betreff: Add-In-ManagerHi @tejvishnu ,
Ja, JMP 13 ist erforderlich, um dieses Add-In zu installieren. Leider war es mir nicht möglich, dieses Add-In mit JMP 12 kompatibel zu machen. Ich habe den Beitrag aktualisiert, um diese Informationen aufzunehmen.
Vielen Dank,
Justin
Betreff: Add-In-ManagerDas Add-In scheint auf meinem nicht installiert zu werden Computer. Dies scheint das Problem bei einigen der kürzlich hochgeladenen Add-Ins zu sein. Benötigt dieses Add-In JMP-13?
Ich habe JMP 12.2 auf meinem Computer.