Tabelle als Attribut bei einer Methode

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

Tabelle als Attribut bei einer Methode

Beitrag von Julia.hrtm (ForumUser / 8 / 1 / 4 ) »
Hallo,

ich habe eine Klasse, welche eine Methode beinhaltet für if_http_extension~handle_request. In dieser Methode möchte ich eine Transaktion aufrufen mit vorab festgelegten Eingabewerten und daraus die entstehende Tabelle speichern. Also an sich wie als würde man die Transaktion über die Benutzeroberfläche in SAP ausführen, nur halt ohne die Benutzeroberfläche.

Damit ich das machen kann habe ich den Tabellentyp "bdcdata" für meine Ausgabetabelle.

In meiner Methode starte ich folgenden Methodenaufruf, mit vorheriger Deklaration:

Code: Alles auswählen.

  DATA BEGIN OF selection_data.
  DATA: i_werk TYPE  werks,
        i_pernr TYPE  pernr_d,
        i_start TYPE  ru_isdd,
        i_end TYPE  ru_iedd.
  DATA END OF selection_data.

  DATA: lt_bdcdata TYPE TABLE OF bdcdata,
        ls_bdcdata TYPE bdcdata,
        lt_messages TYPE TABLE OF bapiret2,
        lv_return TYPE bapiret2,
        lt_return_tab TYPE TABLE OF bapiret2.
  ...
  me->prepare_bdc_data(
    EXPORTING
      i_werk = selection_data-i_werk
      i_pernr = selection_data-i_pernr
      i_start = selection_data-i_start
      i_end = selection_data-i_end
    CHANGING
      ct_bdcdata = lt_bdcdata ).

    CALL TRANSACTION 'ZPPWAGE' USING lt_bdcdata
    MODE 'N'
    UPDATE 'S'
    MESSAGES INTO lt_return_tab.

    LOOP AT lt_return_tab INTO lv_return.
      WRITE: / lv_return-message.
    ENDLOOP.
Meine Methode prepare_bdc_data ist wie folgt aufgebaut:

Code: Alles auswählen.

METHOD prepare_bdc_data.
  DATA: ls_bdcdata TYPE bdcdata.

  CLEAR ls_bdcdata.
  ls_bdcdata-program = 'Z_PP_WAGE'.
  ls_bdcdata-dynpro  = '1000'.
  ls_bdcdata-dynbegin = 'X'.
  APPEND ls_bdcdata TO ct_bdcdata.

  CLEAR ls_bdcdata.
  ls_bdcdata-fnam = 'BDC_OKCODE'.
  ls_bdcdata-fval = '/00'.
  APPEND ls_bdcdata TO ct_bdcdata.

  CLEAR ls_bdcdata.
  ls_bdcdata-fnam = 'PLANT'.
  ls_bdcdata-fval = i_werk.
  APPEND ls_bdcdata TO ct_bdcdata.

  CLEAR ls_bdcdata.
  ls_bdcdata-fnam = 'EMPLOYEE_NO'.
  ls_bdcdata-fval = i_pernr.
  APPEND ls_bdcdata TO ct_bdcdata.

  CLEAR ls_bdcdata.
  ls_bdcdata-fnam = 'LOGIN_DATE'.
  ls_bdcdata-fval = i_start.
  APPEND ls_bdcdata TO ct_bdcdata.

  CLEAR ls_bdcdata.
  ls_bdcdata-fnam = 'LOGOUT_DATE'.
  ls_bdcdata-fval = i_end.
  APPEND ls_bdcdata TO ct_bdcdata.
ENDMETHOD.
Bei der Methode in welcher ich die andere Methode aufrufe bekomm ich folgende Fehlermeldung: "LT_BDCDATA" ist nicht typkompatibel zum formalen Parameter "CT_BDCDATA"
Ber der Methode prepare_bdc_data bekomme ich pro Zeile in welcher "ct_bdcdata" verwendet wird folgenden Feher: "CT_BDCDATA" ist keine interne Tabelle.

In der Parameterliste meiner Methode prepare_bdc_data habe ich die jeweiligen Variablen angelegt, jedoch bei ct_bdcdata kann ich nicht type table of als Typisierung einstellen.
Screenshot 2024-10-28 130651.png

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


