L'aggiunta di un riferimento esplicito alla tabella nel codice JSL porta a risultati inaspettatiHo un breve script JSL che vorrei aggiungere a un flusso di lavoro automatizzato più ampio. L'intento è quello di iterare sui valori di una colonna (layer_type) e, se trova un valore diverso da SSOD, il codice dovrebbe restituire 1. Se tutti i valori nelle colonne sono "SSOD", dovrebbe restituire 0. Questo viene utilizzato in una suddivisione if/else in un flusso di lavoro per generare un errore. In generale, se avete suggerimenti su un modo migliore per codificarlo, sono ben accetto.
Dato il codice esistente, l'ho estratto dal flusso di lavoro per eseguirne il debug. Il codice funziona come previsto quando lo eseguo in una finestra JSL con la tabella dati corretta selezionata. Tuttavia, poiché lo sto inserendo in un flusso di lavoro per gli utenti, voglio essere esplicito sul nome della tabella dati, perché ho scoperto che è più affidabile. Tuttavia, quando aggiungo la prima riga di codice, non funziona più come previsto: viene comunque eseguito ma restituisce sempre "1" indipendentemente dai valori delle colonne.
Il codice JSL seguente produce i risultati attesi quando viene eseguito in una finestra di script che fa riferimento alla tabella (allegata). Nota: la tabella allegata restituirà "0". Modificando un valore in una singola riga della colonna "layer_type" con qualsiasi altro valore, dovrebbe restituire 1.

Summarize( meas = by( :layer_type ) );
result = 0;
For( i = 1, i <= N Items( meas ), i++,
If( meas[i] != "SSOD",
result = 1;
Break();
)
);
result;
However, when I modify only the beginning of the JSL to explicitly reference the table it no longer works - when I change a single value in the 'layer_type' column to anything other than SSOD it continues to return '0'. In fact I've tested this both ways by commenting out the Data Table( "layer_type_forum_help" ) << code and it seems it always returns what was previously returned when the block started with the 'Summarize' command
Data Table( "layer_type_forum_help" ) << Summarize( meas = by( :layer_type ) );
result = 0;
For( i = 1, i <= N Items( meas ), i++,
If( meas[i] != "SSOD",
result = 1;
Break();
)
);
result;
Grazie mille per il tuo aiuto!
Automazione e scriptingRe: L'aggiunta di un riferimento esplicito alla tabella nel codice JSL porta a risultati inaspettatiLa sintassi della funzione Summary() non è corretta. Consultare l'Indice di Scripting per definizione, sintassi ed esempi.
Summarize(Data Table( "layer_type_forum_help" ), meas = by( :layer_type ) );
result = 0;
For( i = 1, i <= N Items( meas ), i++,
If( meas[i] != "SSOD",
result = 1;
Break();
)
);
result;
Re: L'aggiunta di un riferimento esplicito alla tabella nel codice JSL porta a risultati inaspettatiPenso che tu possa semplicemente usare la chiamata di funzione,
N Items( meas )
Per determinare la risposta, stai cercando un singolo valore in questa colonna. Dovrebbe quindi risultare in un singolo gruppo dalla chiamata alla funzione Summarize(). Se il numero di elementi è maggiore di uno, hai almeno una riga con una stringa diversa.
Data Table( "layer_type_forum_help" ) << Summarize( meas = By( :layer_type ) );
result = N Items( meas ) > 1;
Re: L'aggiunta di un riferimento esplicito alla tabella nel codice JSL porta a risultati inaspettatiGrazie @Mark_Bailey Ci avevo pensato, ma per il controllo degli errori è possibile che ci sia un valore che non è quello desiderato (SSOD) e voglio differenziarlo.
Re: L'aggiunta di un riferimento esplicito alla tabella nel codice JSL porta a risultati inaspettati*** Aggiornamento: mi scuso per la mia risposta qui sotto. Potrebbe essere utile a qualcuno, ma non risponde alla sua richiesta. Cosa desidera? Vuole sapere se un valore non corrisponde e viene restituito dopo la prima occorrenza di un valore non conforme?
Hai detto: " Ho un breve script JSL che vorrei aggiungere a un flusso di lavoro automatizzato più ampio. L'intento è di scorrere i valori in una colonna (layer_type) e se trova un valore diverso da SSOD, il codice dovrebbe restituire 1. Se tutti i valori nelle colonne sono 'SSOD', dovrebbe restituire 0. "
Summarize( meas = By( :layer_type ) );
result = N Items( meas ) > 1;
In questo caso viene visualizzato solo il valore "SSOD", quindi dovrebbe restituire 0:

Il risultato è 0:

Un altro caso mostra valori diversi da "SSOD: quindi dovrebbe restituire 1

Il risultato è 1:

Re: L'aggiunta di un riferimento esplicito alla tabella nel codice JSL porta a risultati inaspettati@Mark_Bailey - non preoccuparti, è tangenzialmente correlato e ne ho parlato nel post, quindi apprezzo il tuo tempo.
Posso spiegare meglio quando questa soluzione non restituisce il risultato desiderato. Gli esempi nel tuo post più recente sono accurati e restituiscono il risultato desiderato. Il terzo scenario è quello in cui la colonna contiene tutti i valori che non sono SSOD. Ad esempio, l'intero layer_type viene riempito con 'NAIL'. In tal caso, credo che il tuo codice restituirebbe 0. Il risultato desiderato sarebbe comunque 1 (poiché non tutti i valori sono SSOD).