[gelöst]Hilfe bei Schleife beenden

13. November 2018 09:01

Hallöle,

wir stolpern hier gerade über alten Code, der anscheinend in einer Schnittstelle für Probleme sorgt.
Der Kollege der dies mit einem externen Dienstleister programmiert hat ist nicht mehr im Haus, den Dienstleister gibt es auch nicht mehr. (Der Code ist gut 8 Jahre alt).

Wir stolpern jetzt über:

UNTIL TABLE.FINDFIRST = TRUE;

Kann das überhaupt funktionieren? Ich hab so ein Ende einer Schleife noch nie gesehen.

Außerdem:

Table.SETFILTER(Table.Field, 'SP|??');

Fragezeichen als Leerfilter sind mir auch noch nicht untergekommen, geht das?

Freundliche Grüße

Kristin
Zuletzt geändert von Kristin K. am 5. Juni 2019 10:17, insgesamt 1-mal geändert.

Re: Hilfe bei Schleife beenden

13. November 2018 09:33

Kristin K. hat geschrieben:UNTIL TABLE.FINDFIRST = TRUE;

Kann das überhaupt funktionieren? Ich hab so ein Ende einer Schleife noch nie gesehen.
Kommt immer darauf an, was man innerhalb der Schleife machen will, und womit die Schleife begonnen wurde. Ungewöhnlich ist es schon, aber ohne den Rest-Code nicht zu beurteilen.

Table.SETFILTER(Table.Field, 'SP|??');

Fragezeichen als Leerfilter sind mir auch noch nicht untergekommen, geht das?

Ein * ersetzt eine beliebig lange Zeichenfolge (0:n), in ? genau eines. Folglich steht ein ?? für genau zwei Zeichen, egal welche.

Re: Hilfe bei Schleife beenden

13. November 2018 09:34

Kristin K. hat geschrieben:UNTIL TABLE.FINDFIRST = TRUE;

Kommt drauf an, was davor steht. Aber falls bspw. so lange Filter gesetzt werden, bis etwas gefunden wird, ergibt das Sinn.

Kristin K. hat geschrieben:Table.SETFILTER(Table.Field, 'SP|??');

'SP' oder alles, was 2 Zeichen hat.

Re: Hilfe bei Schleife beenden

13. November 2018 09:39

Hallo,

also gebe ich auch noch meinen Senf dazu: :lol:

zum ersten:
Code:
UNTIL TABLE.FINDFIRST = TRUE;

Das muss nicht falsch sein, wenn das die Warteschleife auf einen neuen Datensatz ist, der von einem externen Programm in TABLE eingetragen wird.
Der Code sollte dann etwa so aussehen:
Code:
WHILE TRUE DO BEGIN
  REPEAT
    SLEEP(10000);
  UNTIL TABLE.FINDFIRST = TRUE;
  // Do somthing important with table
END;

Ob man das so programmieren sollte , darüber kann man sich streiten.
Ein Report/Codeunit, der regelmäßig von der Aufgabenwarteschlange aufgerufen wird, würde wahrscheinlich besser aussehen. Wenn es schneller sein muss, dann sollte man über Webservices nachdenken.

zum zweiten:
Code:
Table.SETFILTER(Table.Field, 'SP|??');

Der Code bedeutet filtere auf 'SP' oder genau zwei beliebige Zeichen.
Code:
Table.SETFILTER(Table.Field, '??');

würde das gleiche bewirken.
Hier wird aber nicht auf leer gefiltert.

Gruß Fiddi