gelöst Aufruf statischer privater Attribute


Getting started ... Alles für einen gelungenen Start.

Moderatoren: Jan, Steff

gelöst Aufruf statischer privater Attribute

Beitragvon Hotzenplotz » 13.01.2018, 18:28

Hallo Leidensgenossen,
Habe zwei statische Klassen mit statischen privaten Attributen erstellt. Ein privates statisches Attribut habe ich nach fetch/ array mit Wert versorgt. Nun versuche ich aus der zweiten Klasse heraus eine public Method der ersten Klasse aufzurufen, um den Wert des vorherig versorgten privaten Attributes von Klasse 1 auszulesen. Das will mir leider nicht so recht gelingen.
Ich rufe also eine private Methode von Klasse 2 auf, in der wiederum ein Methodenaufruf aus Klasse 1 gerufen wird. Klappt leider nicht. Habe da diese zwei Varianten, welche jedoch beide nicht funktionieren:

lv_atttribut = lcl_klasse1=>export_kostenst( ex_kostenst )
Fehlermeldung:
Innerhalb einer statischen Methode ist ohne Zusatzangabe nur ein
Zugriff auf statische Attribute möglich.


CALL METHOD lcl_klasse1=>export_kostenst EXPORTING ex_kostenst.
Fehlermeldung:
Nach "EXPORTING" wurde "parameter = ..." erwartet.

Lasst den Räuber wissen, wenn er hier noch mehr an Info stecken soll.
Hotzenplotz
ForumUser
 
Beiträge: 18
Registriert: 12.01.2018, 12:19
Dank erhalten: 2 mal
Ich bin: Entwickler/in

Sponsor

Alte ABAP-Entwicklerweisheit: Weißt du weder aus noch ein, baust du einen BADI ein

Re: Aufruf statischer privater Attribute

Beitragvon a-dead-trousers » 13.01.2018, 20:23

Beim zweiten Aufruf fehlt definitiv die Quell-Variable:
Code: Alles auswählen
CALL METHOD lcl_klasse1=>export_kostenst EXPORTING ex_kostenst = lv_atttribut.

Zum generellen Problem kann ich nichts sagen, weil deine Code-Fragmente zuwenig "Inhalt" haben. Wo bzw. wie ist lv_atttribut definiert?
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.07
Basis: 7.40

Für diese Nachricht hat a-dead-trousers einen Dank bekommen :
Hotzenplotz
a-dead-trousers
Top Expert
 
Beiträge: 2996
Registriert: 07.02.2011, 13:40
Dank erhalten: 743 mal
Ich bin: Entwickler/in

Re: Aufruf statischer privater Attribute

Beitragvon Thomas R. » 15.01.2018, 06:55

Hallo Hotzenplotz,
der erste Fehler deutet an, dass Du lv_attribut nicht als statisches Attribut angelegt hast.

Es sollte mittels
Code: Alles auswählen
CLASS-DATA:
  lv_attribut TYPE ....

und nicht
Code: Alles auswählen
DATA:
  lv_attribut TYPE ...

definiert werden.

MfG
Thomas R.

Für diese Nachricht hat Thomas R. einen Dank bekommen :
Hotzenplotz
Thomas R.
Expert
 
Beiträge: 662
Registriert: 11.12.2002, 08:04
Dank erhalten: 25 mal

Re: Aufruf statischer privater Attribute

Beitragvon ewx » 15.01.2018, 09:14

ewx
Top Expert
 
Beiträge: 3708
Registriert: 04.08.2003, 19:55
Wohnort: Schleswig-Holstein
Dank erhalten: 282 mal

Re: Aufruf statischer privater Attribute

Beitragvon ralf.wenzel » 15.01.2018, 10:47

Für den geschilderten Fall halte ich das FRIENDS Konzept für nicht zielführend, weil man ohne Not die Kapselung durchlöchert, die der OP ja nicht aus Jux aufgebaut hat.


Ralf
ralf.wenzel
Top Expert
 
Beiträge: 3094
Registriert: 18.09.2004, 13:03
Wohnort: Hamburg
Dank erhalten: 176 mal
Ich bin: Freiberufler/in

