Langtexte zu Rollen

Getting started ... Alles für einen gelungenen Start.
14 Beiträge • Seite 1 von 1
14 Beiträge Seite 1 von 1

Langtexte zu Rollen

Beitrag von Spookykid (Specialist / 140 / 28 / 0 ) »
Hallo liebes Forum,

ich habe die Aufgabe Langtexte zu einigen Rollen (1600 St.) her-auszusuchen und in ein Excel File einzutragen. Ich möchte, dass der komplette Langtext der Rolle in einer Zelle steht. Ich habe mir folgendes überlegt:

Code: Alles auswählen.

REPORT  Z_AUSWERTUNG_ROLLEN.

Types: BEGIN OF ty_itab,

       agr_name type agr_define-agr_name,
       agr_text type agr_texts-line,
       END OF ty_itab.

data lt_itab type TABLE OF ty_itab.
data lt_rol Type TABLE OF agr_define.
data lt_rol_txt TYPE TABLE OF agr_texts.

FIELD-SYMBOLS: <z1> type agr_define, <z2> TYPE agr_texts.

* Abfrage der gewünschten Rollen
Select * FROM agr_define into CORRESPONDING FIELDS OF TABLE lt_rol
  where agr_define~agr_name LIKE 'Z:%'.

  SORT lt_rol ASCENDING.

* Abfrage der gewünschten Langtexte
 Select * FROM agr_texts into CORRESPONDING FIELDS OF TABLE lt_rol_txt
  where agr_texts~agr_name LIKE 'Z:%'.

  SORT lt_rol_txt ASCENDING.


  data ls_roltxt type ty_itab-agr_text.
  data wa_itab type ty_itab.

* Zusammenfügen der Rollen und der entspechenden Langtexte in neuer Datenstruktur.
  loop at lt_rol ASSIGNING <z1>.
    loop at lt_rol_txt ASSIGNING <z2>
      where agr_name = <z1>-agr_name.
      while sy-subrc = 0.
        CONCATENATE <z2>-text ' ' INTO ls_roltxt.
        ENDWHILE.
        endloop.
        Write: <z1>-agr_name to wa_itab-agr_name, ls_roltxt to wa_itab-agr_text.
        Append wa_itab to lt_itab.
        clear: ls_roltxt, wa_itab.
        endloop.
Angenommen, es gäbe den Langtext nur in einer Sprache pro Rolle, dann müsste dieser Code doch funktionieren, oder?

Irgendwie laufe ich jedoch in eine Endlosschleife.

Das Feld agr_text im Typ ty_itab ist nicht lang genug um den kompletten Langtext abzuspeichern. Ich habe versucht das Feld mit LCHR zu typisieren, jedoch hat das nicht funktioniert.

Hat jemand ne Idee?

Viele Dank im Voraus
Spookykid

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Langtexte zu Rollen

Beitrag von casman (Specialist / 420 / 1 / 63 ) »
Hi Spookykid,

versuch doch mal folgendes:

Code: Alles auswählen.

Types: BEGIN OF ty_itab,

       agr_name type agr_define-agr_name,
       agr_text type string,
       END OF ty_itab.
und dann:

Code: Alles auswählen.

loop at lt_rol ASSIGNING <z1>.
    loop at lt_rol_txt ASSIGNING <z2>
      where agr_name = <z1>-agr_name.
         CONCATENATE <z2>-text ' ' INTO ls_roltxt.
      endloop.
Prinzipiell kannst du dir auch den äusseren Loop sparen, da du ja den Rollennamen auch in der AGR_TEXTS hast. Somit kannst du dir das auch per AT NEW Befehl zusammenbasteln. Schau dir mal die Hilfe dazu an.

Re: Langtexte zu Rollen

