Integrazione di uno script Query Builder (con uno script post-query) in un altro scriptCiao,
Ho utilizzato il generatore di query e il generatore di grafici per mettere insieme alcuni script che estraggono costantemente i dati da un server, tracciano e salvano i risultati (in JMP 13). Di recente, ho provato a collegare molti di questi script in un singolo script che li esegue tutti contemporaneamente utilizzando Include(), che funziona correttamente. Il problema che sto affrontando ora è che tutte le directory sono state hardcoded e mi piacerebbe usare qualcosa come: Get Default Directory() in modo che questa più ampia raccolta di script possa essere spostata su altri computer.
Purtroppo ho riscontrato i seguenti problemi:
-Quando Get Default Directory() viene utilizzato all'interno dello 'Post-Query Script' restituisce '/ ' , indipendentemente da dove questo script è salvato.
-Quando si salvano tabelle/grafici di dati creati nello script post-query che nelle variabili, tali variabili non sembrano esistere (o non sono accessibili) al di fuori del
script post-interrogazione.
-Qualsiasi variabile creata al di fuori dello script post-query non può essere utilizzata al suo interno.
// Main File
directory = Get Default Directory();
fileNames = Files In Directory( directory );
For( iFile = 1, iFile <= N Items( fileNames ), iFile++,
filename = fileNames[iFile];
If( Ends With( filename, ".jsl" ),
Include( directory || script_folder || filename, invisible );
);
);
// Example Post-Query File section
gb = Graph Builder(
// graph details
);
// directory = Get Default Directory(); // Another method attempted
myPath = directory || "Report\";
myName = "Example";
fileName = myPath || myName || ".pptx";
myTemplate = directory || "Template.pptx";
Report( gb ) << save presentation( fileName, Template( myTemplate ), Outline Titles( "Hide" ) );
gb << close window;
Close All( data tables );
qualche idea?
ScriptingRi: Integrazione di uno script Query Builder (con uno script post-query) in un altro scriptDovresti prendere in considerazione la creazione di un componente aggiuntivo per la tua applicazione.Ciò risolverà il tuo problema di dove si trovano i file.Un componente aggiuntivo associa un alias a un percorso di file.Se il tuo addin "alias" è com.company.dept.mygreatapp, puoi fare riferimento a file come questo:
include("$ADDIN_HOME(com.company.dept.mygreatapp)\DoSomethingGreat.jsl");Ri: Integrazione di uno script Query Builder (con uno script post-query) in un altro scriptIl tuo post contiene diversi elementi da affrontare:
- Se stai lavorando su Windows, Ottieni la directory predefinita(), non utilizza l'ultima directory. Se il programma lo richiede, utilizzare Set Default Directory, quindi Get Default Directory() restituirà questo valore.
- Raccomando di utilizzare uno spazio dei nomi o un array associativo globale, per mantenere riferimenti/variabili.Se più di un'istanza del tuo programma è in esecuzione contemporaneamente, rendilo uno spazio dei nomi anonimo, in modo che sia univoco per ogni istanza.Per un array associativo, ::varRef_aa = Associative Array(); ::varRef_aa << Imposta valore predefinito (-9999); Quindi nel tuo script specifica ::varRef_aa[a] = 1; Un vantaggio dell'utilizzo di un NameSpace è che un Clear Globals() involontario non elimina lo spazio dei nomi né il suo contenuto.
- Non sono un fan di Salva presentazione perché ogni oggetto viene salvato su una pagina diversa e c'è pochissimo controllo per il ridimensionamento. Uso un programma esterno gratuito chiamato P3ICLI . Quindi, in genere, creo una directory di output, univoca per l'attività o il report, quindi salvo la vista che desidero in un'immagine in quella directory. Sto menzionando il suo metodo, perché salvando l'output che desideri, come diapositiva 1, 2, ecc., tu potere usa Salva presentazione, creando un elenco di file in Directory () per quella directory salvata e in un ciclo for aggiungendoli al tuo PPTX usando Salva presentazione. Inoltre, salvando un'immagine, potresti avere una visualizzazione multi-oggetto, salvata e quando usi Salva presentazione, tutti gli elementi sono sulla stessa pagina.Offre un certo controllo del rapporto PPTX.
Infine, sì, è fastidioso che Open Database(connect_str, ...) e Create Database Connection(connect_str) possano utilizzare la stessa stringa di connessione che richiede la barra finale, tuttavia New SQL Query() richiede la rimozione della barra finale e un prefisso di ODBC: se ci si connette a un database.
//--- Method 3: New SQL Query platform script -----------------------------------
//remove the trailing slash on importpath
importnoslash = substr(connect_str, 1, length(connect_str)-1 );
nconnect = "ODBC:" || importnoslash
Solo alcune idee.
Ri: Integrazione di uno script Query Builder (con uno script post-query) in un altro scriptAggiungo un altro esempio:
dir = Get Default Directory();
query = Open( dir || "query.jmpquery", Private );
query << Run(
On Run Complete(
queryResult << // some function
a = 1
)
);
Write( a ); // variable is unknown
La creazione di una variabile all'interno di Run() non è accessibile al di fuori di Run()