Re: Aufruf statischer privater Attribute

Beitragvon Hotzenplotz » 16.01.2018, 08:53

Vielen Dank für die Rückmeldungen, glaube hier auch schon von "der toten Hose" den richtigen Wink bekommen zu haben:

Beim zweiten Aufruf fehlt definitiv die Quell-Variable:

Code: Alles auswählen
CALL METHOD lcl_klasse1=>export_kostenst EXPORTING ex_kostenst = lv_atttribut.

Kann aktuell leider an dieser Aufgabe nicht weiterarbeiten, mein Chef hat mir am Montag früh schon wieder eine andere "ganz wichtige Aufgabe" um die Ohren gehauen. Hoffe im Anschluss daran mich dem beschriebem wieder widmen zu können. Werde auf jeden Fall die Lösung hier bekannt geben.
Danke, erst einmal an alle. Bis in Kürze!
Hotzenplotz
ForumUser
 
Beiträge: 18
Registriert: 12.01.2018, 12:19
Dank erhalten: 2 mal
Ich bin: Entwickler/in

Re: Aufruf statischer privater Attribute

Beitragvon Hotzenplotz » 06.02.2018, 14:48

Hallo zusammen!
Ich habe mich wieder dem Thema angenommen und glaube auch die Lösung gefunden zu haben. Ausgangssituation ist:
Code: Alles auswählen
CLASS lcl_benutzerinfo DEFINITION.
  PUBLIC SECTION.
    CLASS-METHODS: select_userinfo.
    CLASS-METHODS: export_kostenst RETURNING value(re_kostenst) TYPE xubname.

  PRIVATE SECTION.
    CLASS-DATA: lv_benutzer TYPE xubname,
                lv_kostenst TYPE xukostl.

ENDCLASS.

*----------------------------------------------------------------------*
*       CLASS lcl_benutzerinfo IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_benutzerinfo IMPLEMENTATION.
  METHOD select_userinfo.
    lv_benutzer = sy-uname.
    SELECT SINGLE kostl FROM user_addr INTO lv_kostenst WHERE
      bname = lv_benutzer.
  ENDMETHOD.

  METHOD export_kostenst.
    re_kostenst = lv_kostenst.
  ENDMETHOD.

ENDCLASS.


Dann wollte ich von einer zweiten Klasse aus auf das vorherig deklariert und zugewiesene priv. Attribut lv_kostenst zugreifen:

Code: Alles auswählen
CLASS lcl_scanner DEFINITION.
  PUBLIC SECTION.
    CLASS-METHODS: get_kostenst.

  PRIVATE SECTION.
    CLASS-DATA: lv_kostenst TYPE xukostl.

ENDCLASS.                    "lcl_scanner DEFINITION

*----------------------------------------------------------------------*
*       CLASS lcl_scanner IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_scanner IMPLEMENTATION.
  METHOD get_kostenst.
    lv_kostenst = lcl_benutzerinfo=>export_kostenst( ).
  ENDMETHOD.                    "get_kostenstelle
ENDCLASS.


Mein Fehler lag darin, dass ich die Statische Methode export_kostenst nicht mit einem Returning Parameter deklariert hatte.
Hotzenplotz
ForumUser
 
Beiträge: 18
Registriert: 12.01.2018, 12:19
Dank erhalten: 2 mal
Ich bin: Entwickler/in

Re: Aufruf statischer privater Attribute

Beitragvon gtoXX » 25.02.2018, 20:06

a-dead-trousers hat geschrieben:Beim zweiten Aufruf fehlt definitiv die Quell-Variable:
Code: Alles auswählen
CALL METHOD lcl_klasse1=>export_kostenst EXPORTING ex_kostenst = lv_atttribut.

Zum generellen Problem kann ich nichts sagen, weil deine Code-Fragmente zuwenig "Inhalt" haben. Wo bzw. wie ist lv_atttribut definiert?



7.40 und immer noch CALL METHOD ? Really ?
gtoXX
Specialist
 
Beiträge: 111
Registriert: 27.03.2017, 12:14
Dank erhalten: 14 mal
Ich bin: Entwickler/in

Re: Aufruf statischer privater Attribute

