Usando búsqueda de subíndices para Dispatch<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hola, tengo algunos problemas para enviar información a un informe después de que se genera. El informe contiene varias distribuciones, que se crean en un bucle for con índice i. Cada distribución está contenida dentro de su propio cuadro de esquema, por lo que puedo agregar muchas otras cosas dentro de cada cuadro de esquema y agrupar el material relevante. Almaceno una referencia a cada una de estas distribuciones (llamadas distObj ), y puedo cambiarlos dirigiéndolos como distObj [1] << ... etc., pero aquí está el problema: estoy usando cajas de radio ubicadas en el informe, un conjunto de 3 cajas de radio por cuadro de resumen (es decir, por Distribución). Al hacer clic en diferentes botones de radio se escalarán los ejes para el parámetro i'th solo en 1 de 3 maneras diferentes. Una vez que se completa el script, la variable i ya no se asigna a cada cuadro como estaba para cada iteración de for porque se ha incrementado a su valor final. Necesito averiguar en qué conjunto de botones se hizo clic (esencialmente, qué fue 'i') y enviar información de escala límite a la distribución correspondiente. He verificado que funciona si codifico el subíndice pero eso no funcionará.
He intentado algunas cosas, como escribir un cuadro de edición de números con el número i, para que realmente se almacene en el informe, pero todavía tengo problemas al intentar obtener esa variable específica (también debe estar suscrita) .
Hay algo en la guía de scripting que creo que puede ayudarme, pero no sé cómo usarlo. Página 335 de la guía de secuencias de comandos de JMP 10, capítulo Árboles de visualización, subíndices. Sugieren que para una caja de visualización db, JSL puede encontrar un objeto con "texto" usando el código db ["texto"] o db ["¿texto?"] Usando el? como un comodín. La razón por la que creo que esto puede ayudarme es que, en lugar de confiar en un subíndice para el parámetro i'th, simplemente encontraría una coincidencia basada en distObj. Espero obtenerlo para que el botón de radio envíe un comando para buscar y subir un nodo hasta el cuadro de esquema (o permanecer en el mismo nodo), obtener la referencia de db adecuada y enviar el comando desde allí. He intentado hacer que esto funcione, pero tengo que preguntarme si estoy ladrando el árbol equivocado con este.
Aquí está la parte relevante de mi guión. En la sección de la casilla de radio, la variable "Stores_i" también puede ser simplemente "i". Fue una prueba que realmente no funcionó.
¿Algunas ideas?
custRpt = Nueva ventana (titleString,
AnaNotesBox = Cuadro de esquema ("Notas de análisis",
Cuadro de texto (textString1),
)
);
distObj = {};
rb1 = {};
rb2 = {};
rb3 = {};
paramBoxList = {};
Para (i = 1, i <= AdjNumParam, i ++,
custRpt << adjuntar
ParamBoxList = Cuadro de esquema (newYparamName ,
Cuadro de lista V (
hlistbox
rb1 = radioBox ("Método de escala 1", show ("test1"); Stores_i = numBox << Get (valor numérico); show (Stores_i); // <- numbox es justo
distObj [Stores_i] << SendToReport (
Envío(
{}
"1",
ScaleBox,
{Min (newMin [Stores_i], newLSL [Stores_i]), Max (newMax [Stores_i], newUSL [Stores_i]), Inc (2),
Señales menores (1), etiquetas rotadas ("horizontales")}
));
)
rb2 = radioBox ("Método de escala 2", Stores_i = numBox << Get (valor numérico);
distObj [Stores_i] << SendToReport (
Envío(
{}
"1",
ScaleBox,
{Min (newMin [Stores_i]), Max (newMax [Stores_i]), Inc (2),
Señales menores (1), etiquetas rotadas ("horizontales")}
));
)
rb3 = radioBox ("Método de escala 3", Stores_i = numBox << Get (valor numérico);
distObj [Stores_i] << SendToReport (
Envío(
{}
"1",
ScaleBox,
{Min (newLSL [Stores_i]), Max (newUSL [Stores_i]), Inc (2),
Señales menores (1), etiquetas rotadas ("horizontales")}
));
)
numBox = cuadro de edición de número (i), // <- numBox no está subíndulado, por lo que no funcionará
// Stores_i = numBox << Get (valor numérico)
// numParam = numParamVal << Get (valor numérico);
)
rb1 << grupo (rb2 ) << grupo (rb3 )
Cuadro de lista H (
distObj = Distribución (
Y (Lista de evaluación (newYparamName ))),
)
cuadro de salto de página ();
)
)
);
);
Re: Usando búsqueda de subíndices para DispatchUn último seguimiento de este hilo: el problema que anoté anteriormente, donde hacer clic en las casillas de radio en una versión antigua del informe generará un error porque las variables están obsoletas, no es un problema cuando el script se instala como un complemento -en. Tengo "nombres predeterminados aquí (1)" en el archivo .jsl, por lo que no estoy seguro de por qué falló al ejecutar el archivo .jsl directamente. Pero en cualquier caso, pensé que actualizaría este hilo para la posteridad.
Si alguien tiene una respuesta para el manejo general de errores, eso sería apreciado. Estoy buscando algo que sea un error genérico para todos, en caso de que no haya tenido en cuenta alguna información extraña del usuario. Me gustaría que el guión salga con gracia.
Gracias.
Re: Usando búsqueda de subíndices para DispatchNoté un problema potencial en este script, pero solo cuando lo ejecuté más de una vez y dejé abierta una ventana de informe anterior. Las casillas de radio de una instancia anterior del informe enviarán mensajes a la última instancia de la ventana de informe. Para mí tiene sentido por qué sucede esto, pero si el informe se generó en 20 parcelas y la segunda en 3, los primeros 3 conjuntos de botones de radio de la primera ventana enviarán comandos a la última ventana y establecerán Los 4 a 20 botones de radio darán como resultado un error (en mi caso, distObj [4] ... distObj [20] no está definido). ¿Es posible codificar en esa cadena larga de Insert Insert () a qué se refiere distObj, o es demasiado pedir a JSL?
Además, ¿hay un error en el manejo de catchall? Supongo que podría codificar algo en la cadena Eval Insert () para evitar que se muestre el error, pero no sé qué otros errores no controlados pueden estar al acecho. En excel VBA, por ejemplo, usar algo como "on error goto errorHandler" y luego una pequeña rutina "errorHandler:" al final para salir correctamente hará el truco muy bien.
Gracias.
Re: Usando búsqueda de subíndices para DispatchGracias por todas las respuestas MS.
He estado jugando con el código aquí y allá por un par de días, y estoy sintiendo mejor los delimitadores. Me gusta más su código actualizado, y estoy de acuerdo en que Dispatch () está desordenado. Me he convertido al nuevo código.
Pensé que podría ser posible usar "revertir eje" porque aunque no está disponible en el cuadro de diálogo de doble clic, hay una opción para ello cuando haces clic derecho sobre el eje. Pensaría que sería más una función que una configuración booleana. No es un gran trato. Acabo de eliminar la característica de mi script. La razón por esta característica es que JMP puede escalar los ejes mucho más limpios que yo. He intentado varios métodos matemáticos, pero no he encontrado nada que funcione de manera consistente. (He intentado muchos cálculos de USL, LSL, ancho de especificación para configurar el mínimo (), máximo (), inc ()).
Prueba rápida de copiar / pegar JSL en palabra, luego salir de palabra en FF (Win XP). Se ve bien, gracias.
hlb_1 << adjuntar (
Evaluar (
Analizar gramaticalmente (
Eval Insert (
"\ [^" rb1 ["|| char (i) ||"] "^ = radioBox (" Scale to Data + Limits ",
report (distObj [^ i ^]) [AxisBox (1)] << Min (^ minMinLSL_scale ^) << Max (^ maxMaxUSL_scale ^) << Inc (^ inc1_scale ^);
if (nitems (^ groupList ^)> = 1 & groupList [1]! = 0, para (k = 1, k <= nitems (^ groupList ^), k ++,
informe (oneObj [^ i ^]) [AxisBox (1)] << Min (^ minMinLSL_scale ^) << Max (^ maxMaxUSL_scale ^) << Inc (^ inc1_scale ^);
))
)
] \ "
)
)
)
) ;
Re: Usando búsqueda de subíndices para DispatchPreguntas y respuestas
¿Por qué la i en su script obtiene delimitadores '^' pero distObj no?
No funcionó con delimitadores alrededor de distObj. Probablemente porque se necesita una variable que apunte al objeto (por ejemplo, distObj [1]). Totalmente evaluados obtendríamos el elemento de la lista en texto claro, es decir, Distribución [] que no tiene ningún sentido para JMP cuando se analiza la cadena.
¿Hay alguna forma de modificar una sección del código anterior (una de las cajas de radio) para revertir el eje?
No para la plataforma de distribución que parece. No funciona, y si hace doble clic en el eje para invocar el cuadro de diálogo de configuración de ejes, verá que no hay una casilla de verificación Revertir eje.
Además, ¿cuál es tu método para pegar código?
Acabo de copiar y pegar desde el editor JSL en el navegador. En el nuevo foro, la mayor parte del formato se conserva, pero la sangría se pierde en parte. En el foro anterior tuve que pegar primero en MS Word y luego en el navegador, si recuerdo bien. Yo uso JMP 10 para Mac. En Windows puede funcionar de manera diferente.
¿Dónde aprendiste todo esto?
Los estudios personales, muchas pruebas y errores, y ayudar a las personas aquí en el foro me han enseñado mucho.
Por cierto, rara vez uso el método Dispatch (). La sintaxis es complicada y se encuentra principalmente en los scripts generados automáticamente. Mucho más sencillo es enviar mensajes directamente a la pantalla de interés (el comando << mostrar estructura de árbol es útil para averiguar cómo abordar una db específica; aquí intente, por ejemplo, distObj [1] << mostrar estructura de árbol).
Compare esto con su script anterior (solo un extracto):
hlb_1 << adjuntar (
Evaluar (
Analizar gramaticalmente (
Eval Insert (
"\ [rb1 [^ i ^] = radioBox (" Scale method 3 ", informe (distObj [^ i ^]) [AxisBox (1)] << Min (^ newMin ^) << Max (^ nuevoMax ^))] \ "
)
)
)
) ;
Re: Usando búsqueda de subíndices para Dispatch¿Hay alguna forma de modificar una sección del código anterior (una de las cajas de radio) para revertir el eje? Sé que hay un comando de revertir el eje pero parece que no puede hacerlo funcionar, a continuación hay dos intentos.
Además, ¿cuál es tu método para pegar código? ¿Subes un archivo jsl? No he podido duplicar su formato.
hlb_1 << añadir (
Evaluar
Analizar gramaticalmente(
Eval Insert (
"\ [^" rb4 ["|| char (i) ||"] "^ = radioBox (" Revertir eje ",
distObj [^ i ^] << SendToReport (
Envío(
{}
"1",
caja del eje (1),
revertir eje
));
)] \ "
)
/ *
Eval Insert (
"\ [^" rb4 ["|| char (i) ||"] "^ = radioBox (" Revertir eje ",
distObj [^ i ^] [cuadro de eje (1)] << revertir eje;
)] \ "
) * /
)
)
);
Re: Usando búsqueda de subíndices para DispatchHola ms
En primer lugar, muchas gracias por su ayuda. numbox fue un intento de obtener acceso a cualquier instancia de rbx en la que se hizo clic. No funciono
Tuve que cambiar un poco la secuencia de comandos porque mis listas en su bucle-j realmente tienen nombres diferentes, así que necesito que todo esté escrito (ver más abajo). Con estas ediciones, todo funciona perfectamente (hasta ahora). Veremos qué tan bien JMP maneja el cambio de tamaño para varios límites.
Tengo un par de preguntas. ¿Por qué la i en su script obtiene delimitadores '^' pero distObj no? Me tomó un poco para averiguar qué estaban haciendo esos personajes especiales, pero todavía estoy confundido en este punto.
¿Dónde aprendiste todo esto? ¿Auto estudio o entrenamiento formal de JMP a través de SAS?
dtData = Abrir ("$ SAMPLE_DATA / Big Class.jmp");
dtData: edad << tipo de modelado (continuo);
newMin = {12, 50, 64};
newMax = {17, 70, 172};
newLSL = {10, 40, 50};
newUSL = {20, 80, 200};
newLSL2 = {5, 20, 0};
newUSL2 = {25, 100, 300};
newYparamName = {"age", "height", "weight"};
adjNumParam = 3;
{distObj, paramBoxList, rb1, rb2, rb3} = {{}, {}, {}, {}, {}};
custRpt = Nueva ventana ("Título",
AnaNotesBox = Cuadro de esquema ("Notas de análisis",
Cuadro de texto ("Información ..."),
)
);
Para (i = 1, i <= AdjNumParam, i ++,
custRpt << adjuntar
ParamBoxList = Cuadro de esquema (newYparamName ,
vlb = V Cuadro de lista (
hlb_1 = H Cuadro de lista (),
hlb_2 = H Cuadro de lista (
distObj =
Distribución (Y (Eval List (newYparamName ))),
)
Page Break Box ()
)
)
);
// Para (j = 1, j <= 3, j ++,
hlb_1 << añadir (
Evaluar
Analizar gramaticalmente(
Eval Insert (
"\ [^" rb1 ["|| char (i) ||"] "^ = radioBox (" Scale method 1 ",
distObj [^ i ^] << SendToReport (
Envío(
{}
"1",
ScaleBox,
{Min (^ nuevoMin ^), Max (^ nuevoMax ^)}
));
)] \ "
)
)
)
);
hlb_1 << añadir (
Evaluar
Analizar gramaticalmente(
Eval Insert (
"\ [^" rb2 ["|| char (i) ||"] "^ = radioBox (" Scale method 2 ",
distObj [^ i ^] << SendToReport (
Envío(
{}
"1",
ScaleBox,
{Min (^ newLSL ^), Max (^ newUSL ^)}
));
)] \ "
)
)
)
);
hlb_1 << añadir (
Evaluar
Analizar gramaticalmente(
Eval Insert (
"\ [
^ "rb3 [" || char (i) || "]" ^ = radioBox ("Método de escala 3",
distObj [^ i ^] << SendToReport (
Envío(
{}
"1",
ScaleBox,
{Min (^ newLSL2 ^), Max (^ newUSL2 ^)}
));
)] \ "
)
)
)
);
//);
rb1 << grupo (rb2 ) << grupo (rb3 );
);
Re: Usando búsqueda de subíndices para DispatchCuando se crean informes incrementales en un bucle, es importante "cablear" el valor de yo En los displayboxes y sus scripts de acción. Una forma de hacer esto es usar cadenas y luego usar Parse (Evalinsert ("código")) en cada iteración para actualizar y evaluar el código. Aunque no son bonitas, las cadenas de código a menudo facilitan el control de lo que está sucediendo.
A continuación se muestra un intento de hacer que su código de ejemplo funcione mejor. Me salté las cosas numBox porque no pude entender por qué estaba allí.
dtData = Abierto ( "$ SAMPLE_DATA / Big Class.jmp" ) ; dtData : años << tipo de modelado ( continuo ) ;
nuevoMin = { 12 , 15 , 64 } ;
nuevoMax = { 17 , 70 , 172 } ;
nuevoLSL = { 10 , 40 , 50 } ;
nuevoUSL = { 20 , 80 , 200 } ;
nuevoYparamName = { "años" , "altura" , "peso" } ; adjNumParam = 3 ;
{ distObj , paramBoxList , rb1 , rb2 , rb3 } = {{} , {} , {} , {} , {}} ;
custRpt = Nueva ventana ( "Título" ,
AnaNotesBox = Cuadro de esquema ( "Notas de análisis" ,
Caja de texto ( "Información..." ) ,
)
) ;
por ( yo = 1 , yo <= AdjNumParam , yo ++,
custRpt << adjuntar (
ParamBoxList El yo ] = Cuadro de esquema ( nuevoYparamName El yo ] ,
vlb = Cuadro de lista V (
hlb_1 = Cuadro de lista h () ,
hlb_2 = Cuadro de lista h (
distObj El yo ] =
Distribución ( Y ( Lista de evaluación ( nuevoYparamName El yo ] ) ) ) ,
) ,
Page Break Box ()
)
)
) ;
por ( j = 1 , j <= 3 , j ++,
hlb_1 << adjuntar (
Evaluar ( Analizar gramaticalmente ( Eval Insert (
"\ [^" rb "|| char (j) ||" ["|| char (i) ||"] "^ = radioBox (" Scale method "|| char (^ j ^),
distObj [^ i ^] << SendToReport (
Envío(
{}
"1",
ScaleBox,
{Min (^ nuevoMin^), Max (^ nuevoMax^)}
));
)] \ "
)))
)
) ;
rb1 El yo ] << grupo ( rb2 El yo ] ) << grupo ( rb3 El yo ] ) ;
) ;
Re: Usando búsqueda de subíndices para DispatchAquí hay una versión del código anterior que se ejecutará como está, usando big class como un archivo de ejemplo. Nuevamente, el valor storage_i no se está actualizando, y el truco es averiguar cuál de los SET de cajas de radio está enviando el comando. Estaría agradecido por cualquier sugerencia.
borrar registro();
los nombres predeterminados aquí (1);
Globos claros ();
dtData = Abrir ("$ SAMPLE_DATA / Big Class.jmp");
// dtData = tabla de datos ("Big Class.jmp");
// show (dtData);
newMin = {12, 15, 64};
newMax = {17, 70, 172};
newLSL = {10, 40, 50};
newUSL = {20, 80, 200};
newYparamName = {"age", "height", "weight"};
adjNumParam = 3;
custRpt = Nueva ventana ("Título",
AnaNotesBox = Cuadro de esquema ("Notas de análisis",
Cuadro de texto ("Información ..."),
)
);
distObj = {};
rb1 = {};
rb2 = {};
rb3 = {};
paramBoxList = {};
Para (i = 1, i <= AdjNumParam, i ++,
custRpt << adjuntar
ParamBoxList = Cuadro de esquema (newYparamName ,
Cuadro de lista V (
hlistbox
rb1 = radioBox ("Método de escala 1", show ("test1"); Stores_i = numBox << Get (valor numérico); show (Stores_i); // <- numbox es justo
distObj [Stores_i] << SendToReport (
Envío(
{}
"1",
ScaleBox,
{Min (newMin [Stores_i], newLSL [Stores_i]), Max (newMax [Stores_i], newUSL [Stores_i]), Inc (2),
Señales menores (1), etiquetas rotadas ("horizontales")}
));
)
rb2 = radioBox ("Método de escala 2", Stores_i = numBox << Get (valor numérico);
distObj [Stores_i] << SendToReport (
Envío(
{}
"1",
ScaleBox,
{Min (newMin [Stores_i]), Max (newMax [Stores_i]), Inc (2),
Señales menores (1), etiquetas rotadas ("horizontales")}
));
)
rb3 = radioBox ("Método de escala 3", Stores_i = numBox << Get (valor numérico);
distObj [Stores_i] << SendToReport (
Envío(
{}
"1",
ScaleBox,
{Min (newLSL [Stores_i]), Max (newUSL [Stores_i]), Inc (2),
Señales menores (1), etiquetas rotadas ("horizontales")}
));
)
numBox = cuadro de edición de número (i), // <- numBox no está subíndulado, por lo que no funcionará
// Stores_i = numBox << Get (valor numérico)
// numParam = numParamVal << Get (valor numérico);
)
rb1 << grupo (rb2 ) << grupo (rb3 )
Cuadro de lista H (
distObj = Distribución (
Y (Lista de evaluación (newYparamName ))),
)
cuadro de salto de página ();
)
)
);
);