Hola,
He estado usando el generador de consultas y el generador de gráficos para armar algunos scripts que extraen datos constantemente de un servidor, trazan y guardan resultados (en JMP 13). Recientemente, he estado tratando de vincular varios de estos scripts en un solo script que los ejecute todos a la vez usando include(), que funciona bien. El problema al que me enfrento ahora es que todos los directorios han sido codificados y me gustaría usar algo como: Obtener directorio predeterminado () para que esta colección más amplia de secuencias de comandos se pueda mover a otras computadoras.
Desafortunadamente, me he encontrado con los siguientes problemas:
-Cuando se usa Get Default Directory() dentro del 'Post-Query Script', devuelve '/ ' , sin importar dónde se guarde este script.
-Al guardar tablas/gráficos de datos creados en el script posterior a la consulta de variables, esas variables no parecen existir (o no son accesibles) fuera del
script posterior a la consulta.
-Cualquier variable creada fuera del script posterior a la consulta no se puede usar dentro de él.
// 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 );
¿Alguna idea?
Debería considerar crear un complemento para su aplicación.Eso resolverá su problema de dónde se encuentran los archivos.Un complemento asocia un alias con una ubicación de archivo.Si el "alias" de su complemento es com.company.dept.mygreatapp, puede hacer referencia a archivos como este:
include("$ADDIN_HOME(com.company.dept.mygreatapp)\DoSomethingGreat.jsl");Su publicación contiene varios elementos para abordar:
- Si está trabajando en Windows, Get Default Directory() no obtiene el último directorio utilizado. Si su programa lo solicita, use Establecer directorio predeterminado, luego Obtener directorio predeterminado () devolverá este valor.
- Recomiendo usar un espacio de nombres o una matriz asociativa global para mantener referencias/variables.Si se está ejecutando más de una instancia de su programa a la vez, conviértalo en un espacio de nombres anónimo, de modo que sea único para cada instancia.Para una matriz asociativa, ::varRef_aa = Associative Array(); ::varRef_aa << Establecer valor predeterminado (-9999); Luego, en su secuencia de comandos, especifique ::varRef_aa[a] = 1; Una ventaja de usar un NameSpace es que un Clear Globals() no deseado no elimina el espacio de nombres ni su contenido.
- No soy fanático de Guardar presentación porque cada objeto se guarda en una página diferente y hay muy poco control para escalar. Yo uso un programa externo gratuito llamado P3ICLI . Por lo general, creo un directorio de salida, único para la tarea o el informe, luego guardo la vista que quiero en una imagen en ese directorio. Menciono su método, porque al guardar el resultado que desea, como diapositiva 1, 2, etc., usted puede use Guardar presentación, creando una lista de archivos en Directorio () para ese directorio guardado, y en un bucle for agregándolos a su PPTX usando Guardar presentación. Además, al guardar una imagen, puede tener una visualización de múltiples objetos guardada y, al usar Guardar presentación, todos los elementos están en la misma página.Ofrece cierto control del informe PPTX.
Finalmente, sí, es molesto que Open Database (connect_str, ...) y Create Database Connection (connect_str) puedan usar la misma cadena de conexión que requiere la barra inclinada final, pero New SQL Query() requiere que se elimine la barra inclinada final y un prefijo de ODBC: si se conecta a una base de datos.
//--- 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 algunas ideas.
Agregando otro ejemplo:
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
No se puede acceder a la creación de una variable dentro de Run() fuera de Run()