¡El script funciona hasta que lo llama un complemento!<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hola,
Tengo un script que adquiere datos de una interfaz de usuario, ejecuta un ajuste en JMP y genera un informe con los datos sin procesar, algunos datos calculados y varios gráficos e información seleccionada de la salida de JMP.
Funciona bien cuando se ejecuta desde el script, incluso una vez cifrado.
Sin embargo, una vez que pego el archivo cifrado en un complemento simple con solo este script, todo funciona excepto que ya no muestra la ecuación de ajuste que extraigo de la salida JMP.
¡Estoy desconcertado!
Para hacer las cosas aún más desconcertantes, JMP funciona perfectamente desde el complemento siempre que haya ejecutado el script una vez desde la ventana del script antes de usar el complemento. ¡Casi como si ahora recordara qué hacer!
El script obtiene la ecuación aquí:
nlr = nlModel << Informe;
pb = nlr[PictBox(1)];
modEq = pb << Obtener imagen;
Luego lo muestra usando:
Cuadro de lista V (
Cuadro de texto ("Modelo de ecuación", << Establecer tamaño de fuente (12)),
Cuadro de imagen (modEq),
Caja de texto(" "),
¿Alguna idea de por qué este bit deja de funcionar una vez integrado en el complemento?
Adjunto un volcado de pantalla de la salida ejecutada desde la ventana del script frente a ejecutada desde el complemento (inmediatamente después de abrir JMP)
Gracias
Re: ¡El script funciona hasta que lo llama un complemento!Sospecho que el PictBox que contiene la fórmula debe aparecer en la pantalla para crear el mapa de bits que está tratando de capturar.Lo mejor es capturarlo mientras está visible.
Es posible que pueda usar "oculto" en lugar de "privado" con la tabla de datos.Una mesa oculta tiene una ventana oculta.Una mesa privada no tiene ventana.Las tablas privadas deben cerrarse mientras todavía tenga una variable que las señale (o se acumulan hasta que se cierra JMP, consumiendo memoria).Las mesas ocultas no son tan fáciles de perder de vista.
Re: ¡El script funciona hasta que lo llama un complemento!Tuve que usar una solución antiestética para poder ejecutar mis pruebas de validación: justo antes de llamar al análisis JMP no lineal, abro una ventana vacía y la cierro al final del script.
Funciona. Espero que mostrar y luego ocultar el registro funcione también.
¡Me duele entender por qué está haciendo esto!
Re: ¡El script funciona hasta que lo llama un complemento!Hola Craige,
Muuuuuy... Traté de usar la función de nueva imagen (buena, no lo sabía) y todavía no tuve suerte.
Intenté agregarlo al extraerlo de la plataforma de informes:
nlr = nlModel << Informe;
pb = nlr[PictBox(1)];
//modEq = pb << Obtener Imagen;
//Aqui:modEq = pb << Obtener Imagen;
modEq = pb << Obtener imagen;
modEq = NuevaImagen(modEq);
También lo probé en mi propia ventana de informe:
Cuadro de lista V (
Cuadro de texto ("Modelo de ecuación", << Establecer tamaño de fuente (12)),
cuadro de imagen (nueva imagen ( modEq )),
¡Y probé en ambos lugares por si acaso!
Hay una diferencia: el informe JMP de fondo aún muestra una cruz, pero mi informe no muestra nada, ni siquiera un espacio vacío.
Sin embargo, al revisar el script y ejecutar cada vez menos, me di cuenta de que el lugar donde realmente falla es aquí:
// Análisis de los datos
win3 = Nueva ventana ("Informe de modelo no lineal",
nlModel = dt << No lineal (
Y( :Nombre( "hGH" ) ),
X( :Nombre( "Crecimiento del modelo") ),
Método de la segunda derivada ( 1 ),
newton,
Finalizar,
Límites de confianza,
Mostrar expresión de predicción ( 1 )
)
);
win3 se cierra con el script y se reemplaza por mi propia ventana de informe con todo lo que los científicos me pidieron. Entonces, por alguna razón, si no hay ninguna ventana abierta en JMP excepto la ventana de inicio, ¡la instrucción de mostrar la ecuación de predicción falla! Todos los trucos que se sugirieron en este hilo se refieren a las operaciones realizadas después de que se realiza el NLR y, por lo tanto, no afectan el resultado.
Y la razón por la que nunca identifiqué este error cuando escribí el complemento hace unos meses es porque tenía activada la ventana del consejo del día. Debe haber sido suficiente para que el complemento funcione: cualquier ventana de JMP que se abra parece funcionar.
Para el fondo: hGH es la respuesta y el usuario ingresa los valores más arriba, el crecimiento del modelo es la columna que usa la ecuación del modelo difícil de alcanzar como una fórmula que toma en cuenta el tiempo y modela el "crecimiento esperado" que se ajustará al crecimiento real.
Entonces, el problema es que la función no lineal no mostrará la ecuación pred donde se llama en mi secuencia de comandos cuando no se abren otras ventanas jmp.
Creé una tabla antes:
dt = Nueva Tabla ("Datos",
privado,
Añadir Filas( 6 ),
Nueva columna ("Tiempo", Numérico, Establecer valores (lstTimes)),
Nueva columna ("hGH", numérico, valores establecidos (lsthGH))
);
Saqué la instrucción privada y, por supuesto, ahora funciona el complemento.
Pero la razón por la que usé privado es porque era la única forma en que funcionaría mi salida. Si trato de cerrar la tabla de datos al final, incluso con la espera, no se genera el informe.
De todos modos, no es una solución adecuada, pero si hubiera una manera de tener la tabla de datos abierta cuando se produce el informe para que no haya fallas y luego cerrar la tabla de datos sin que falle el script, me conformaría con eso.
Me pregunto si funcionará en JMP 13, si es un error o si realmente hay un error en algún lugar de la forma en que escribí...
Re: ¡El script funciona hasta que lo llama un complemento!Prueba esto:
cuadro de imagen( nueva imagen ( modEq ))
Creo que la X roja significa que el cuadro de imagen está conectado a los datos originales de la imagen. y esos datos ya no existen .Al clonar la imagen (con newImage), creo que el cuadro pict tendrá su propia copia privada.
También es posible que pueda omitir la función de cuadro de imagen:
Cuadro de lista V (
Cuadro de texto ("Modelo de ecuación", << Establecer tamaño de fuente (12)),
modEq, // Creo que la imagen funcionará sin la función PictureBox, pero aún podría necesitar newImage
Caja de texto(" "),
Re: ¡El script funciona hasta que lo llama un complemento!Hola,
He probado algunos escenarios diferentes ahora.
notas
- el complemento y el script usan nombres predeterminados para la cláusula aquí (principalmente en caso de que las personas usen JMP para otra cosa al mismo tiempo)
- la ecuación que quiero importar del informe JMP al mío es una personalizada de una columna en la tabla que usa una fórmula para completarse y encendí Mostrar expresión de predicción ( 1 )
- en la estructura de árbol, esto aparece como un pictbox como dijo craige porque las ecuaciones en JMP son imágenes en lugar de texto. Entonces, en mi nuevo guión usé la sugerencia de Eric y ahora es
nlr = nlModelo << Informe ;
pb = nlr [ PictBox ( 1 )] ;
modEq = pb << Obtener la imagen ;
- el script también obtiene una tabla:
tuberculosis = nlr [ TableBox ( 5 )] ;
tblValores = tuberculosis << Convertir en tabla de datos ;
- también obtiene un gráfico compuesto por varios bits reunidos en un cuadro de imagen:
cama y desayuno = nlr [ Cuadro de imagen ( 1 )] ;
trama = cama y desayuno << Obtener imagen ;
Los muestra sin ningún problema en mi propio informe.
Escenarios:
- funciona desde el script cada vez
- funciona desde el complemento cuando se abre el script, incluso si no se ha ejecutado
- funciona si se llama al complemento por segunda vez y el informe no se ha cerrado (se muestra el informe sin la ecuación)
- no funciona cuando se llama desde el complemento por primera vez o en cualquier momento si se ha cerrado la ventana del informe
- funciona si se abre el registro
- funciona una vez que se ha abierto el registro, incluso si las ventanas de registro e informe están cerradas de antemano
- funciona siempre que se abra cualquier ventana de JMP (ventana de edición de complemento de JMP/cualquier tabla de datos/ventana de secuencia de comandos), pero una vez que se cierran, ya no funciona
Parece que mi complemento necesita un amigo para trabajar
Como puede ver en la imagen, muestra una cruz. También debo decir que cuando se ejecuta el script, JMP abre su propia ventana de informe y las tablas que programé para ejecutar el ajuste no lineal. Esos se abren y cierran en el fondo porque no pude encontrar una manera de hacerlos totalmente invisibles. Cuando eso sucede, veo que el informe de análisis de JMP también tiene una cruz en lugar de la ecuación de predicción.
Si esto fuera para mí, no me importaría, pero tengo que validar esto para usarlo en cGMP y no puedo decirle a la gente que lo ejecute dos veces cada vez para obtener el formato correcto.
Estoy perdido aquí...
¿Algún otro pensamiento?
Re: ¡El script funciona hasta que lo llama un complemento!PictBox y PictureBox son dos cajas distintas.Internamente, JMP usa PictureBox como marcador en un árbol de cuadro de visualización.Ese marcador se usa de varias maneras para ayudar a determinar cuándo los cuadros secundarios deben agruparse en un solo fragmento.Las plataformas generalmente colocan un PictureBox alrededor de un gráfico y sus ejes.Ese es el punto en el árbol donde a menudo querrías "tomar una foto".
PictBox es un cuadro que contiene una imagen de mapa de bits.
Desafortunadamente, PictureBox() función crea un PictBox.No hay una función JSL para crear un PictureBox, pero las plataformas los crean.
A menos que esté agregando imágenes a un informe, probablemente no encontrará PictBox.Probablemente encontrará PictureBox si hay un gráfico.
Re: ¡El script funciona hasta que lo llama un complemento!Hola Hardner y muchas gracias por tus comentarios.
Gracias por la sugerencia de solución de problemas también. Cuando inicialmente escribí esto, hace unos meses, los números en th La estructura del árbol no coincidía y terminé teniendo que adivinar. Me había olvidado de esto. Era realmente extraño: la estructura de árbol diría el cuadro de número 18, pero para sacarlo y mostrarlo en mi ventana de informe, ¡tendría que llamar al cuadro de número 7, por ejemplo!
El complemento siempre realizará el mismo análisis, por lo que no hay problemas en ese lado de las cosas.
Re: ¡El script funciona hasta que lo llama un complemento!Hola Eric y gracias por esta respuesta.
Cuando me alejé y lo pensé, también recordé el problema del alcance y me di cuenta de que debía ser un problema.
Probé ambas soluciones y no funcionó... la primera vez.
Ahora, sin embargo, si ejecuto el complemento dos veces seguidas, la ecuación de predicción se muestra en la salida de mi segundo informe. ¡Voy a intentarlo de nuevo cuando no esté entre dos reuniones!
Es curioso cómo este cuadro de imagen en particular me dio problemas y, sin embargo, otras partes que también obtuve del informe jmp se mostraron correctamente.
¡Buen aprendizaje aquí!
Gracias de nuevo 
Re: ¡El script funciona hasta que lo llama un complemento!De acuerdo, esto parece un alcance.
Pero, probablemente sin relación, también me sorprende que esto funcione para ti: pb = nlr[PictBox(1)];
si no escribo [PictureBox(1)] obtengo un error.Me pregunto si eso es algo de la versión JMP.
También iba a sugerir que podría agregar
nlr<
Una vez más, probablemente no sea relevante para este problema inmediato, pero sugeriría que si su complemento va a extraer datos diferentes cada vez (o ser utilizado por otros con otras preferencias), debe asegurarse de que el cuadro siempre estará allí y siempre será PictureBox. (1). Es posible que desee buscar eso más específicamente según el nombre del cuadro de esquema debajo o prueba para encontrarlo.tal vez ya esté haciendo esto último, ya que su secuencia de comandos no falla, sino que continúa haciendo el informe.La falla que veo con PictBox detiene todo el script, no usa un espacio en blanco en su lugar.
Re: ¡El script funciona hasta que lo llama un complemento!Hola, Gwenicat,
¿Hay algún mensaje en el registro de JMP?
La mayoría de los problemas de este tipo tienden a reducirse al ámbito variable.Lo más probable es que su complemento se esté ejecutando con Nombres predeterminados hasta aquí(1) , pero el script, cuando lo ejecuta fuera del contexto del complemento, probablemente se esté ejecutando sin eso.Entonces, fuera del contexto del complemento, sus variables son todas globales, pero en el contexto del complemento, se agregan al Aquí espacio de nombres en su lugar.Por eso pienso modEq dentro del cuadro de lista V no se puede encontrar en la versión del complemento.El hecho de que funcione cuando ejecuta la secuencia de comandos fuera del complemento una vez por primera vez respalda esta teoría, porque hacerlo pondrá modEq en el espacio de nombres global, lo que permite que la secuencia de comandos del complemento lo encuentre.
Intenta cambiar estas dos líneas:
modEq = pb << Obtener imagen;
Cuadro de imagen (modEq),
a
::modEq = pb << Obtener Imagen;
Cuadro de imagen( ::modEq ),
y ver si eso no funciona mejor.Eso asegura que modEq se pone en el espacio de nombres global.O, si desea mantenerlo en el Aquí espacio de nombres (probablemente una mejor práctica), haga esto en su lugar:
Aquí: modEq = pb << Obtener Imagen;
Cuadro de imagen( Aquí: modEq ),
Hazme saber si eso lo arregla.
Gracias,
eric