I componenti aggiuntivi JMP rappresentano un'ottima aggiunta alle funzionalità principali di JMP e, a volte, potresti trovarti a dover automatizzare la creazione di componenti aggiuntivi con JSL. Ho lavorato con la creazione automatizzata di componenti aggiuntivi durante la creazione del mio componente aggiuntivo JMP, the Generatore di componenti aggiuntivi personalizzati da JMP a R . Ecco un ingegnoso trucco JSL per la creazione automatica di componenti aggiuntivi.
Il codice in questo tutorial è adattato da uno splendido script scritto da @Justin_Chilton , che ha costruito il Generatore di componenti aggiuntivi personalizzati .
Un componente aggiuntivo JMP (.jmpaddin) è un file Zip (.zip). I tre componenti minimi di un componente aggiuntivo JMP sono i file addin.def e addin.jmpcust, nonché lo script JSL che verrà eseguito quando il componente aggiuntivo è in uso. Puoi aggiungere ulteriori file come desideri, ad esempio altri script JSL, tabelle JMP, documenti PDF o Word (comunemente utilizzati per la documentazione) e immagini (spesso utilizzate per la miniatura del componente aggiuntivo).
Nei seguenti estratti di script, tutto ciò che è personalizzabile è in lettere maiuscole (ad esempio YOUR_ADDIN_NAME).
Innanzitutto, crea la stringa utilizzata nel file addin.def. Avrai bisogno del nome e dell'ID del componente aggiuntivo. Il nome è ciò che verrà visualizzato nel menu del componente aggiuntivo e l'ID è un identificatore univoco per il componente aggiuntivo, comunemente visualizzato nel formato com.nomeazienda.nomeutente.nomeaddin.
//create string for addin.def file
addinDefString = "id=com.YOUR_COMPANY.YOUR_ID.YOUR_ADDIN_NAME
name=YOUR ADDIN NAME
supportJmpSE=0";
Se sai che il tuo componente aggiuntivo è supportato solo su Windows o Mac, rispettivamente, dovresti aggiungere una riga alla fine di questa stringa con:
"host=Win"
O
“host=Mac”
Successivamente, crea la stringa per il tuo file 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>]\";
Quindi, per comprimere il tuo script JSL come file, caricalo prima come file di testo:
addinScript = Load Text File("$SOME_PATH\YOUR_ADDIN_NAME.jsl");
Quindi, scrivi tutti i tuoi file in un archivio 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);
Infine, puoi accedere alla cartella in cui hai salvato i file e vedere il tuo componente aggiuntivo, che può essere installato con un doppio clic.
Ho anche creato una versione più "riempi gli spazi vuoti" dello script, nel caso in cui desideri automatizzare la creazione del componente aggiuntivo (se devi crearne più e avere nomi variabili per il nome del componente aggiuntivo, file, directory, ecc.), che è riportato di seguito.
I due nomi di variabile utilizzati nello script sono addinName e dir, definiti come segue:
addinName : il nome del componente aggiuntivo come stringa, con spazi e maiuscole del titolo, come desideri che venga visualizzato nel menu del componente aggiuntivo (ad esempio "JMP to R Add-In Builder")
dir : la directory in cui desideri salvare il componente aggiuntivo
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);
Spero che questi script possano aiutarti a rendere più fluidi i tuoi progetti di creazione di componenti aggiuntivi!
Puoi provare modifica->crittografa sui tuoi script. Esegui alcuni test e preparati a rielaborare parte di JSL. Se hai solo una piccola porzione di codice segreto, considera di spostarlo nel proprio file di inclusione e crittografarlo. Il resto del codice verrà eseguito normalmente.
Uno script crittografato ha difficoltà a guardare se stesso; se usi la manipolazione delle espressioni o converti le espressioni in stringhe, aspettati una riscrittura. Utilizzo mostra globali(); dopo l'esecuzione dello script per avere un'idea di cosa potrebbe perdere.
Conserva la tua versione in testo semplice in un posto sicuro!
Un componente aggiuntivo JMP (.jmpaddin) è un file Zip (.zip). I tre componenti minimi di un componente aggiuntivo JMP sono i file addin.def e addin.jmpcust, nonché lo script JSL che verrà eseguito quando il componente aggiuntivo è in uso.
Vorremmo fornire un componente aggiuntivo a un fornitore, ma vorremmo che il codice ad esso associato fosse mantenuto segreto. La dichiarazione di cui sopra suggerisce che il codice sarebbe visualizzabile. Esiste un modo per creare un componente aggiuntivo in formato binario in modo che non possa (facilmente) essere decodificato?
@vince_faller , "SE" in "supportJmpSE" sta per "Student Edition", quindi è necessario impostarlo su 1 solo se è necessario che il componente aggiuntivo funzioni con JMP Student Edition.
Grazie per aver messo insieme tutto, Julia!
Volevo solo aggiungere qualche altra opzione che puoi aggiungere al file addin.def.
- addinVersion: il numero di versione visualizzato nella finestra di dialogo Visualizza > Componenti aggiuntivi....
- minJmpVersion: la versione minima di JMP in cui è possibile installare il componente aggiuntivo.
- maxJmpVersion: la versione massima di JMP è possibile installare il componente aggiuntivo.
addinVersion=1.3
minJmpVersion=12
maxJmpVersion=13
E se sei interessato a utilizzare una delle icone integrate di JMP per una voce di menu nel tuo componente aggiuntivo, consulta il mio Icone JMP integrate componente aggiuntivo per i nomi delle icone e utilizzare il formato seguente nel file addin.jmpcust.
<jm:icon type="builtin">JMPProSmall</jm:icon>