Struktur besorgen

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

Struktur besorgen

Beitrag von NLengner (ForumUser / 31 / 6 / 2 ) » 06.12.2019 12:46
Hallo zusammen,

ich habe momentan ein Methode, in diese gebe ich eine Tabelle und eine Struktur.
Ich habe eine große Liste an aufgaben und eine davon ist es, den Parameter IP_STRUCTURE zu entfernen. Ich soll die Struktur in der Methode irgendwie besorgen. Dazu soll ich nicht mit den RTTS klassen zu arbeiten(?) zumindest nicht neu erstellen.

Kann mir jemand helfen bitte?
Hier das Coding:

Code: Alles auswählen.

  METHOD formate.
    FIELD-SYMBOLS: <infty>     TYPE ANY TABLE,
                   <structure> TYPE any.

    ASSIGN ip_data->* TO <infty>.
    ASSIGN ip_structure->* TO <structure>.

    DATA: lt_csv_tab  TYPE TABLE OF string,
          typedescr   TYPE REF TO cl_abap_typedescr,
          structdescr TYPE REF TO cl_abap_structdescr.

    CALL METHOD cl_abap_typedescr=>describe_by_data_ref
      EXPORTING
        p_data_ref           = ip_structure    " Referenz auf zu beschreibenes Datenobjekt
      RECEIVING
        p_descr_ref          = typedescr    " Referenz auf Beschreibungsobjekt
      EXCEPTIONS
        reference_is_initial = 1
        OTHERS               = 2.
    IF sy-subrc <> 0.
      RAISE EXCEPTION TYPE zcx_formate_error.
    ENDIF.

    structdescr ?= typedescr.

    lt_csv_tab = ip_uploaded_csv.

    LOOP AT lt_csv_tab REFERENCE INTO DATA(input).
      IF sy-tabix = 1.
        SPLIT input->* AT ';' INTO TABLE DATA(header).
        DATA(index_sprps) = line_index( header[ table_line = 'SPRPS' ] ).
        CHECK index_sprps IS NOT INITIAL.
      ELSE.
        SPLIT  input->* AT ';' INTO TABLE DATA(fields).

        IF fields[ index_sprps ] IS NOT INITIAL.
          CONTINUE.
        ENDIF.

        LOOP AT fields REFERENCE INTO DATA(field).
          ASSIGN COMPONENT header[ sy-tabix ] OF STRUCTURE <structure> TO FIELD-SYMBOL(<cell>).
          CASE structdescr->get_component_type( header[ sy-tabix ] )->type_kind.
            WHEN cl_abap_typedescr=>typekind_packed.
              TRANSLATE field->* USING ',.'.
            WHEN cl_abap_typedescr=>typekind_date.
              IF find_regex( ip_regex = '\d\d\.\d\d.\d\d\d\d' ip_text  = field->* ) = abap_true.
                <cell> = |{ field->*+6(4) }{ field->*+3(2) }{ field->*(2) }|.
              ELSEIF find_regex( ip_regex = '\d\d\d\d\-\d\d\-\d\d' ip_text  = field->* ) =  abap_true.
                REPLACE ALL OCCURRENCES OF '-' IN field->* WITH ''.
                <cell> = field->*.
              ENDIF.
            WHEN OTHERS.
              <cell> = field->*.
          ENDCASE.

        ENDLOOP.
        INSERT <structure> INTO TABLE <infty>.
        IF sy-subrc <> 0.
          RAISE EXCEPTION TYPE zcx_formate_error.
        ENDIF.
        CLEAR <structure>.
      ENDIF.

    ENDLOOP.
    SORT <infty> ASCENDING BY ('BEGDA') ('PERNR') ('SUBTY').
    ep_table = <infty>.
  ENDMETHOD.


Re: Struktur besorgen