Beitrag von Spookykid (Specialist / 140 / 28 / 0 ) »
"WA_ITAB-AGR_TEXT" muß ein zeichenartiges Feld sein (Datentyp C, N, D
Hmm, wie gerne würde man mancham "With Header line " anfügen.

Wie kann ich den Rollennamen und den zusammengefügten String in eine Zeile der IT einfügen? Hab irgendwie den Überblick verloren.

Re: Langtexte zu Rollen

Beitrag von casman (Specialist / 420 / 1 / 63 ) »
Hola,

denke das liegt am WRITE TO, da nimmt man eigentlich z.B. nur für formatierte Ausgaben von Datum, Währung etc.:

Code: Alles auswählen.

 Write: <z1>-agr_name to wa_itab-agr_name, ls_roltxt to wa_itab-agr_text.
Versuche einfach:

Code: Alles auswählen.

 wa_itab-agr_name = <z1>-agr_name.
wa_itab-agr_text = ls_roltxt.

Re: Langtexte zu Rollen

Beitrag von Spookykid (Specialist / 140 / 28 / 0 ) »
Danke für den Tipp. Ich habe aber in der Variabel ls_roltxt immer nur die letzte Zeile der der Texte in der Tabelle agr_texts. Stimmt was mit meinem Concatenate Befehl nicht?
agr_text.jpg

Re: Langtexte zu Rollen

Beitrag von casman (Specialist / 420 / 1 / 63 ) »
Ach Mist, wusste doch ich hab was vergessen. Du conatenates natürlich jetzt nur den aktuellen Wert und ein Leerzeichen in deinen String.
Dummerweise kannst du in ABAP keine zwei Strings miteinander Concatenaten, also musst du dir wohl eine komplexere Lösung überlegen, oder du nimmst zum Verbinden temporör einen CHAR3000, damit würdest du 36 Zeilen verarbeiten können und der Concatenate-Befehl funktioniert -> dann könnste du auf den STring kopieren und hättest dir die unnötigen Leerzeichen gespart!

Andere Ideen natürlich willkommen. :-)

Re: Langtexte zu Rollen

Beitrag von Spookykid (Specialist / 140 / 28 / 0 ) »

Code: Alles auswählen.

data ls_roltxt type string.


  loop at lt_rol ASSIGNING <z1>.
    loop at lt_rol_txt ASSIGNING <z2>
      where agr_name = <z1>-agr_name.
       CONCATENATE ls_roltxt ' ' <z2>-text ' ' INTO ls_roltxt.
        endloop.

         wa_itab-agr_name = <z1>-agr_name.
         wa_itab-agr_text = ls_roltxt.

        APPEND wa_itab to lt_itab.
        clear: ls_roltxt, wa_itab.
        endloop.

Was stimmt hier nicht? Nach der dritten Zeile im Langtext wird abgebrochen. Obwohl nur ein String im CONCATENATE vorkommt.

Re: Langtexte zu Rollen

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
Probiers mal so rum

Code: Alles auswählen.

Types: 
  BEGIN OF ty_itab,
    agr_name type agr_define-agr_name,
    agr_text type string,
  END OF ty_itab.
data:
  lt_itab type standard table of ty_itab with default key.
field-symbols: 
  <ls_itab> type ty_itab.

loop at lt_rol ASSIGNING <z1>.
  append initial line to lt_itab assigning <ls_itab>.    
  loop at lt_rol_txt ASSIGNING <z2> where agr_name EQ <z1>-agr_name.
    CONCATENATE <ls_itab>-agr_text <z2>-text INTO <ls_itab>-agr_text separated by space.
  endloop.
  shift <ls_itab>-agr_text by 1 places left.
endloop.
Das shift entfernt das erste Leerzeicehn im String, welches beim ersten Durchlauf entsteht (concatenate <leer> <z2>-text into <ls_itab>-agr_text separated by space). Mit "append initial line ... assigning ... " ersparst du dir ein Datenfeld anzulegen und dies bei jeden Schleifendurchlauf zu löschen. Und da deine Ausgabetabelle bereits ein String-Feld beinhaltet ersparst du dir auch ein eigenes String-Feld fürs concatenate.
Spookykid hat geschrieben:Was stimmt hier nicht? Nach der dritten Zeile im Langtext wird abgebrochen. Obwohl nur ein String im CONCATENATE vorkommt.
Wie meinst du das? Hast du schon im Debugger kontrolliert ob die Tabelle wirklich nicht richtig befüllt ist oder verlässt du dich auf deine Ausgabe? ALV-Grid bzw. SALV können nicht mehr als 255 Zeichen anzeigen. Ich sehe da nämlich keinen Grund warum die Texte nicht vollständig concateniert werden. Hast du deine Datenbankabfrage kontrolliert? Vielleicht ließt du nur 3 Zeilen aus.

lg ADT
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Langtexte zu Rollen

Beitrag von Spookykid (Specialist / 140 / 28 / 0 ) »
Hey ADT,