Re: Tabelle als Attribut bei einer Methode

Beitrag von PeterPaletti (Specialist / 348 / 32 / 97 ) »
BDCDATA ist eine Struktur, der zugehörige Tabellentyp heißt BDCDATA_TAB.

Re: Tabelle als Attribut bei einer Methode

Beitrag von DeathAndPain (Top Expert / 1956 / 260 / 415 ) »
Peters Antwort ist richtig. Ich würde an dieser Stelle aber gerne einhaken und Dich noch auf etwas anderes hinweisen. Nicht böse gemeint, aber Dein Codestil ist antik; das hätte man in ABAP-Releases von vor 20 Jahren so programmiert. Ich frage mich immer, warum die Leute heute immer noch so programmieren. Lernt ihr das noch so? Oder bist Du noch von der alten Schule? Ich würde das wirklich gerne wissen.

Mit modernem ABAP würde Deine Methode prepare_bdcdata lauten:

Code: Alles auswählen.

ct_bdcdata = VALUE #( ( program  = 'Z_PP_WAGE'
                        dynpro   = '1000'
                        dynbegin = 'X' )

                      ( fnam     = 'BDC_OKCODE'
                        fval     = '/00' )

                      ( fnam     = 'PLANT'
                        fval     = i_werk )

                      ( fnam     = 'EMPLOYEE_NO'
                        fval     = i_pernr )

                      ( fnam     = 'LOGIN_DATE'
                        fval     = i_start )

                      ( fnam     = 'LOGOUT_DATE'
                        fval     = 'i_end' ) ).
Das ist alles. Das ist Deine ganze Methode. Nur dieser eine Befehl. Du brauchst keine Hilfsvariable ls_bdcdata, Du brauchst keine CLEARs, und Du brauchst die ganzen APPENDs nicht. Probier es gerne aus; Du wirst sehen, dass es funktioniert.

Ich denke, der Vorteil (gerade auch in optischer Hinsicht) ist offensichtlich.

Re: Tabelle als Attribut bei einer Methode

Beitrag von a-dead-trousers (Top Expert / 4406 / 224 / 1184 ) »
DeathAndPain hat geschrieben:
28.10.2024 21:07
Des von vor 20 Jahren so programmiert. Ich frage mich immer, warum die Leute heute immer noch so programmieren. Lernt ihr das noch so? Oder bist Du noch von der alten Schule? Ich würde das wirklich gerne wissen.
Für mich schaut das sehr nach dem Code aus, den der Transaktionsrecorder verwendet. 1:1 aus BDCRECX1_S kopiert.
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: Tabelle als Attribut bei einer Methode

Beitrag von DeathAndPain (Top Expert / 1956 / 260 / 415 ) »
Hm. BDCRECX1_S gibt es auf meinem System nicht, aber BDCRECX1 natürlich. Die Form BDC_FIELD enthält da aber noch eine IF-Klausel, die hier fehlt.
Aber vielleicht entsteht solch Code, wenn man mit dem Transaktionsrekorder automatisch einen Code erzeugen lässt. Da bin ich grad zu faul zu das auszuprobieren.

Wenn man das Ganze freilich in eigene Methoden einbaut, also bis auf OO-Level hochhebt, dann würde ich schon anregen, dann auch den eigentlichen Code zu modernisieren (mal abgesehen davon, dass PERFORMs dann nicht funktionieren).

Seite 1 von 1

Vergleichbare Themen

11
Antw.
10118
Views
Speichern einer Internen Tabelle als Attribut
von OO-Anfänger » 03.01.2005 10:51 • Verfasst in ABAP Objects®
2
Antw.
1663
Views
Tabelle gesucht - Methode / Ereignis
von gerritnova » 29.10.2009 09:56 • Verfasst in ABAP Objects®
18
Antw.
4797
Views
Lookup Tabelle in Methode lesen und erweitern
von toni89 » 17.09.2019 12:41 • Verfasst in ABAP Objects®
10
Antw.
1121
Views
2
Antw.
2700
Views
BAdI Attribut
von Neuling_20 » 25.10.2012 09:42 • Verfasst in ABAP® Core

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.