Sap Script Perform ubergabe parametr

Getting started ... Alles für einen gelungenen Start.
18 Beiträge • Seite 1 von 2 (current) Nächste
18 Beiträge Seite 1 von 2 (current) Nächste

Sap Script Perform ubergabe parametr

Beitrag von autohandel7 (Specialist / 186 / 67 / 0 ) »
Hi Experten,
ich soll ein alte Sap Script formular u neue Sap ubertragen, dafür habe ich eine Frage.
In Sap Script Formular gibtes :
PERFORM EMAIL IN PROGRAM Z_EMAIL_USERS
USING &SY-UNAME&
CHANGING &GV_EMAIL&
ENDPERFORM
<K>Email:</> &GV_EMAIL&

ich habe dafür eine Form in Programm Z_EMAIL_USERS :

Code: Alles auswählen.

REPORT z_email_users.
TYPES: BEGIN OF gtys_user_email,
         bname     TYPE xubname,
         smtp_addr TYPE adr6-smtp_addr,
       END OF gtys_user_email.

DATA: gt_user_email TYPE STANDARD TABLE OF gtys_user_email,
      gs_user_email TYPE gtys_user_email,
      gv_email type adr6-smtp_addr.

PERFORM email USING sy-uname CHANGING gv_email." USING gv_email email.
WRITE: / sy-uname, gv_email, gs_user_email-bname.

FORM email
      USING sy-uname
      CHANGING  gv_email .


  SELECT  adr6~smtp_addr INTO CORRESPONDING FIELDS OF TABLE gt_user_email
      UP TO 1 ROWS
            FROM adr6

              INNER JOIN usr21
                 ON adr6~addrnumber = usr21~addrnumber
                AND adr6~persnumber = usr21~persnumber
                    WHERE usr21~bname = sy-uname.
*  ENDSELECT.
  read TABLE gt_user_email INTO gs_user_email INDEX 1.
  gs_user_email-bname = sy-uname.
  gv_email =  gs_user_email-smtp_addr.

ENDFORM.
bei test von SapScript bekomme ich Fehler:
" Der Grund für die Ausnahme ist:
Durch PERFORM wurde die Routine "EMAIL" des Programms "Z_EMAIL_USERS"
aufgerufen. Diese Routine besitzt 2 formale Parameter.
Der aktuelle Aufruf enthält jedoch 4 aktuelle Parameter."
Hat jemand Ahnung , was für noch 2 Parametr ?
Danke

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


Re: Sap Script Perform ubergabe parametr

Beitrag von ralf.wenzel (Top Expert / 3924 / 200 / 280 ) »
Da ist ja so einiges krumm.

1. Die FORM-Routine muss die Parameter als Tabelle der Struktur ITCSY vorweisen, also:

Code: Alles auswählen.

FORM email TABLES input_data structure itcsy CHANGING output_data structure itcsy.
....
ENDFORM.
In diesen Tabellen stehen die Eingabe- und Ausgabewerte (jeweils Feldwert und Feldinhalt).

2. ...USING sy-uname?

Entweder du willst den sy-uname verwenden (dann musst du ihn nicht übergeben, weil das Programm ihn kennt) oder du willst den Namen aus dem Formular übergeben (dann ist der Name ungeschickt gewählt). Beides ist nicht gut.

Warum ein Feld in einem Formular die Sichtbarkeit "global" haben soll (GV_...), verstehe ich nicht, aber ich werde diese Diskussion nicht nochmal anzetteln. Aber in der FORM-Routine ein Feld zu deklarieren, das offensichtlich lokal ist (CHANGING) und trotzdem GV_.... zu nennen, ist schlichtweg falsch, egal welche Definition der "Ungarischen Notation" man sich auch zurechtklöppelt.
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Sap Script Perform ubergabe parametr

Beitrag von autohandel7 (Specialist / 186 / 67 / 0 ) »
Danke, habe geschrieben , aber fehler beim aufrufs fon Form:

PERFORM email USING gt_input_data CHANGING lv_email. ??

Code: Alles auswählen.

Data: gt_input_data type itcsy,
      gt_output_data type itcsy.
DATA: gt_user_email TYPE STANDARD TABLE OF gtys_user_email,
      gs_user_email TYPE gtys_user_email,
      gv_email type adr6-smtp_addr.
*      email type adr6-smtp_addr.
PERFORM email USING  gt_input_data
      CHANGING lv_email.
FORM email TABLES gt_input_data STRUCTURE itcsy
          CHANGING gt_output_data structure itcsy.
  DATA: lv_bname       LIKE usr21-bname,
        lv_email       LIKE adr6-smtp_addr.