Beitragvon gtoXX » 25.02.2018, 20:17

Hotzenplotz hat geschrieben:Hallo zusammen!
Ich habe mich wieder dem Thema angenommen und glaube auch die Lösung gefunden zu haben. Ausgangssituation ist:
Code: Alles auswählen
CLASS lcl_benutzerinfo DEFINITION.
  PUBLIC SECTION.
    CLASS-METHODS: select_userinfo.
    CLASS-METHODS: export_kostenst RETURNING value(re_kostenst) TYPE xubname.

  PRIVATE SECTION.
    CLASS-DATA: lv_benutzer TYPE xubname,
                lv_kostenst TYPE xukostl.

ENDCLASS.

*----------------------------------------------------------------------*
*       CLASS lcl_benutzerinfo IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_benutzerinfo IMPLEMENTATION.
  METHOD select_userinfo.
    lv_benutzer = sy-uname.
    SELECT SINGLE kostl FROM user_addr INTO lv_kostenst WHERE
      bname = lv_benutzer.
  ENDMETHOD.

  METHOD export_kostenst.
    re_kostenst = lv_kostenst.
  ENDMETHOD.

ENDCLASS.


Dann wollte ich von einer zweiten Klasse aus auf das vorherig deklariert und zugewiesene priv. Attribut lv_kostenst zugreifen:

Code: Alles auswählen
CLASS lcl_scanner DEFINITION.
  PUBLIC SECTION.
    CLASS-METHODS: get_kostenst.

  PRIVATE SECTION.
    CLASS-DATA: lv_kostenst TYPE xukostl.

ENDCLASS.                    "lcl_scanner DEFINITION

*----------------------------------------------------------------------*
*       CLASS lcl_scanner IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_scanner IMPLEMENTATION.
  METHOD get_kostenst.
    lv_kostenst = lcl_benutzerinfo=>export_kostenst( ).
  ENDMETHOD.                    "get_kostenstelle
ENDCLASS.


Mein Fehler lag darin, dass ich die Statische Methode export_kostenst nicht mit einem Returning Parameter deklariert hatte.



Also bis auf das gruselige lv_ ....

Als Tipp, verwende anstatt export_kostenst besser ein "get_kostenstelle". Denn es ist ein klassicher Getter und selbst nicht ABAP Programmierer verstehen das .

Wozu hier noch LV_Benutzer ? sy-uname kannst Du gleich angeben.
lv_benutzer = sy-uname.
SELECT SINGLE kostl FROM user_addr INTO lv_kostenst WHERE
bname = lv_benutzer.

Logischer wäre allerdings ein Importparameter mit DEFAULT sy-uname. Dann hätte man tatsächlich wiederverwendbares Coding, das alle Programme benutzen können, die diese Info zu einem und nicht nur dem ausführenden Benutzer wollen.
gtoXX
Specialist
 
Beiträge: 111
Registriert: 27.03.2017, 12:14
Dank erhalten: 14 mal
Ich bin: Entwickler/in


Zurück zu ABAP® für Anfänger

  Aktuelle Beiträge   
gelöst Nachricht nach Beendigung der Verbuchung
vor 2 Tagen von ewx 2 Antw.
BCS sendet Mails immer als express?
vor 2 Tagen von Legxis 2 Antw.
Zuordnung in Grid (Screen)
vor 2 Tagen von HH_ABAP 0 Antw.
FBL3N ---> FB60
vor 2 Tagen von HH_ABAP 2 Antw.
Klasse zum lesen der Adressdaten
vor 2 Tagen von AdrianSchm 2 Antw.

  Ähnliche Beiträge beta
Redefinierte Methode - Attribute
25.02.2018, 12:05 von gtoXX 21 Antw.
gelöst Doppelte Attribute finden
24.08.2018, 14:16 von isensatus 5 Antw.
Datei Attribute am Frontend lesen
27.10.2009, 13:35 von PI2301 0 Antw.
instance Attribute einer Class als String List deklarieren
01.08.2012, 07:52 von a-dead-trousers 3 Antw.
Programm aufruf
21.04.2005, 14:22 von spot 6 Antw.

 

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder