Buch Dienstleistungen Downloads Diverses Forum Impressum

Auswertung eines LCHR-Feldes

Fragen, Anregungen ... zum Kapitel InfoSet Query

Auswertung eines LCHR-Feldes

Beitragvon wkriesell » 18.11.2011, 09:34

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
wkriesell
 
Beiträge: 3
Registriert: 18.11.2011, 08:06

Auswertung eines LCHR-Feldes

Google Werbung

Google Werbung
 

Re: Auswertung eines LCHR-Feldes

Beitragvon wreichelt » 20.11.2011, 14:12

Hallo Werner,

kannst Du die Prüfung nicht mittels IF ... CS machen (bitte schaue Dir die Hilfe zum IF-Befehl mit der F1-Taste mal an) ?

Gruß
Wolfgang
wreichelt
 
Beiträge: 29
Registriert: 30.05.2009, 09:26

Re: Auswertung eines LCHR-Feldes

Beitragvon wkriesell » 21.11.2011, 09:05

Hallo Wolfgang,
mache ich das nicht? Ich prüfe doch per IF, ob der logische Audruck "checkstring CS searchstring" wahr ist. Wenn das der Fall ist soll die Variable stringfound = 'Y' gesetzt werden.
Oder meintest Du, dass ich das Ganze überhaupt nicht per Schleife, d.h. portionsweise, machen muss, sondern gleich den ganzen Inhalt der LCHR-Variable auf das Vorliegen des Teilstrings prüfen könnte? Das wäre in der Tat einfacher :D ...

Viele Grüße
Werner
wkriesell
 
Beiträge: 3
Registriert: 18.11.2011, 08:06

Re: Auswertung eines LCHR-Feldes

Beitragvon wreichelt » 21.11.2011, 12:51

Hallo Werner,

ja so meinte ich das.

Gruß
Wolfgang
wreichelt
 
Beiträge: 29
Registriert: 30.05.2009, 09:26

Re: Auswertung eines LCHR-Feldes

Beitragvon wkriesell » 22.11.2011, 10:25

Hallo Wolfgang,
2 Sachen dazu:
Ich habe meinen Fehler gefunden: er kam wohl dadurch zustande, dass ich mit der Tabelle USR04 noch andere USRxx-Tabellen verknüpft hatte (und das ohne left outer join). Nach dem das korrgiert war, bekomme ich genau das heraus, was ich erwartet hatte. Es hatte also nichts mit dem Coding selbst zu tun.
Danach habe ich das Coding entsprechend Deines Vorschlages testweise so geändert, dass das LCHR-Feld direkt auf das Vorhandensein des Suchstrings geprüft wurde:
stringfound = 'N' .
IF USR04-PROFS CS searchstring .
stringfound = 'Y' .
ELSE .
stringfound = 'N' .
ENDIF .

Das hat nicht geklappt. Wenn´s geklappt hätte, hätte ich auch nicht recht verstanden, warum man das LCHR-Feld USR04-PROFS im Infoset nicht auswählen kann (ist ausgegraut) und daher später in der zugehörigen Query auch nicht gleich als Selektionsfeld festlegen konnte.

Besten Dank für die Tipps!
Viele Grüße
Werner
wkriesell
 
Beiträge: 3
Registriert: 18.11.2011, 08:06


Zurück zu InfoSet Query

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron