Les compléments JMP sont d'excellents ajouts aux fonctionnalités principales de JMP, et parfois, vous devrez peut-être automatiser la création de compléments avec JSL. J'ai travaillé avec la création automatisée de compléments lors de la création de mon complément JMP, le Générateur de compléments personnalisés JMP vers R . Voici une astuce JSL astucieuse pour la création automatique de compléments.
Le code de ce tutoriel est adapté d'un merveilleux script écrit par @Justin_Chilton , qui a construit le Générateur de compléments personnalisés .
Un complément JMP (.jmpaddin) est un fichier Zip (.zip). Les trois composants minimum d'un complément JMP sont les fichiers addin.def et addin.jmpcust, ainsi que le script JSL qui s'exécutera lorsque le complément sera utilisé. Vous pouvez ajouter des fichiers supplémentaires à votre guise, par exemple d'autres scripts JSL, des tableaux JMP, des documents PDF ou Word (couramment utilisés pour la documentation) et des images (souvent utilisées pour la vignette du complément).
Dans les extraits de script suivants, tout ce qui est personnalisable est en majuscules (par exemple YOUR_ADDIN_NAME).
Tout d’abord, créez la chaîne utilisée dans le fichier addin.def. Vous aurez besoin de votre nom et de votre identifiant de complément. Le nom est ce qui sera affiché dans le menu du complément et l'ID est un identifiant unique pour le complément, généralement affiché au format com.companyname.username.addinname.
//create string for addin.def file
addinDefString = "id=com.YOUR_COMPANY.YOUR_ID.YOUR_ADDIN_NAME
name=YOUR ADDIN NAME
supportJmpSE=0";
Si vous savez que votre complément n'est pris en charge que sur Windows ou Mac, respectivement, vous devez ajouter une ligne à la fin de cette chaîne avec soit :
"host=Win"
Ou
“host=Mac”
Ensuite, créez la chaîne pour votre fichier addin.jmpcust :
addinjmpcustString = "\[<!-- JMP Add-In Builder created --><MENU_AND_TOOLBAR_CUSTOMIZATIONS jm="http://www.jmp.com/ns/menu" version="3">
<INSERT_IN_MAIN_MENU>
<INSERT_IN_MENU>
<NAME>Add-Ins</NAME>
<INSERT_AFTER>
<NAME></NAME>
<COMMAND>
<NAME>YOUR ADDIN NAME</NAME>
Your Addin Name
<ACTION type="path">$ADDIN_HOME(com.YOUR_COMPANY.YOUR_ID.YOUR_ADDIN_NAME)\YOUR_SCRIPT.jsl</ACTION>
<ICON type="none"></ICON>
</COMMAND>
</INSERT_AFTER>
</INSERT_IN_MENU>
</INSERT_IN_MAIN_MENU>
</MENU_AND_TOOLBAR_CUSTOMIZATIONS>]\";
Ensuite, afin de conditionner votre script JSL sous forme de fichier, chargez-le d'abord sous forme de fichier texte :
addinScript = Load Text File("$SOME_PATH\YOUR_ADDIN_NAME.jsl");
Ensuite, écrivez tous vos fichiers dans une archive zip :
//create a ZipArchive to write files to
za = Open("$DOCUMENTS\YOUR_ADDIN_NAME.jmpaddin", zip);
//write all necessary files to ZipArchive (which can also be binary blobs)
za << write("addin.def", addinDefString);
za << write("addin.jmpcust", addinjmpcustString);
za << write("YOUR_ADDIN_NAME.jsl", addinScript);
Enfin, vous pouvez accéder au dossier dans lequel vous avez enregistré vos fichiers et voir votre complément, qui peut être installé par double-clic.
J'ai également créé une version plus « à remplir » du script, au cas où vous souhaiteriez automatiser la création de votre complément (si vous devez en créer plusieurs et avoir des noms de variables pour le nom de votre complément, vos fichiers, répertoire, etc.), qui se trouve ci-dessous.
Les deux noms de variables utilisés dans le script sont addinName et dir, qui sont définis comme suit :
Nom du complément : le nom de votre complément sous forme de chaîne, avec des espaces et une majuscule du titre comme vous souhaitez qu'il apparaisse dans le menu du complément (par exemple "JMP to R Add-In Builder")
dir : le répertoire sous lequel vous souhaitez enregistrer votre complément
addinDefStr = "id=com.YOUR_COMPANY.YOUR_ID" || addinName || "\!n name=" || addinName || "\!n supportJmpSE=0";
addinjmpcustStr = "\[<!-- JMP Add-In Builder created --><MENU_AND_TOOLBAR_CUSTOMIZATIONS jm="http://www.jmp.com/ns/menu" version="3">
<INSERT_IN_MAIN_MENU>
<INSERT_IN_MENU>
<NAME>Add-Ins</NAME>
<INSERT_AFTER>
<NAME></NAME>
<COMMAND>
<NAME>]\" || uppercase(addinName) || "\[</NAME>
]\" || addinName || "\[
<ACTION type="path">$ADDIN_HOME(com.jmp.]\" || lowercase(regex(addinName, "\s", "", globalreplace)) || "\[)\]\" || addinName || "\[.jsl</ACTION>
<ICON type="none"></ICON>
</COMMAND>
</INSERT_AFTER>
</INSERT_IN_MENU>
</INSERT_IN_MAIN_MENU>
</MENU_AND_TOOLBAR_CUSTOMIZATIONS>]\";
addinScript = Load Text File("$SOME_PATH\YOUR_ADDIN_NAME.jsl");
//create a ZipArchive to write files to
za = Open(dir || "/" || addinName || ".jmpaddin", zip);
//write all necessary files to ZipArchive (which can also be binary blobs)
za << write("addin.def", addinDefStr);
za << write("addin.jmpcust", addinjmpcustStr);
za << write(addinName || ".jsl", addinScript);
J'espère que ces scripts pourront vous aider à rendre vos projets de création de compléments plus fluides !
Vous pouvez essayer edit->encrypt sur votre (vos) script(s). Faites quelques tests et soyez prêt à retravailler du JSL. Si vous ne disposez que d'un petit morceau de code secret, envisagez de le déplacer vers son propre fichier d'inclusion et de chiffrer uniquement cela. Le reste du code fonctionnera normalement.
Un script chiffré a du mal à se regarder ; si vous utilisez la manipulation d'expressions ou convertissez des expressions en chaînes, attendez-vous à une réécriture. Utiliser afficher les globales (); après l'exécution de votre script pour avoir une idée de ce qui pourrait fuir.
Conservez votre version en texte brut dans un endroit sûr !
Un complément JMP (.jmpaddin) est un fichier Zip (.zip). Les trois composants minimum d'un complément JMP sont les fichiers addin.def et addin.jmpcust, ainsi que le script JSL qui s'exécutera lorsque le complément sera utilisé.
Nous souhaitons fournir un complément à un fournisseur, mais souhaitons que le code qui lui est associé reste secret. La déclaration ci-dessus suggère que le code serait visible. Existe-t-il un moyen de créer un complément sous forme binaire afin qu'il ne puisse pas (facilement) faire l'objet d'une ingénierie inverse ?
@vince_faller , le « SE » dans « supportJmpSE » signifie « Student Edition », vous n'avez donc besoin que de le définir sur 1 si vous avez besoin que le complément fonctionne avec JMP Student Edition.
Qu'est-ce que supportJmpSE ?
Merci d'avoir mis tout ça ensemble, Julia !
Je voulais juste ajouter quelques options supplémentaires que vous pouvez ajouter au fichier addin.def.
- addinVersion - le numéro de version qui apparaît dans la boîte de dialogue Affichage > Compléments....
- minJmpVersion : la version minimale de JMP sur laquelle le complément peut être installé.
- maxJmpVersion - la version maximale de JMP le complément peut être installé.
addinVersion=1.3
minJmpVersion=12
maxJmpVersion=13
Et si vous souhaitez utiliser l'une des icônes intégrées de JMP pour un élément de menu dans votre complément, consultez mon Icônes JMP intégrées complément pour les noms d’icônes et utilisez le format ci-dessous dans le fichier addin.jmpcust.
<jm:icon type="builtin">JMPProSmall</jm:icon>