Guten Tag zusammen,
meine Frage bezieht sich auf die Auswertung eines LCHR-Feldes (siehe auch Kapitel 6). Die Probleme ergeben sich mit einiger Sicherheit dadurch, dass ich primär kein Entwickler bin...
Ziel (im ersten Schritt):
Eine Infoset-Query über die Tabelle USR04. Es soll über die Eingabe eines Rollen-Profilnamens per Parameter (Abgrenzung) innerhalb des LCHR-Feldes USR04-PROFS nach einer Stringübereinstimmung (per CS) gesucht werden. Ist diese erstmalig gegeben, soll das Zusatzfeld "stringfound" gleich 'Y' gesetzt werden und die Schleife verlassen werden. Dieses Zusatzfeld soll dann ausgegeben werden.
Umsetzungsidee:
Es werden in einer Schleife jeweils 250 Zeichen lange Zeichenfolgen des LCHR-Feldes in ein Zusatzfeld 'CheckString' per move gebracht. In dem Inhalt dieses Zusatzfeldes erfolgt dann die Zeichenkettensuche nach dem Rollen-Profil. Die Prüflogik im engeren Sinne scheint wohl zu funktionieren.
Die Schleife habe ich im Codeabschnitt "Satzverarbeitung" programmiert. Die Definition der Zusatzfelder ist erfolgt. Hier der Code:
countloop = ( usr04-nrpro DIV 200 ) + 1 .
stringfound = 'N' .
DO countloop TIMES.
CLEAR checkstring .
offset = ( sy-index - 1 ) * 200 .
MOVE usr04-profs+offset(250) TO checkstring .
IF checkstring CS searchstring .
stringfound = 'Y' .
EXIT .
ELSE .
stringfound = 'N' .
ENDIF .
ENDDO .
Ergänzung:
Die Zuweisung des Suchstrings (der gesuchte Profilname) aus dem Abgrenzungs-Parameter "search" erfolgt im Coding zum Feld "searchstring" ---> searchstring = search .
Das Offset beim Move-Befehl ist kleiner (200 und Vielfaches davon) als die Zahl der übertragenen Zeichen (250). Durch diese "überlappende" Übertragung wollte ich vermeiden, dass die gesuchte Zeichenkette zufällig "zerteilt" und deshalb nicht gefunden wird.
Die Zahl der maximalen Schleifendurchläufe (countloop) errechnet sich durch die Länge des LCHR-Feldes (USR04-NRPRO) und dem gewünschten Offset---> countloop = ( usr04-nrpro DIV 200 ) + 1 .
Ergebnis:
Es werden -nicht plausibel- immer nur 3 gleiche Userdatensätze ausgegeben. Bei diesen scheint die Prüfung nur für die ersten 250 übertragenen Zeichen des LCHR-Feldes USR04-PROFS zu erfolgen.Anscheinend wird also erstens die Schleife nicht für das gesamte LCHR-Feld durchlaufen und es werden zweitens nicht alle möglichen USR04-Datensätze geprüft.
Was mache ich da falsch?
Freundliche Grüße
Werner Kriesell