Botón de recuperaciónPubliqué esta pregunta en el hilo original, pero probablemente no estaba resaltada correctamente, por lo que lo intento como una publicación nueva.
El código en este enlace parece muy útil.
Cómo crear un botón Recuperar en una ventana personalizada - Comunidad de usuarios de JMP
Sin embargo, no me resulta obvio cómo aprovechar correctamente la función de recuperación.
Tengo un código (a continuación) que tomé prestado y modifiqué y que no se recuerda y estaba tratando de descubrir cómo soldarlos. Estoy cerca pero me falta algo como siempre. Se agradece toda la ayuda.
dt = Current Data Table();
cd = Column Dialog(
exy = ColList( "Y", Min Col( 1 ) ),
exx = ColList( "X", Min Col( 1 ) )
);
Eval( cd[1] );
Eval( cd[2] );
yyy = Expr( y() );
xxx = Expr( x() );
xval = exx[1];
For( i = 1, i <= N Items( exy ), i++,
Insert Into( yyy, exy[i] )
);
For( i = 1, i <= N Items( exx ), i++,
Insert Into( xxx, exx[i] )
);
nw = New Window( "Annotated Multiple Plots",
For( i = 1, i <= N Items( exy ), i++,
Notes = exy[i] << Get Property( "Notes" );
Try(
Bivariate(
Y( exy[i] ),
X( exx[1] ),
SendToReport(
Dispatch(
{},
"",
AxisBox( 2 ),
Add Text Annotation(
Text( "Category: " || Notes ),
Fixed Size( 0 ),
Text Box( {-80, 25, 0, 50} ),
Filled( 0 )
)
)
)
)
);
)
);
Gracias
Adiós
llave inglesa
Automatización y secuencias de comandosRe: Botón de recuperaciónAdiós,
A continuación se muestra una combinación simple de su secuencia de comandos con la secuencia de comandos a la que se hace referencia en Cómo crear un botón Recuperar en una ventana personalizada. Para empezar, el ejemplo proporcionado utiliza un cuadro de diálogo de columna() y el ejemplo de recuperación utiliza una ventana nueva para el cuadro de diálogo del usuario. JMP había depreciado el diálogo de columna a favor de la ventana nueva. Lo que debes hacer es estudiar el guión y aprender cómo funciona. Incluye varios elementos que requerirán cierta comprensión. NameSpaces es uno de los principales.
Names Default To Here( 1 );
/* Assign dt to reference a table. Open a sample table for demonstration purposes */
dt = Open( "$SAMPLE_DATA/Semiconductor Capability.jmp" );
/* Use a named namespace to hold the recall values */
If( !Namespace Exists( "Custom Dialog" ), // define namespace if it does not exist
dialogRecallNS = New Namespace(
"Custom Dialog",
{
ycolRecall =
{
}
,
orderRecall =
{
}
,
byRecall =
{
}
}
)
, // else get a reference to the existing namespace
dialogRecallNS = Namespace( "Custom Dialog" )
);
nc = N Col( dt );
lbWidth = 130;
// The program to execute when the OK button is pressed
pgm = Expr(
nw = New Window( "Annotated Multiple Plots",
For( i = 1, i <= N Items( exy ), i++,
Notes = Try( exy[i] << Get Property( "Notes" ) );
Try(
Bivariate(
Y( exy[i] ),
X( exx[1] ),
SendToReport(
Dispatch( {}, "", AxisBox( 2 ),
Add Text Annotation(
Text( "Category: " || Notes ),
Fixed Size( 0 ),
Text Box( {-80, 25, 0, 50} ),
Filled( 0 )
)
)
)
)
);
)
)
);
/* Expression to clear all current settings */
clearRoles = Expr(
colListY << RemoveAll;
colListX << RemoveAll;
);
/* Expression to store the current settings in global variables */
recallRoles = Expr(
dialogRecallNS:ycolRecall = colListY << GetItems;
dialogRecallNS:orderRecall = colListX << GetItems;
);
/* Custom Launch Window */
customDlg = New Window( "Example of a Custom Dialog",
Border Box( Left( 3 ), top( 2 ),
V List Box(
Text Box( "Example dialog to demonstrate a Recall button" ),
H List Box(
V List Box(
Panel Box( "Select Columns",
colListData = Col List Box( All, width( lbWidth ), nLines( Min( nc, 10 ) ) )
)
),
Panel Box( "Cast Selected Columns into Roles",
Lineup Box( N Col( 2 ), Spacing( 3 ),
Button Box( "Y", colListY << Append( colListData << GetSelected ) ),
colListY = Col List Box( width( lbWidth ), nmin( 1 ), nLines( 5 ), numeric ),
Button Box( "X", colListX << Append( colListData << GetSelected ) ),
colListX = Col List Box( width( lbWidth ), nLines( 1 ), numeric )
)
),
Panel Box( "Action",
Lineup Box( N Col( 1 ),
Button Box( "OK",
recallRoles;
exy = colListY << get items;
exx = colListX << get items;
pgm;
customDlg << CloseWindow;
),
Button Box( "Cancel", customDlg << CloseWindow ),
Button Box( "Reset", clearRoles ),
Text Box( " " ),
Button Box( "Remove",
colListY << RemoveSelected;
colListX << RemoveSelected;
),
Button Box( "Recall",
clearRoles;
/* Restore any previous settings from the namespace variables */
Try(
colListY << Append( dialogRecallNS:ycolRecall );
colListX << Append( dialogRecallNS:orderRecall );
);
)
)
)
)
)
)
);
colListx << set min items( 1 );
colListy << set min items( 1 );
Tenga en cuenta que eliminé varias líneas de código en el JSL proporcionado que no parecían hacer nada para el ejemplo.
Re: Botón de recuperaciónPuede inspirarse en el script que proporcionó Jim y luego aplicarle la biblioteca de funciones de recuperación . Probablemente sea una excelente manera de aprender muchas cosas diferentes para JSL (modificar la solución de trabajo existente para usar un paquete diferente). Personalmente, no me gusta la forma en que funciona la biblioteca de recuperación, así que no la he usado (tengo la mía propia en proceso), pero hasta donde yo sé, actualmente es la mejor manera de implementar la recuperación sin escribir todo usted mismo.
Re: Botón de recuperaciónEsto está muy cerca y funciona como se describe, sin embargo, el propósito era tener una manera de forzar que los gráficos tengan anotaciones basadas en la información de las notas y de alguna manera eso se rompe en esta revisión.
Faltan anotaciones y las notas en sí no contienen nada.
Notes = Try(exy[i] << Get Property( "Notes" ));
Show(Notes);
¿Alguna pista de por qué podría ser eso?
Gracias
Adiós
llave inglesa
Re: Botón de recuperaciónIntenta cambiar
Notes = Try(exy[i] << Get Property("Notes"));
a
Notes = Try(Column(dt, exy[i]) << Get Property("Notes"));
as << Obtener elementos para Col List Box devuelve una lista de cadenas
Re: Botón de recuperaciónEso es acertado, combinar esos trabajos.
Gracias
Adiós
llave inglesa