Grabaciones y archivos: Scripters Club sobre acceso a datos, JMP Roasting y consejos y trucosVídeo 1 Acceso a datos de @Georg
Este vídeo se está procesando actualmente. Inténtalo de nuevo en unos minutos.
(ver en Mis Videos)
Comentarios:
- Aunque todavía falta documentación y su uso puede resultar un poco complicado, te sugiero que lo uses, ya que es el método preferido y admite (y admite) conectores.
- También hay un "símbolo" queryResult al que puede acceder al completar la ejecución, que debería ser la referencia a la tabla resultante
- Utilice siempre < << run foreground and do not rely on which is determined by user preferences< pan>

Vídeo 2: JMP Roasting fro, @jthi
Este vídeo se está procesando actualmente. Inténtalo de nuevo en unos minutos.
(ver en Mis Videos)
Comentarios:
- Recomendaría mirar en el índice de scripts cómo funciona bien el comando de nueva ventana en diferentes modos, hay ejemplos para la mayoría de las variantes (modal, informe, ...)
- De acuerdo, hay ejemplos, pero no siempre son tan útiles como me gustaría. Casi siempre que uso NewWindow(), quiero hacer algo para lo que no hay un ejemplo similar. He encontrado ejemplos realmente útiles para NewWindow() mientras buscaba en la comunidad.
- Por favor, añadan también la posibilidad de añadir ejemplos. Hay ejemplos muy útiles en la comunidad. Creo que no tiene sentido inundar el índice de scripts con todos los ejemplos. Pero nos ayudará mucho si tenemos la posibilidad de añadir ejemplos útiles a NUESTRO índice de scripts.
- Aquí está el comienzo de la entrada de la lista de deseos:
Vídeo 3: Consejos y trucos de @jthi
Este vídeo se está procesando actualmente. Inténtalo de nuevo en unos minutos.
(ver en Mis Videos)
Publicación para sugerencias:
Re: Grabaciones y archivos: Scripters Club sobre acceso a datos, JMP Roasting y consejos y trucosMi material adjunto
Re: Grabaciones y archivos: Scripters Club sobre acceso a datos, JMP Roasting y consejos y trucos¡Bravo! Es sorprendente cómo estas sesiones siguen siendo fuentes de conocimiento inmediatamente útil desde su inicio en 2023.
Me pregunto si existe una opinión sobre SQL dentro de la función JSL Open Database(). Estamos usando una implementación de BigQuery de Google para el almacenamiento de datos. Dentro de BigQuery, es posible desarrollar y depurar consultas SQL que se pueden copiar y pegar directamente en Open Database() como se muestra a continuación. La posibilidad de concatenar palabras clave SQL o marcas de tiempo en SQL también parece muy útil.
Names Default to Here(1);
start = "'2025-02-18 00:00:00'";
stop = "'2025-02-18 01:00:00'";
dt = Open Database( "DSN_name", "
SELECT
time,
tagname,
value
FROM
`bq_project.dataset.table`
WHERE
time BETWEEN TIMESTAMP("|| start ||") AND TIMESTAMP("|| stop ||")
AND tagname IN(
'tag_1',
'tag_2'
)"
);
Re: Grabaciones y archivos: Scripters Club sobre acceso a datos, JMP Roasting y consejos y trucosMi sugerencia sería utilizar una nueva consulta SQL (sé que es bastante horrible, pero es el método preferido) y utilizar una plantilla SQL para luego evaluarla mediante Eval Insert. A continuación, se muestra un ejemplo:
Names Default to Here(1);
MY_CONNECTOR = "ODBC:...";
start = "'2025-02-18 00:00:00'";
stop = "'2025-02-18 01:00:00'";
sql_template = "\[
SELECT
time,
tagname,
value
FROM
`bq_project.dataset.table`
WHERE
time BETWEEN TIMESTAMP(¤start¤) AND TIMESTAMP(¤stop¤)
AND tagname IN(
'tag_1',
'tag_2'
)
]\";
sql_str = Eval Insert(sql_template, "¤");
// Write("\!N", sql_str);
obj = New SQL Query(
Connection(MY_CONNECTOR),
Custom SQL(sql_str),
Query Name("mytable")
);
dt = obj << Run Foreground();
Write();
Puede utilizar una idea de plantilla similar para otros métodos que no sean Nueva consulta SQL (como Abrir base de datos()).
Utilizo el carácter especial "¤" en mi Eval Insert() porque el "^" predeterminado se encuentra comúnmente, por ejemplo, en Regex y causará problemas durante la evaluación.
Editar: Se corrigieron algunos errores tipográficos, se mejoró el lenguaje y se agregó un comentario sobre "¤"
Re: Grabaciones y archivos: Scripters Club sobre acceso a datos, JMP Roasting y consejos y trucos¡Gracias @jthi por la presentación tan útil! Me inspiró a reescribir una ventana modal creada dinámicamente para evitar el uso de cadenas y usar su método XPath para extraer resultados.
Sin embargo, encontré una cosa que no pude evitar al analizar cadenas: quiero incluir comandos XPath dentro de la ventana modal, pero es necesario crearla dinámicamente.
Quiero crear una casilla de verificación que controle si un cuadro de edición de texto está habilitado o no, sin embargo, no sé cuántos pares de cuadros de edición de texto/casillas de verificación habrá:
rc_list = Lineup Box( N Col( 3 ) );
rc_list << append( Text Box( "Current", <<SET font=""></SET>
Is there a way of doing this so I don't need to parse JSL strings? Or is there a better way to do this modal recode?
<BR /><P>Mi código completo está aquí:</P><DIV class="lia-spoiler-container"><A class="lia-spoiler-link" href="#" rel="nofollow noopener noreferrer" target="_blank">Ver más...</A><NOSCRIPT>(Resaltar para leer)</NOSCRIPT><DIV class="lia-spoiler-border"><DIV class="lia-spoiler-content"><PRE><CODE class=" language-jsl">Names Default To Here( 1 );
// Function to do a simple in-place column recode.
// Uses a modal dialog so can be used as part of a larger script or workflow.
modal_recode = Function( {dt, col},
{default local},
Summarize( dt, orig_vals = By( col ) );
rc_list = Lineup Box( N Col( 3 ) );
rc_list << append( Text Box( "Current", <<SET font=""></SET></CODE><NOSCRIPT><CODE class=" language-jsl"><DIV class="lia-spoiler-noscript-container"><DIV class="lia-spoiler-noscript-content">Nombres Predeterminado Aquí( 1 ); // Función para hacer una recodificación de columna simple en el lugar. // Utiliza un diálogo modal, por lo que se puede utilizar como parte de un script o flujo de trabajo más grande. modal_recode = Function( {dt, col}, {default local}, Summarize( dt, orig_vals = By( col ) ); rc_list = Lineup Box( N Col( 3 ) ); rc_list << append( Text Box( "Actual", < <SET font=""></SET></DIV></DIV>Re: Grabaciones y archivos: Scripters Club sobre acceso a datos, JMP Roasting y consejos y trucosEn este caso, no utilizaría << XPath, sino este << prev sib. Supongo que esto hace lo que estás buscando:
Así que en lugar de
Eval(
Parse(
"\[rc_list << append( check box( "", <<SET function=""></SET>
<P>Podrías hacer algo como esto</P>
<CODE class=" language-jsl">rc_list << Append(Check Box("", << Set Function(function({this},
(this << prev sib) << Enabled(this << get);
))));
Código completo
Ver más...
Names Default To Here(1);
// Function to do a simple in-place column recode.
// Uses a modal dialog so can be used as part of a larger script or workflow.
modal_recode = Function({dt, col},
{default local},
Summarize(dt, orig_vals = By(col));
rc_list = Lineup Box(N Col(3));
rc_list << append(Text Box("Current", <<SET font=""></SET>
</CODE><NOSCRIPT><CODE class=" language-jsl"><DIV class="lia-spoiler-noscript-container"><DIV class="lia-spoiler-noscript-content">Nombres Predeterminado Aquí(1); // Función para realizar una recodificación de columna simple en el lugar. // Utiliza un cuadro de diálogo modal, por lo que se puede utilizar como parte de un script o flujo de trabajo más grande. modal_recode = Function({dt, col}, {default local}, Summarize(dt, orig_vals = By(col)); rc_list = Lineup Box(N Col(3)); rc_list << append(Text Box("Current", < <SET font=""></SET></DIV></DIV>
<P>Si realmente desea utilizar XPath para esto, puede calcular dinámicamente el índice. Por ejemplo, puede obtener todos los CheckBoxBoxes y luego usar Contains con <EM>esto</EM> para obtener el índice y luego usar ese índice.</P>
<CODE class=" language-jsl">idx = Contains(rc_list << XPath("//CheckBoxBox"), this); Re: Grabaciones y archivos: Scripters Club sobre acceso a datos, JMP Roasting y consejos y trucos¡Gracias @jthi ! El enfoque anterior de sib me funciona. Necesito cambiar la forma en que pienso naturalmente sobre cómo se construyen las ventanas JMP y cómo se pueden manipular.
Re: Grabaciones y archivos: Scripters Club sobre acceso a datos, JMP Roasting y consejos y trucosHe cambiado mi forma de pensar muchas veces y todavía lo hago de vez en cuando. Creo que generalmente utilizo cuatro métodos diferentes (y combinaciones de ellos) según la situación:
- XPath
- Si quiero recopilar resultados de varias cosas al presionar un botón
- Recopilar las referencias a la lista/matriz asociativa
- A veces es fácil recopilar la referencia a un objeto.
- << Establecer función(función(this()))
- Generalmente para controlar algunas acciones, como en tu caso enable(0/1). No suelo actualizar ningún valor de variable con esto
- Evaluación de referencia
- No hay ejemplos específicos, tal vez cuando por alguna razón construir la "ruta" con XPath o usar esto se vuelve molesto y todavía necesito la referencia (a veces en clases o funciones que devuelven una nueva ventana)
Ejemplo de evaluación de referencia
rc_list << append(teb = Text Edit Box(Char(orig_vals[i]), <<ENABLED></ENABLED>
<BR />
<BR />Re: Grabaciones y archivos: Scripters Club sobre acceso a datos, JMP Roasting y consejos y trucosSolo puedo dar una cierta cantidad de elogios por cada respuesta. Gracias, @jthi , de verdad.