Data: gt_usr21 type  STANDARD TABLE OF usr21,
      gs_usr21 type  usr21,
      gs_adr6 type  adr6.


READ TABLE gt_input_data
    WITH KEY name = 'USR03-BNAME'.
CHECK sy-subrc = 0.
  MOVE gt_input_data-value TO lv_bname.


SELECT SINGLE * FROM usr21
  into CORRESPONDING FIELDS OF gs_usr21

  WHERE bname EQ lv_bname.


CHECK sy-subrc = 0.
*
  SELECT SINGLE * FROM adr6
   into CORRESPONDING FIELDS OF gs_adr6

    WHERE addrnumber EQ gs_usr21-addrnumber
                              AND persnumber EQ gs_usr21-persnumber
                              AND flgdefault EQ 'X'.
  CHECK sy-subrc = 0.
  MOVE: gs_adr6-smtp_addr TO gv_email.
*
*  READ TABLE gt_output_data INTO gs_output_data WITH KEY name = 'EMAIL'.
  MOVE lv_email TO gt_output_data-value.
*  MODIFY gt_output_data INDEX sy-tabix.
*
  CLEAR: gs_adr6, gs_usr21.
  CLEAR: lv_bname, lv_email.
*
ENDFORM.

Re: Sap Script Perform ubergabe parametr

Beitrag von wreichelt (Top Expert / 1046 / 30 / 192 ) »
Hallo,

du mußt den PERFORM weglassen.

PERFORM email USING gt_input_data
CHANGING lv_email.


Gruß
Wolfgang


Re: Sap Script Perform ubergabe parametr

Beitrag von ralf.wenzel (Top Expert / 3924 / 200 / 280 ) »
Ich hab den Stuss, den ich eben geschrieben habe, habe ich mal gelöscht.

Erstens: Wolfgang hat recht, den PERFORM brauchst du nicht, den machst du ja im SAPscript.

Zweitens: CHECK ist eine schlechte Wahl zur Feldprüfung. Lieber ein IF....ENDIF. Dazu rät auch die SAP.

Drittens: Du musst den Feldnamen in die Ausgabetabelle schreiben.

Folgende Benutzer bedankten sich beim Autor ralf.wenzel für den Beitrag:
autohandel7

Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Sap Script Perform ubergabe parametr

Beitrag von autohandel7 (Specialist / 186 / 67 / 0 ) »
wreichelt hat geschrieben:Hallo,

du mußt den PERFORM weglassen.

PERFORM email USING gt_input_data
CHANGING lv_email.


Gruß
Wolfgang
Ich brauche Perform um zu Testen, oder wie kan ich anderes Testen ob die date da.?

Re: Sap Script Perform ubergabe parametr

Beitrag von wreichelt (Top Expert / 1046 / 30 / 192 ) »
Hallo,

setze doch einen Break-Point.

Gruß
Wolfgang

Folgende Benutzer bedankten sich beim Autor wreichelt für den Beitrag:
autohandel7


Re: Sap Script Perform ubergabe parametr

Beitrag von ralf.wenzel (Top Expert / 3924 / 200 / 280 ) »
Wie sagte meine ehemalige Projektleiterin? "Wer testet, ist unsicher" ;)

Folgende Benutzer bedankten sich beim Autor ralf.wenzel für den Beitrag:
autohandel7

Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Sap Script Perform ubergabe parametr

Beitrag von jocoder (Specialist / 343 / 3 / 102 ) »
Ich würde das Coding ja so ändern:

Code: Alles auswählen.

FORM email TABLES input_data STRUCTURE itcsy
  output_data STRUCTURE itcsy.

DATA: lv_bname TYPE usr21-bname,
  lv_email TYPE adr6-smtp_addr.

READ TABLE Input_data
    WITH KEY name = 'USR03-BNAME'.
CHECK sy-subrc = 0.
MOVE Input_data-value TO lv_bname.

SELECT a~smtp_addr FROM adr6 AS a INNER JOIN usr21 AS u
  ON u~persnumber = a~persnumber AND u~addrnumber = a~addrnumber
  INTO lv_email
  WHERE a~flgdefault = 'X' AND u~bname = lv_bname.

READ TABLE output_data WITH KEY name = 'EMAIL'.
CHECK sy-subrc = 0.
output_data-value = lv_email.
MODIFY output_data INDEX sy-tabix.

ENDFORM.
Wichtig ist nur, dass deine Symbole im SAPScript wirklich USR03 und EMAIL heißen. EMAIL musst du eventuell noch im Rahmenprogramm
als globale Variable anlegen.

Folgende Benutzer bedankten sich beim Autor jocoder für den Beitrag:
autohandel7


Re: Sap Script Perform ubergabe parametr