erstmal vielen Dank für die Mühe, die du dir gemacht hast. Ich gebe die Ergebnisse bisher über ne geloopte Write-Ausgabe aus. Ich habe mir das Verbinden der Texte mal über den Debugger angeschaut und habe 2 Beispiele ausprobiert. Das erste mal wurden 255 Zeichen in das String Feld geschrieben, das zweite mal waren es 254 Zeichen (Kompletter Langtext ist um einiges länger).

Ich dachte die String Struktur wäre variabel? An was kann das liegen. Die Info zum Concatenate gibt folgendes aus:
Falls das Zielfeld result eine feste Länge hat und diese größer als die benötigte Länge ist, wird es rechts mit Leerzeichen bzw. hexadezimal 0 aufgefüllt. Falls die Länge des Zielfelds kürzer ist, wird die Verkettung rechts abgeschnitten. Falls das Zielfeld ein String ist, wird seine Länge entsprechend angepasst.
An was könnte das liegen?

P.S Der Write Befehl gibt nicht mal die kompletten 255 C aus.

Grüße Spookykid

Re: Langtexte zu Rollen

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
hmmm...
Verwendest du den "alten" Debugger oder den "neuen".
Im neuen Dubugger gibt es den Karteireiter "Detailanzeige" wenn du hier im Engabefeld "lt_itab[1]-agr_text" sollte er den Inhalt des Feldes in der ersten Zeile der Tabelle mit allen Informationen anzeigen. Unter Datentyp sollte dann auch stehen "CSTRING{...}" wobei in der Klammer die tatsächliche Textlänge drinnensteht.

Der Debugger kann nämlich auch nur 255 Zeichen direkt anzeigen ;) Alternative gibt es noch ein Drop-Downfeld für das Anzeigeformat (Sicht) und hier kannst eine andere Darstellung auswählen

Alternativ könntest du auch mit der Funktion "strlen( )" die Zeilenlänge zusätzlich beim Write-Befehl mitausgeben lassen um festzustellen wie lang der Inhalt tatsächlich ist.
Ich glaub nämlich, dass es sich hier um einen Fehler bei der Ausgabe handelt. 255 und 254 Zeichen sind die ersten Anzeichen dafür ;)

lg
ADT

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
Spookykid

Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Langtexte zu Rollen

Beitrag von Spookykid (Specialist / 140 / 28 / 0 ) »
Danke für den Tipp mit der Detailanzeige. In dem String steckt tatsächlich der komplette Langtext. Er wurde leider nur nicht ausgegeben bzw. angezeigt. Ich werde noch ne Funktion einbauen, die mir die Werte extrahiert, wenn der Weg über ALV und dann manuelle Extraktion nicht funktioniert. Hast du vielleicht noch eine elegantere Methode?

Viele Grüße
Spookykid

Re: Langtexte zu Rollen

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
Naja, eigentlich hätte ich schon write vorgeschlagen, aber da kann es aufgrund der Einstellungen des List-Prozessors uU zu einer Beschneidung der Daten kommen.
Siehe dazu auch die Hilfe von write und da besonders den Abschnitt bzgl. Ausgabelänge.
(Hab ich bisher auch nicht gewusst bzw. noch kein Problem damit gehabt)
Hast du vielleicht irgendwo die Line-Size des Reports angegeben? (REPORT ... LINE-SIZE ... oder NEW-PAGE ... LINE-SIZE ... )

Alternativ könntest du...
... dir eine HTML-Ausgabe zusammenbauen und das Ganze im HTML-Viewer ausgeben
... den String nach dem concatenate wieder in 255 Zeichen Häppchen zerteilen und den Text in mehreren Zeilen im ALV oder per write ausgeben
... den String in 100 Zeichen Häppchen zerteilen und in einem Tree-View darstellen
... das mit dem concatenate überhaupt weglassen ;)

Code: Alles auswählen.

data:
  ld_name type agr_define-agr_name.

loop at lt_rol ASSIGNING <z1>.
  ld_name = <z1>-agr_name.    
  loop at lt_rol_txt ASSIGNING <z2> where agr_name EQ <z1>-agr_name.
    new-line.
    write: ld_name, <z2>-text.
    clear ld_name.
  endloop.
endloop.
Durch das "clear" wird nur in der ersten Zeile der Ausgabe der Name ausgegeben und in allen weiteren Zeilen wird nur mehr der "Abstand" des Datenelementes eingefügt.

