Creare componenti aggiuntivi dall'applicazione? Ottenere il percorso dell'app?C'è un modo per creare un componente aggiuntivo da un'applicazione che ho creato? L'applicazione è abbastanza complessa e tutto ciò che vorrei fare è raggrupparla in un componente aggiuntivo. Inoltre, questo problema potrebbe essere risolto se qualcuno può aiutarmi a risolvere il seguente problema:
Ho creato un'applicazione e l'ho in una cartella (myApp/) e ho degli script che vorrei includere() dalla directory di origine (myApp/src/). Tuttavia, quando provo a ottenere la directory predefinita () dall'app, restituisce "/", che non mi consentirà di trovare la cartella di origine se l'applicazione fosse eseguita su un altro computer. C'è un modo per interrogare la posizione dell'app attualmente in esecuzione? In alternativa, esiste un modo per raggruppare i file nell'applicazione in modo da poter accedere in modo affidabile ai miei file (magari tramite una variabile di percorso predefinita)?
I miei tentativi di inserire l'applicazione in un componente aggiuntivo non sono riusciti. Non riesco a eseguire l'app (.jmpappsource o .jmpapp) dal componente aggiuntivo. Inoltre, poiché l'applicazione è abbastanza complessa, non voglio ricostruirla nel generatore di componenti aggiuntivi. C'è un modo per organizzare l'app in un componente aggiuntivo? Sarebbe fantastico se JMP aggiungesse una funzione "Esporta applicazione come componente aggiuntivo" o "Crea componente aggiuntivo da applicazione".
Ri: Creare un componente aggiuntivo dall'applicazione? Ottenere il percorso dell'app?Grazie nascif_jmp per aver condiviso il tuo metodo e grazie ian_jmp per aver condiviso il documento! Entrambi sono stati utili, ma ho optato per un approccio diverso: ristrutturare la mia app/addin. Ecco i passaggi che ho seguito per assicurarmi che la mia applicazione trovasse i suoi file di inclusione, in modo affidabile, su computer diversi.
- Metti tutti i file/cartelle rilevanti per l'applicazione in una cartella (la chiamo directory root dell'app o directory root in breve)
- Usare una variabile di percorso per la directory radice dell'app e i relativi percorsi per fare riferimento a file e directory nell'applicazione.
- Ad esempio, una directory "$appRoot/" che contiene una cartella "src/" con i miei script e una "lib/" con immagini e icone. Mi riferisco a questi come "$appRoot/src/" e "$appRoot/lib/"
- Salva la tua app come file .jmpapp, che si trova da qualche parte nella directory principale dell'app o in una delle sue sottodirectory (non importa dove, purché sia accessibile tramite percorso relativo dalla cartella principale)
- Crea un componente aggiuntivo e sotto i file aggiuntivi, aggiungi la directory root dell'app (jmp importerà anche tutti i suoi file e sottodirectory da includere nel componente aggiuntivo).Questi file si troveranno nella directory del componente aggiuntivo.
- Ora puoi individuare tutti i tuoi file facendo riferimento alla directory del componente aggiuntivo, che si trova in una posizione predefinita su ciascun computer. Questa posizione viene recuperata eseguendo getPathVariable("ADDIN_HOME("My Add In Name")). Usalo per trovare i file e le directory che hai aggiunto nel passaggio precedente. Nello script del componente aggiuntivo, imposta la variabile path sulla directory principale del componente aggiuntivo:
- ADDIN_NAME = "Il mio nome aggiuntivo";
- setPathVariable("appRoot", getPathVariable(evalInsert("ADDIN_HOME(^ADDIN_NAME^)")) || "Directory root dell'app/");
- Imposta altre variabili di percorso relative a questa directory principale
- Eseguire il file dell'applicazione dallo script del componente aggiuntivo utilizzando open("$appRoot/pathToMyApp/myApp.jmpapp");
- Per distribuire la tua applicazione, distribuisci invece il componente aggiuntivo che contiene la tua applicazione insieme ai file necessari
Ri: Creare un componente aggiuntivo dall'applicazione? Ottenere il percorso dell'app?Inoltre, questo documento di Previsione mostrerebbe come gli altri sono riusciti a farlo: Le migliori pratiche in JMP ® Gestione dei componenti aggiuntivi
Ri: Creare un componente aggiuntivo dall'applicazione? Ottenere il percorso dell'app?Ho riscontrato un problema simile quando ho provato a suddividere un framework JSL in più moduli che si includessero l'un l'altro. L'ho risolto aggiungendo il seguente codice al modulo principale:
// 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 );
);
Una volta determinata la posizione dello script nel file system, sono stato in grado di utilizzarlo per trovare e includere le sue dipendenze:
// 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" );