Beitrag von ralf.wenzel (Top Expert / 3924 / 200 / 280 ) »
Warum muss die Variable global* sein? SAPscript-PERFORMs sind schon ein paar Jahre her bei mir, aber an eine solche Einschränkung kann ich mich nicht erinnern.

*du meinst wohl "programmlokal"
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Sap Script Perform ubergabe parametr

Beitrag von jocoder (Specialist / 343 / 3 / 102 ) »
Jedes SAPScript Formular hat ja normalerweise ein Rahmenprogramm. Da definiert man ja
normalerweise jedes Symbol.
Unter global versteh ich normalerweise im TOP-Include angelegte Variable oder eine
Variable im DEFINITION-Teil einer Klasse, also in keiner Form-Routine oder Methode angelegte.

Wie nennt man sonst diese Variablen?

Apropos SAPScript:
Ich erstelle noch im Jahr 2015! Formulare in SAPScript Wenn me sich damit auskennt,
geht das viel besser als mit dem Adobe-Käse :)

Re: Sap Script Perform ubergabe parametr

Beitrag von ralf.wenzel (Top Expert / 3924 / 200 / 280 ) »
jocoder hat geschrieben:Apropos SAPScript:
Ich erstelle noch im Jahr 2015! Formulare in SAPScript Wenn me sich damit auskennt,
geht das viel besser als mit dem Adobe-Käse :)
Beides ist wahnsinnig kompliziert, wenn die Anforderung hinreichend komplex ist. Ich habe nichts gegen SAPscript, ich setze es selbst noch ein (aber eher für "schöne Report-Druckausgaben"), aber zeitgemäß ist das nicht mehr, wenn man sich moderne Workflows anguckt (oder willst du mir zeigen, wie man ein interaktives, plattformübergreifendes Formular erstellt, dessen Inhalte elektronisch weiterverarbeitet werden sollen?).

Vor dem Hintergrund, dass SAP das Ende von SAPscript (und SmartForms!) beschlossen hat, würde ich Formulare (!) nicht mehr in SAPscript bauen (wie gesagt: Ich nutze es, um Report-Druckausgaben in optisch ansprechender Form zu erzeugen, das geht in der Tat schneller als mit Adobe).
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Sap Script Perform ubergabe parametr

Beitrag von autohandel7 (Specialist / 186 / 67 / 0 ) »
ralf.wenzel hat geschrieben:
jocoder hat geschrieben:wie gesagt: Ich nutze es, um Report-Druckausgaben in optisch ansprechender Form zu erzeugen, das geht in der Tat schneller als mit Adobe).
Report Druckausgabe?
nie benutzt, was ist das?

Re: Sap Script Perform ubergabe parametr

Beitrag von ralf.wenzel (Top Expert / 3924 / 200 / 280 ) »
Angenommen, du schreibst ein Programm, das über unterschiedliche Controls diverse Daten anzeigt. Eine Liste hier, ein paar Einzelfelder da, alles schön auf einen Blick. Der Anwender möchte die Liste aber nicht nur am Display sehen, sondern auch ausdrucken können, ähnlich aufgebaut wie die Aufteilung auf dem Dynpro.

Da bist du mit dem Listendruck in SAP (den wir schon Ende der 90er bei der IBM als "Keilschrift" bezeichneten) schnell am Ende. In SAPscript kann man sehr chic und schnell eine Ausgabe in unterschiedlichen Schriftgrößen/-arten mit Unterstreichungen, etc. erzeugen, die "Word-ähnlicher" aussieht als jede Reportingliste.

Folgende Benutzer bedankten sich beim Autor ralf.wenzel für den Beitrag:
autohandel7

Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Vergleichbare Themen

1
Antw.
1303
Views
Perform mit Übergabe interner Tabellen
von Margolwes » 27.02.2009 11:04 • Verfasst in ABAP® Core
2
Antw.
1637
Views
Dynamisches Perform.
von Charly_Brown » 08.12.2005 17:25 • Verfasst in ABAP® Core
6
Antw.
1714
Views
Perform in Sapscript
von dkast » 18.10.2017 13:34 • Verfasst in ABAP® für Anfänger
6
Antw.
1775
Views
Perform (dynamisch_var)
von the-FoX » 06.12.2004 14:46 • Verfasst in ABAP® Core
7
Antw.
2974
Views
PERFORM in LOOP
von cschmoel » 31.08.2012 11:12 • Verfasst in ABAP® für Anfänger

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.

Unbeantwortete Forenbeiträge

Daten an Tabelle binden
vor 2 Tagen von Bright4.5 1 / 585
aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2214
Hilfe bei SWEC/SWE2
letzen Monat von retsch 1 / 8811