JSL Identifica il percorso dello script attualmente in esecuzioneQuando si esegue uno script (dalla finestra dello script o attivandolo dal componente aggiuntivo) vorrei essere in grado di (1) ottenere la posizione della directory in cui si trova la finestra dello script o (2) ottenere il id del componente aggiuntivo che contiene lo script. JMP lo sa perché ha dovuto aprire lo script per avviare l'esecuzione. C'è un modo per fare questo?
So che posso farlo in un contesto aggiuntivo usando $ADDIN_HOME(id). Il problema qui è che ho un'inclusione comune che sto impacchettando in più componenti aggiuntivi e preferirei non dover modificare il file per ogni componente aggiuntivo diverso. Posso vedere me stesso fare accidentalmente una copia dell'inclusione comune dal componente aggiuntivo n. 1 al componente aggiuntivo n. 2 e dimenticare di modificare l'id nell'inclusione in modo che utilizzi il percorso corretto nel componente aggiuntivo n.
Re: JSL Identifica il percorso dello script attualmente in esecuzioneC'è anche una funzione integrata per tradurre tra il delimitatore di percorso POSIX e Windows:

Re: JSL Identifica il percorso dello script attualmente in esecuzioneGrazie Jeff, è fantastico!
Ho trovato un'altra soluzione però: ho salvato il mio script nella stessa directory della tabella dati corrente, quindi ottengo il percorso del mio datatable:
dt = Current Data Table();
path = dt<< getpath;
Il "percorso" risultante è il percorso della mia directory con barre all'indietro
Re: JSL Identifica il percorso dello script attualmente in esecuzioneMi piace la soluzione di Jeff. Ma esiste anche una funzione di utilità dedicata a questo scopo. Ecco un esempio:
Convert File Path( "$HOME", Windows );
Può fare di più che cambiare il formato da POSIX a Windows. Vedere Guida > Indice di scripting > Funzioni > POSIX.
Re: JSL Identifica il percorso dello script attualmente in esecuzioneJMP e JSL non si preoccupano dell'orientamento delle barre. Funzioneranno in entrambi i modi.
Se è necessario utilizzare la stringa del percorso al di fuori di JMP, è possibile utilizzare Sostituisci in ():
foo="c:/my directory/my directory/my directory";
substitute into(foo, "/", "\");
show(foo);
Re: JSL Identifica il percorso dello script attualmente in esecuzioneLa soluzione non funziona per me, il percorso risultante è con barre in avanti /, ne ho bisogno con barra all'indietro \. Qualcuno conosce una soluzione?
Re: JSL Identifica il percorso dello script attualmente in esecuzioneOttieni la directory predefinita combinata con l'individuazione del file DEF sembra che funzionerebbe ma sembra un hack scomodo.Probabilmente ne vale la pena: ho un file di inclusione standard per tutte le mie definizioni di percorso file ma con revisioni separate per ogni componente aggiuntivo (ovvero lo stesso problema che descrivi), quindi essere in grado di scoprire dinamicamente l'ID del componente aggiuntivo principale sarebbe estremamente utile caratteristica.Tanto che l'hack inizia a sembrare attraente: non avevo pensato di leggere il file DEF ...
Re: JSL Identifica il percorso dello script attualmente in esecuzioneIn genere utilizzo la funzione Ottieni directory predefinita o la funzione Converti percorso file con una stringa vuota per ottenere il percorso dello script corrente.
path1 = Get Default Directory();
path2 = Convert File Path( "" );
Show( path1, path2 );
Ecco il registro quando eseguo questo script da un file che si trova nella mia cartella "C:\Public":
path1 = "/C:/Public/";
path2 = "/C:/Public/";
Re: JSL Identifica il percorso dello script attualmente in esecuzioneSe non riesco a ottenere che com.cmpny.dept.addin1 lo chiami e NON utilizzo l'approccio comune del componente aggiuntivo suggerito da pmroz, allora sapere in quale cartella si trovava lo script è abbastanza buono perché posso aprire il componente aggiuntivo .def dalla stessa cartella ed estrai l'id da lì.
Questo in realtà mi dà una seconda potenziale applicazione. Se riesco a entrare in addin.def di un componente aggiuntivo attualmente in esecuzione (ma in questo momento non riesco a farlo), potrei eseguire un controllo della versione ottenendo l'id e addinVersion da addin.def e quindi confrontare che a un elenco delle ultime versioni dei componenti aggiuntivi che potrei ottenere utilizzando Internet Open. Potrei quindi scoprire se l'addinVersion locale dell'utente è l'ultimo e il migliore.
Re: JSL Identifica il percorso dello script attualmente in esecuzioneSì, ma desidero includere una riga in General Functions.jsl che identifichi quale altro componente aggiuntivo chiama una funzione in General Functions.jsl.
In altre parole, in com.cmpny.dept.addin1 uno script potrebbe chiamare una funzione in General Functions.jsl. Voglio fare riferimento a una variabile in General Functions.jsl che rivelerà che com.cmpny.dept.addin1 l'ha chiamata.
Re: JSL Identifica il percorso dello script attualmente in esecuzionePerché non rendere il file di inclusione comune il proprio componente aggiuntivo.In questo modo puoi includerlo tramite qualcosa come:
// Load functions common to various apps
include("$ADDIN_HOME(com.cmpny.dept.common)\General Functions.jsl");