lg ADT

EDIT: Die Ausgabe funktioniert so natürlich nur wenn Texte zu einer Rolle vorhanden sind ;)

Besser

Code: Alles auswählen.

data:
  ld_name type agr_define-agr_name.

loop at lt_rol ASSIGNING <z1>.
  ld_name = <z1>-agr_name.    
  loop at lt_rol_txt ASSIGNING <z2> where agr_name EQ <z1>-agr_name.
    new-line.
    write: ld_name, <z2>-text.
    clear ld_name.
  endloop.
  if ld_name is not initial.
    new-line.
    write: ld_name.
  endif.
endloop.
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Langtexte zu Rollen

Beitrag von Spookykid (Specialist / 140 / 28 / 0 ) »
Ich danke dir, ich lasse mir die ganze Geschichte per 'SAP_CONVERT_TO_CSV_FORMAT' ausgeben. Hierzu musste ich zwar das Langtext Feld in ein (4096) type C umwandeln, jedoch nicht wirklich ein Problem, da keiner in Originalform mehr als 30 Zeilen hat.

Wie ist das eigentlich möglich, dass man den C Datentyp auf 4096 Zeichen beschränt, obwohl der standardmäßig bei 255 Zeichen endet?

Viele Grüße und danke für deinen Einsatz.

Das mit der HTML Ausgabe muss ich mir merken.

Re: Langtexte zu Rollen

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
hi!

ähm... C(har) endet nicht automatisch bei 255 Zeichen. Das mit den 255 Zeichen hat mit der Größenbeschränkung am Dynpro zu tun, die können nämlich aufgrund von techn. Einschränkungen nicht mehr Zeichen darstellen (Zwei Zeichen HEX für die Feldlänge = max. 255 Zeichen DEC). Ich glaub auch, dass damals wie Dynpros entstanden sind, keiner gedacht hat das man mal mehr als 255 Zeichen brauchen wird (z.B.: Bildschirmauflösungen jenseits von 3096). Ungefähr so wie damals als man 640KB RAM für ausreichend empfunden hat :P

Grundsätzlich kann ein C(har) bel. viele Zeichen aufnehmen (ich kenn Char-Typen im DDIC mit weit über 8000 Zeichen).
ABER es gibt dennoch eine Längenbeschränkung die AUCH für Strings gilt: 4096 KB! Wobei dieser Wert systemabhängig von der Basis vorgegeben bzw. eingestellt wird (Systemparameter).

mfg
ADT
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Seite 1 von 1

Vergleichbare Themen

1
Antw.
4884
Views
Rollen und ihre Langtexte
von Spookykid » 11.04.2011 17:01 • Verfasst in SAP - Allgemeines
0
Antw.
1596
Views
Rollen Upload per RFC
von Ben2408 » 14.06.2017 09:38 • Verfasst in Basis
2
Antw.
1874
Views
Verteilung von Rollen
von Littlered » 27.05.2005 10:50 • Verfasst in ABAP® für Anfänger
1
Antw.
1276
Views
Wie sperrt man Rollen vor Bearbeitung?
von Timoniac » 13.11.2017 14:18 • Verfasst in SAP - Allgemeines
2
Antw.
7672
Views
SAP Benutzer mit Rollen vergleichen
von cydox » 11.08.2008 23:45 • Verfasst in SAP - Allgemeines

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Aktuelle Forenbeiträge

Zugriff auf Daten via Webdav
vor 16 Stunden von msfox 1 / 31
Interne Tabelle
vor 16 Stunden von sap_enthusiast 3 / 162
Zwischensumme Adobe Forms
vor 3 Tagen von Lucyalison 1 / 71

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Aktuelle Forenbeiträge

Zugriff auf Daten via Webdav
vor 16 Stunden von msfox 1 / 31
Interne Tabelle
vor 16 Stunden von sap_enthusiast 3 / 162
Zwischensumme Adobe Forms
vor 3 Tagen von Lucyalison 1 / 71

Unbeantwortete Forenbeiträge

Zugriff auf Daten via Webdav
vor 16 Stunden von msfox 1 / 31
Zwischensumme Adobe Forms
vor 3 Tagen von Lucyalison 1 / 71
Group Items auf einer Filterbar
vor einer Woche von Bright4.5 1 / 111