Sto usando una funzione per creare più grafici in base a condizioni diverse. A volte mi chiede di escludere le righe (estremi anomali) al fine di adattare meglio il grafico quando lo si presenta ai nostri clienti. Ho cercato di utilizzare un flag globale per impostare se quella casella deve essere eliminata o meno, ma come ho scoperto ieri ci sono possibilità quando la bandiera sarà = 1 ma la condizione del test non ha Textbox (5).
La casella di testo ottiene automaticamente la sua diapositiva, quindi devo rimuoverla.
Qualsiasi aiuto sarebbe apprezzato
GraphPlot = Function(
{dt, Yaxis },
Eval(
Substitute(
Expr(
gb = dt << Graph Builder(
Invisible,
Where( dt:chnl == chan & dt:astate == attn & dt:pstate == phas ),
// Size( 1440, 1040 ),
show control panel( 0 ),
show legend( 0 ),
Subtitle Alignment( "Left" ),
Show Subtitle( 1 ),
Variables(
Y( Eval( Yaxis ) ),
X( :FREQ_GHz ),
Group X( :wafer_number ),
Overlay( :RowCol )
),
Elements( Smoother( X, Y, legend( 19 ), lambda( 0.0001 ) ) ),
)
),
Expr( plot ), plot,
Expr( chan ), chan,
Expr( attn ), attn,
Expr( phas ), phas,
Expr( mode ), mode,
Expr( tst ), tst
)
);
Report( gb )[Axisbox( 1 )] << Min( 7 ) << Inc( 1 ) << Add Ref Line( 8, "Solid", "Black", "m106", 1 ) << Add Ref Line( 17.5, "Solid", "Black", "m105", 1 ) << Label Row( Show Major Grid( 1 ) );
Report( gb )[Axisbox( 2 )] << Inc( 2 ) << Minor Ticks( 1 ) << Label Row( Show Major Grid( 1 ) );
(gb << Top Report)[Text Box( 1 )] << Delete;
// This may or may not happen on every condition
// I tried creating a flag when i actually exclude parts however
// The flag is global and not specific on a test condition
If( excludeFlag == 1, Report( gb )[Text Box( 5 )] << Delete );
Report( gb )[Framebox( 1 )] << Frame Size( 781, 655 );
Report( gb )[Outline Box( 1 )] << Set Title( Eval Insert( WaferListSQLString || " ^tst^" ) );
Report( gb )[Text Edit Box( 2 )] << Set Font Size( 15 ) << Set Font Style( "Bold" );
Report( gb )[Text Edit Box( 1 )] << Set Font Size( 25 ) << Set Font Style( "Bold" );
);Non sono esattamente sicuro di quale sia la tua domanda. Ma se stai dicendo che a volte Casella di testo (5) non è presente quando hai rilevato un excludeFlag == 1 e che sta causando un problema, puoi risolverlo utilizzando una funzione Try ()
If( excludeFlag == 1, Try( Report( gb )[Text Box( 5 )] << Delete) );
Se non si è sicuri che l'eliminazione avrà esito positivo ma invece causi una condizione di errore, è possibile utilizzarla come argomento della funzione Try (). Potrebbe non esserci alcun oggetto Casella di testo o potrebbe essercene più di uno. Verificherei il testo se trovi il primo per essere sicuro che sia quello che vuoi eliminare.
Try(
text = (gb << Top Report)[Text Box( 1 )] << Get Text;
If( Contains( text, "what I am looking for" ),
(gb << Top Report)[Text Box( 1 )] << Delete;
),
Throw( "No text box found." );
);