Das Hinzufügen expliziter Tabellenreferenzen im JSL-Code führt zu unerwarteten ErgebnissenIch habe ein kurzes JSL-Skript, das ich in einen größeren automatisierten Workflow integrieren möchte. Ziel ist es, die Werte einer Spalte (Layertyp) zu durchlaufen. Wenn ein anderer Wert als SSOD gefunden wird, sollte der Code 1 zurückgeben. Wenn alle Werte in den Spalten „SSOD“ sind, sollte 0 zurückgegeben werden. Dies wird in einer if/else-Aufteilung in einem Workflow verwendet, um einen Fehler auszulösen. Ich freue mich über Empfehlungen für eine bessere Codierung.
Ich habe den vorhandenen Code zum Debuggen aus dem Workflow entfernt. Der Code funktioniert wie vorgesehen, wenn ich ihn in einem JSL-Fenster mit der richtigen Datentabelle ausführe. Da ich ihn jedoch in einen Workflow für Benutzer einfüge, möchte ich den Namen der Datentabelle explizit angeben, da ich dies als robuster empfunden habe. Sobald ich jedoch die erste Codezeile hinzufüge, funktioniert er nicht mehr wie vorgesehen – er wird zwar ausgeführt, gibt aber unabhängig von den Spaltenwerten immer „1“ zurück.
Das folgende JSL liefert die erwarteten Ergebnisse, wenn es in einem Skriptfenster mit Referenz auf die Tabelle (im Anhang) ausgeführt wird. Beachten Sie, dass die Tabelle im Anhang „0“ zurückgibt. Ändern Sie einen Wert in einer einzelnen Zeile der Spalte „layer_type“ in einen anderen Wert, und die Tabelle sollte 1 zurückgeben.

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;
Vielen Dank schon mal im Voraus für eure Hilfe!
Automatisierung und SkriptingBetreff: Das Hinzufügen einer expliziten Tabellenreferenz im JSL-Code führt zu unerwarteten ErgebnissenIhre Syntax für die Funktion Summary() ist falsch. Definition, Syntax und Beispiele finden Sie im Scripting Index.
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;
Betreff: Das Hinzufügen einer expliziten Tabellenreferenz im JSL-Code führt zu unerwarteten ErgebnissenIch denke, Sie können einfach den Funktionsaufruf verwenden,
N Items( meas )
Um die Antwort zu ermitteln: Sie suchen nach einem einzelnen Wert in dieser Spalte. Der Funktionsaufruf Summarize() sollte daher eine einzelne Gruppe ergeben. Wenn die Anzahl der Elemente größer als eins ist, liegt mindestens eine Zeile mit einer anderen Zeichenfolge vor.
Data Table( "layer_type_forum_help" ) << Summarize( meas = By( :layer_type ) );
result = N Items( meas ) > 1;
Betreff: Das Hinzufügen einer expliziten Tabellenreferenz im JSL-Code führt zu unerwarteten ErgebnissenDanke @Mark_Bailey, ich habe das in Betracht gezogen, aber für die Fehlerprüfung ist es möglich, dass ein Wert vorhanden ist, der nicht der gewünschte ist (SSOD), und ich möchte das unterscheiden.
Betreff: Das Hinzufügen einer expliziten Tabellenreferenz im JSL-Code führt zu unerwarteten Ergebnissen*** Update: Ich entschuldige mich für meine Antwort unten. Sie könnte jemandem helfen, geht aber nicht auf Ihre Anfrage ein. Was möchten Sie? Möchten Sie wissen, ob ein Wert nicht übereinstimmt, und nach dem ersten Auftreten eines nicht übereinstimmenden Werts eine Antwort senden?
Sie sagten: „ Ich habe ein kurzes JSL-Skript, das ich in einen größeren automatisierten Workflow integrieren möchte. Ziel ist es, die Werte einer Spalte (Layertyp) zu durchlaufen. Wenn ein anderer Wert als SSOD gefunden wird, sollte der Code 1 zurückgeben. Wenn alle Werte in den Spalten „SSOD“ sind, sollte 0 zurückgegeben werden. “
Summarize( meas = By( :layer_type ) );
result = N Items( meas ) > 1;
In diesem Fall wird nur der Wert „SSOD“ angezeigt, daher sollte 0 zurückgegeben werden:

Das Ergebnis ist 0:

Ein anderer Fall weist andere Werte als "SSOD: so sollte 1 zurückgeben

Das Ergebnis ist 1:

Betreff: Das Hinzufügen einer expliziten Tabellenreferenz im JSL-Code führt zu unerwarteten Ergebnissen@Mark_Bailey – keine Sorge, es hat einen indirekten Bezug dazu und ich habe in meinem Beitrag danach gefragt, also danke für Ihre Zeit.
Ich kann besser erklären, wo diese Lösung nicht das gewünschte Ergebnis liefert. Die Beispiele in Ihrem letzten Beitrag sind korrekt und liefern das gewünschte Ergebnis. Im dritten Szenario enthält die Spalte ausschließlich Werte, die nicht SSOD sind. Beispielsweise ist der gesamte Layertyp mit „NAIL“ gefüllt. In diesem Fall würde Ihr Code vermutlich 0 zurückgeben. Das gewünschte Ergebnis wäre dennoch 1 (da nicht alle Werte SSOD sind).