L'ajout d'une référence de table explicite dans le code JSL conduit à des résultats inattendusJ'ai un court script JSL que je souhaite intégrer à un workflow automatisé plus vaste. Son objectif est d'itérer sur les valeurs d'une colonne (layer_type) et, si une valeur autre que SSOD est trouvée, le code doit renvoyer 1. Si toutes les valeurs des colonnes sont « SSOD », le code doit renvoyer 0. Ce script est utilisé dans une séparation if/else dans un workflow pour générer une erreur. Si vous avez des recommandations pour une meilleure façon de coder cela, je suis preneur.
Étant donné le code existant, je l'ai extrait du workflow pour le déboguer. Il fonctionne comme prévu lorsque je l'exécute dans une fenêtre JSL avec la bonne table de données sélectionnée. Cependant, comme je l'insère dans un workflow pour les utilisateurs, je souhaite préciser le nom de la table de données, car je trouve cela plus fiable. Cependant, lorsque j'ajoute la première ligne de code, le code ne fonctionne plus comme prévu : il s'exécute toujours, mais renvoie toujours « 1 », quelles que soient les valeurs des colonnes.
Le JSL ci-dessous produit les résultats attendus lorsqu'il est exécuté dans une fenêtre de script référençant la table (ci-jointe). Notez que la table ci-jointe renvoie « 0 ». Si vous modifiez une valeur dans une seule ligne de la colonne « layer_type », elle devrait renvoyer 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;
Merci par avance pour votre aide !
Automatisation et scriptsRe : L'ajout d'une référence de table explicite dans le code JSL conduit à des résultats inattendusLa syntaxe de la fonction Summary() est incorrecte. Consultez l'index des scripts pour la définition, la syntaxe et des exemples.
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'ajout d'une référence de table explicite dans le code JSL conduit à des résultats inattendusJe pense que vous pouvez simplement utiliser l'appel de fonction,
N Items( meas )
Pour déterminer la réponse, vous recherchez une valeur unique dans cette colonne. L'appel à la fonction Summarize() doit donc générer un groupe unique. Si le nombre d'éléments est supérieur à un, vous avez au moins une ligne contenant une chaîne différente.
Data Table( "layer_type_forum_help" ) << Summarize( meas = By( :layer_type ) );
result = N Items( meas ) > 1;
Re : L'ajout d'une référence de table explicite dans le code JSL conduit à des résultats inattendusMerci @Mark_Bailey, j'ai envisagé cela, mais pour la vérification des erreurs, il est possible qu'il y ait une valeur qui ne soit pas celle souhaitée (SSOD) et je souhaite différencier cela.
Re : L'ajout d'une référence de table explicite dans le code JSL conduit à des résultats inattendus*** Mise à jour : Veuillez m'excuser pour ma réponse ci-dessous. Elle pourrait être utile, mais elle ne répond pas à votre demande. Que souhaitez-vous ? Voulez-vous savoir si une valeur ne correspond pas et renvoie une réponse après la première occurrence d'une valeur non conforme ?
Vous avez dit : « J’ai un court script JSL que je souhaite intégrer à un flux de travail automatisé plus vaste. L’objectif est d’itérer sur les valeurs d’une colonne (layer_type) et, s’il trouve une valeur autre que SSOD, le code doit renvoyer 1. Si toutes les valeurs des colonnes sont « SSOD », le code doit renvoyer 0. »
Summarize( meas = By( :layer_type ) );
result = N Items( meas ) > 1;
Ce cas ne présente que la valeur « SSOD » et doit donc renvoyer 0 :

Le résultat est 0 :

Un autre cas présente des valeurs autres que « SSOD : doit donc renvoyer 1

Le résultat est 1:

Re : L'ajout d'une référence de table explicite dans le code JSL conduit à des résultats inattendus@Mark_Bailey - ne vous inquiétez pas, c'est tangentiellement lié et j'ai posé la question dans le message, alors j'apprécie votre temps.
Je peux mieux expliquer où cette solution ne renvoie pas le résultat souhaité. Les exemples de votre dernier message sont exacts et renvoient le résultat souhaité. Le troisième scénario est celui où la colonne contient toutes les valeurs qui ne sont pas SSOD. Par exemple, le layer_type entier est rempli avec « NAIL ». Dans ce cas, je pense que votre code renverrait 0. Le résultat souhaité serait toujours 1 (puisque toutes les valeurs ne sont pas SSOD).