Beitrag von DeathAndPain (Top Expert / 1423 / 153 / 325 ) » 06.12.2019 14:15
Ist das eine Übungsaufgabe oder eine produktive Tätigkeit? Dein Coding sieht nach Letzterem aus, aber weshalb sollte man Dir dann verbieten, RTTS zu nutzen? Das halte ich hier für den Weg der Wahl.

Re: Struktur besorgen

Beitrag von NLengner (ForumUser / 31 / 6 / 2 ) » 12.12.2019 14:33
Ist das eine Übungsaufgabe oder eine produktive Tätigkeit? Dein Coding sieht nach Letzterem aus, aber weshalb sollte man Dir dann verbieten, RTTS zu nutzen? Das halte ich hier für den Weg der Wahl.
Wie du schon erkannt hast, ist es für eine Produktive Tätigkeit.
Ich habe mich nochmal informiert und ich solle einfach nur den Import Parameter weg lassen und aus der mitgegeben Tabelle die Struktur holen.

Mir stellt sich nun die Frage. Wieso soll ich die Struktur in der statt vor der Methode die Struktur erstellen?
Die Struktur brauch ich außerhalb der Methode sowieso noch einmal.

Viele Grüße

Re: Struktur besorgen

Beitrag von black_adept (Top Expert / 3411 / 66 / 656 ) » 12.12.2019 16:06
Ist EP_TABLE , in die du ganz am Ende deine gesplitteten Daten einfügst vom richtigen Typ der in der Übergabestruktur IP_STRUCTURE benannt wird?
Wenn ja, dann:

Code: Alles auswählen.

APPEND INITIAL LINE TO ep_table ASSIGNING FIELD-SYMBOL(<ls_data>).
Und dann statt ASSIGN COMONENT header[ sy-tabix ] einfach ein ASSIGN COMPONENT sy-tabix
Damit kommt man dann auch ohne RTTI aus.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Struktur besorgen

Beitrag von NLengner (ForumUser / 31 / 6 / 2 ) » 12.12.2019 17:04
black_adept hat geschrieben:
12.12.2019 16:06
Ist EP_TABLE , in die du ganz am Ende deine gesplitteten Daten einfügst vom richtigen Typ der in der Übergabestruktur IP_STRUCTURE benannt wird?
Wenn ja, dann:

Code: Alles auswählen.

APPEND INITIAL LINE TO ep_table ASSIGNING FIELD-SYMBOL(<ls_data>).
Und dann statt ASSIGN COMONENT header[ sy-tabix ] einfach ein ASSIGN COMPONENT sy-tabix
Damit kommt man dann auch ohne RTTI aus.
Verstehe ich das Richtig, dass du wissen möchtest welchen Typ EP_Table hat?
Ich habe ihm den TYP "ANY TABLE" gegeben.

Mein jetziger Lösungsweg wäre:

Code: Alles auswählen.

    DATA: s_ip_table  TYPE REF TO data.


    CREATE DATA s_ip_table LIKE LINE OF <infty>.
    ASSIGN s_ip_table->* TO <structure>.

Re: Struktur besorgen

Beitrag von black_adept (Top Expert / 3411 / 66 / 656 ) » 13.12.2019 00:35
Na - du wirfst doch eine CSV-Datei in eine Tabelle, oder?
Wenn die CSV-Datei der Struktur der Tabelle entspricht, kommst du doch ohne das ganze Brimborium aus indem du statt mit Feldnamen via Index auf die Felder der Zeile zugreifst.
Und die Zeile kannst du mittels LOOP AT ep_table ASSIGN zur Laufzeit auf die korrekte Zeilenstruktur setzen.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Seite 1 von 1

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und besseren Inhalt:

Vergleichbare Themen

Daten für Smartforms besorgen
von vhoffe » 22.01.2007 10:44
Struktur als Kopie von vorhandener Struktur anlegen
von Marwin » 20.04.2005 15:29
Struktur
von swonny » 04.09.2008 17:16
struktur
von swonny » 19.06.2007 10:34
PS Struktur
von SAP_ENTWICKLER » 23.11.2015 11:12