SAP-Badi kopieren mit zustäzlichen Parametern

Die Objektorientierung mit ABAP®: Vererbung, Dynamische Programmierung, GUI Controls (u.a. ALV im OO).
13 Beiträge • Seite 1 von 1
13 Beiträge Seite 1 von 1

SAP-Badi kopieren mit zustäzlichen Parametern

Beitrag von manuk (Specialist / 108 / 0 / 0 ) »
Hallo,

ich habe eine Badi (document_ecl01) der genau an der richtigen Stelle eingreift. Nur fehlt dort ein Parameter (man kann z.B. 'Datei öffenen' aktivieren oder deaktivien ich aber möchte 'Datei drucken' deaktivieren.

Besteht die Möglichkeit diesen zu kopieren und dann den Parameter hinzuzufügen? Oder wird der Badi dann gar nicht aufgerufen, weil er ja dann einen anderen Namenskreis (Z..) hat??

Soblad ich in den Badi von SAP eingreife wird es halt eine Modifikation und das möchte ich dringenst vermeiden!

Gruß Manuela

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


Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
Die Definition document_ecl01 beschreibt das Interface IF_EX_DOCUMENT_ECL01, welches die beiden Methoden
SHOW_DOC_META_DATA Metadaten im EAI-Viewer anzeigen
BEFORE_LIST_DOCS_TO_ADD Vor Aufruf von CV117_DOCFILES_SHOW_LIST_TREE

zur Verfügung stellt. Lieder kann ich dort keine der von Dir genannten Parameter finden. (R/3 4.7)

Generell gilt, dass man über die Transaktion SE19 eine Implementierung des Interfaces in Form einer kundeneigenen ABAP-OO KLasse anlegt. Dieses wird dann mit eventuell Weiteren an den Implementierungsstellen über die jeweils dort gerufene Methode aufgerufen.

Wie Du schon sagst, ist eine Erweiterung der Schnittstelle nur als Modifikation möglich.
Gruß
Ereglam


May the Force be with your code
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .

Beitrag von manuk (Specialist / 108 / 0 / 0 ) »
hm. Nicht so schnell, wie du sicherlich gemerkt hast an der Frage ist es gerade mein erster Kontakt mit Badis!

im badi dokument_ecl01 gibt es in der Schnittstelle die Methode:
BEFORE_INITIALIZE
darin gibt es einen Paramter 'open_file_active'. dieser Paramter bewirkt, dass der Eintrag 'Datei öffnen' im Menü des Viewers aktiviert/deaktiviert wird.
und genauso möchte ich den Eintrag 'Datei drucken' deaktivieren können!

Klar - Modifikation. ABer wie sieht es aus, wenn ich den gesamten BAdi kopiere??????

Beitrag von manuk (Specialist / 108 / 0 / 0 ) »
Oh sorry ereglam, hab gerade gesehen, dass du Release 4.7 mitangegeben hast. Ich arbeite auf Release 4.6C, kann sein, dass es dadurch andere Methoden sind, oder!?

Gruß Manuela

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
sollte eigentlich _nicht_ sein, dass SAP zu einem Nachfolgerelease Methoden entfernt.

Kannst Du mir bitte den Gefallen tun und das Coding der Aufrufstelle mit Name des Includes hier zu posten. Ich will mal versuchen etwas mehr darüber in Erfahrung zu bringen.
Gruß
Ereglam


May the Force be with your code
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .

Beitrag von manuk (Specialist / 108 / 0 / 0 ) »
Hoff ich mach des richtig, was du da brauchst, wenn nicht einfach noch mal melden - wie gesagt, bin noch nicht bei den Experten.

du erreichst das coding unter:
CL_GUI_ECL_2DVIEWER===========CM001
(ich geh über TA se38)

Gruß Manu

Beitrag von manuk (Specialist / 108 / 0 / 0 ) »

Code: Alles auswählen.

* -------------------------------------------------------------
* Creates a toolbar for the viewer which covers almost all
* available functionality.
* -------------------------------------------------------------
method create_toolbar.

  data: my_toolbar         type ref to cl_gui_toolbar,
        btable_row         type stb_button,
        btable             type standard table of stb_button
                 with non-unique default key initial size 7,
        wa             like line of btable,
        grouptable         type ttb_button.


* ------------------------------------------------------------
* prepare the data table, used to create the button group
* within the toolbar
* ------------------------------------------------------------
    clear: btable.
    clear btable_row.

*   --- CLOSE ---
    if close_button = 'X'.
      btable_row-function = 'FINISHED'.
      btable_row-quickinfo = text-043.
      btable_row-butn_type = 0.
      btable_row-icon = '@3X@'.
      append btable_row to btable.
      btable_row-icon = ''.
      btable_row-function = ''.
      btable_row-butn_type = 3.
      append btable_row to btable.
    endif.

*   --- VIEWER ---
    if viewer = 'X'.
      btable_row-function = 'VIEWER'.
      btable_row-quickinfo = text-025.
      btable_row-butn_type = 2.
      btable_row-text = text-025.
      append btable_row to btable.
      btable_row-function = ''.
      btable_row-butn_type = 3.
      append btable_row to btable.
    endif.

*   --- NAVIGATION ---
    if navigation = 'X'.
      btable_row-function = 'NAVIGATION'.
      btable_row-quickinfo = text-017.
      btable_row-butn_type = 2.
      btable_row-text = text-017.
      append btable_row to btable.
      btable_row-function = ''.
      btable_row-butn_type = 3.
      append btable_row to btable.
    endif.

*   --- TOOLS ---
    if tools = 'X'.
      btable_row-function = 'TOOLS'.
      btable_row-quickinfo = text-035.
      btable_row-butn_type = 2.
      btable_row-text = text-035.
      append btable_row to btable.
      btable_row-function = ''.
      btable_row-butn_type = 3.
      append btable_row to btable.
    endif.

*   --- OPTIONS ---
    if options = 'X'.
      btable_row-function = 'OPTIONS'.
      btable_row-quickinfo = text-024.
      btable_row-butn_type = 2.
      btable_row-text = text-024.
      append btable_row to btable.
      btable_row-function = ''.
      btable_row-butn_type = 3.
      append btable_row to btable.
    endif.

*   --- REMOVE DOCUMENT ---
    if remove_document = 'X'.
      btable_row-function = 'REMOVE'.
      btable_row-quickinfo = text-075.
      btable_row-text = ''.
      btable_row-butn_type = 0.
      btable_row-icon = '@11@'.
      append btable_row to btable.
      btable_row-icon = ''.
      btable_row-function = ''.
      btable_row-butn_type = 3.
      append btable_row to btable.
    endif.

* ---------------------------------------------------------------
* the toolbar object is created
* and the button group table containing the button data is filled
* ---------------------------------------------------------------
  create object my_toolbar
      exporting
          parent             = me->parent
      exceptions
          cntl_error         = 1
          cntl_install_error = 2
          others             = 3.
  case sy-subrc.
    when 0.
      "ok
    when 1.
      raise cntl_error.
    when 2.
      raise cntl_system_error.
    when others.
      raise cntl_error.
  endcase.

  me->my_toolbar = my_toolbar.

  loop at btable into wa.
    call method my_toolbar->fill_buttons_data_table
        exporting
            fcode     = wa-function
            icon      = wa-icon
            butn_type = wa-butn_type
            text      = wa-text
            quickinfo = wa-quickinfo
       changing
           data_table = grouptable
       exceptions
           cntb_btype_error = 1.
   if sy-subrc <> 0.
     raise cntb_btype_error.
   endif.

  endloop.

* ----------------------------------------------------
* create button group, using the data table
* ----------------------------------------------------
  call method my_toolbar->add_button_group
    exporting
      data_table = grouptable
    exceptions
      dp_error  = 1
      cntb_error_fcode = 2.
  case sy-subrc.
    when 0.
      "ok
    when 1.
      raise dp_error.
    when 2.
      raise wrong_fcode_error.
    when others.
      raise cntl_error.
  endcase.

  call method parent->set_focus
    exporting
      control           = my_toolbar
    exceptions
      cntl_error        = 1
      cntl_system_error = 2
      others            = 3.
  if sy-subrc <> 0.
    "failed
  endif.

  call method my_toolbar->set_alignment
    exporting
      alignment         = 7
    exceptions
      cntl_error        = 1
      cntl_system_error = 2
      others            = 3.
  if sy-subrc <> 0.
    "failed
  endif.

  call method me->set_alignment
    exporting
      alignment = 11
    exceptions
      cntl_error        = 1
      cntl_system_error = 2
      others            = 3.
  if sy-subrc <> 0.
    "failed
  endif.

  call method my_toolbar->set_position
    exporting
      top = 0
      left = 0
      width = 1000
      height = 12
    exceptions
      cntl_error        = 1
      cntl_system_error = 2
      others            = 3.
  if sy-subrc <> 0.
    "failed
  endif.

  data: my_height type i,
        my_width type i.

  call method me->get_height
    importing
      height     = my_height
    exceptions
      cntl_error = 1
      others     = 2.
  if sy-subrc <> 0.
    "failed
  endif.

  call method me->get_width
    importing
      width = my_width
    exceptions
      cntl_error = 1
      others     = 2.
  if sy-subrc <> 0.
    "failed
  endif.

Code: Alles auswählen.

  call method cl_gui_cfw=>flush

Code: Alles auswählen.

    exceptions
      cntl_error        = 1
      cntl_system_error = 2
      others            = 3.
  if sy-subrc <> 0.
    message i001(ECLVIEWER) with text-060.
  endif.

  my_height = my_height - 5.

  call method me->set_position
    exporting
      top = 12
      left = 0
      width = my_width
      height = my_height
    exceptions
      cntl_error        = 1
      cntl_system_error = 2
      others            = 3.
  if sy-subrc <> 0.
    message i001(ECLVIEWER) with text-061.
  endif.

* ----------------------------------------------------
* register toolbar events
* ----------------------------------------------------
  call method me->register_toolbar_events
    exporting
      my_toolbar       = my_toolbar
      viewer_openfile  = viewer_openfile
      viewer_savefile  = viewer_savefile
      tool_measurement = tool_measurement.

endmethod.

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
die Aufrufstellen sollten eher so aussehen:

Code: Alles auswählen.

* INCLUDE LCV121F12
* ab Zeile 34
...
  CALL METHOD cl_exithandler=>get_instance
    EXPORTING
      exit_name              = 'DOCUMENT_ECL01'
      null_instance_accepted = seex_true
    IMPORTING
      act_imp_existing       = lf_act_imp_existing
    CHANGING
      instance               = lf_exit.

  IF NOT lf_act_imp_existing IS INITIAL.
    CALL METHOD lf_exit->show_doc_meta_data
      EXPORTING: draw        = ps_draw
                 filename    = pf_file
                 loio        = pf_loio
                 phio        = pf_phio
                 appnr       = pf_appnr
                 viewer      = gf_view_2d
      IMPORTING: meta_data   = lt_data
                 x_position  = lf_x
                 y_position  = lf_y
                 size        = lf_size
                 color       = lf_color
                 transparent = lf_transparent
                 font        = lf_font.
  ENDIF.
...
so etwas in der Form mit dem Methodenaufruf BEFORE_INITIALIZE.

Wenn Deine Stelle einen anderen Aufbau hat, ist es kein BADi-Aufruf.
Gruß
Ereglam


May the Force be with your code
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .

Beitrag von manuk (Specialist / 108 / 0 / 0 ) »
Noch ein Versuch:

Code: Alles auswählen.

**INCLUDE
**LCV121F02
**Ab Zeile 93

* Call exit to define available functions                     
      lf_save = 'X'.                                          
      IF NOT gf_impl_document_ecl01 IS INITIAL.               
        CALL METHOD gf_impl_document_ecl01->before_initialize 
          EXPORTING: control_name     = pf_control_name       
                     draw             = gs_draw               
          CHANGING:  open_file_active = lf_open               
                     save_file_active = lf_save.              
      ENDIF.                                                  
                                                              
      CALL METHOD gf_view_2d->create_toolbar                  
           EXPORTING tools           = pf_tools               
                     viewer_openfile = lf_open                
                     viewer_savefile = lf_save                
           EXCEPTIONS OTHERS = 01.                            
                                                              
      IF pf_tools = 'X'.                                      
        gf_view_2d->for_dvs = 'X'.                            
        gf_view_2d->ask_for_layer_name = 'X'.                 
      ENDIF.                                                  
    ENDIF.                                                    
    pfx_control = gf_view_2d.                                 
                                                              
* if there is already 3D-Viewer -> set it invisible           

Hoffe das hilft dir jetzt weiter!

Gruß Manuela

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
ok, das war die richtige Stelle.

Leider hat sie SAP wohl zu 4.7 wieder abgeschafft. Ich kann sie in dem hiesigen System an besagter Stelle nicht finden.
(ich vermute mal, dass gf_impl_document_ecl01 mit REF TO IF_EX_DOCUMENT_ECL01 typisiert ist?)

Somit bleibt leider nur eine Modifikation...
da Du sonst nicht an die Toolbar-Element kommst.

Ein Kopieren des BADi bringt nichts, da Du den Aufruf nur durch Modifikation einbauen kannst. (und ob das das Wahre ist, steht auf einem anderen Blatt)

Anderes Problem:
In Deinem ersten Coding sehe ich keine Button-Funktion für das Drucken.
Könnte es sein, dass das Druck-Icon sich im Options-Menü befindet oder ist es das standardmäßig Vorhandene oben rechts neben dem roten Abbruch-Kreuz?
Gruß
Ereglam


May the Force be with your code
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .

Beitrag von Hermann ( / / 0 / 3 ) »
@Manuela: Welchen zusätzlichen Parameter möchtest Du denn in der Schnittstelle des Badis zur Verfügung haben? Gibt es diesen Parameter denn überhaupt außerhalb des Badis?

Falls ja, könntest Du diesen Parameter ggf. auch über einen 'dirty assign' verändern.

Ein Beispiel wie das funktioniert findest Du in diesem Thread (unten):
http://www.abapforum.com/forum/viewtopic.php?t=573

Hermann

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
Hermann hat geschrieben:@Manuela: Welchen zusätzlichen Parameter möchtest Du denn in der Schnittstelle des Badis zur Verfügung haben? Gibt es diesen Parameter denn überhaupt außerhalb des Badis?

Falls ja, könntest Du diesen Parameter ggf. auch über einen 'dirty assign' verändern.

Ein Beispiel wie das funktioniert findest Du in diesem Thread (unten):
http://www.abapforum.com/forum/viewtopic.php?t=573

Hermann
der 'dirty assign' dürfte aber nur funktionieren, wenn die gewünschte Variable global definiert ist.
Gruß
Ereglam


May the Force be with your code
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .

Beitrag von Gast ( / / 0 / 3 ) »
Danke schön, aber ich glaub des wird nichts, hab das ganze mal gedebuggt und der Parameter muss ja dann auch ausgewertet werden. Da ich aber nicht wüsste dass es ihn gibt, wird es wohl nicht funktionieren. Schade, wär echt ne tolle Sache gewesen.

Aber Danke!!!

Gruß Manuela

Seite 1 von 1

Vergleichbare Themen

3
Antw.
5127
Views
User kopieren MIT Parametern
von ralf.wenzel » 05.09.2012 14:09 • Verfasst in Sonstige Module
2
Antw.
4866
Views
CDS-View mit (Range)Parametern
von Ingo » 09.10.2020 09:54 • Verfasst in SAP HANA für Anfänger
15
Antw.
4584
Views
Textelemente in Import-Parametern
von debianfan » 02.05.2018 17:16 • Verfasst in ABAP® für Anfänger
1
Antw.
2487
Views
dynamische Suchhilfe mit Parametern
von PeterPaletti » 29.10.2014 09:40 • Verfasst in ABAP® für Anfänger
1
Antw.
1523
Views
Drucken im Hintergrund mit geänderten Parametern
von formulator » 01.02.2006 14:51 • Verfasst in ABAP® Core

Über diesen Beitrag


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

Aktuelle Forenbeiträge

Trennen Strasse und Hausnummer
vor 42 Minuten von DeathAndPain 14 / 10736
Dialog-Container mit Toolbar/Status
vor 53 Minuten von DeathAndPain gelöst 24 / 3859
User Exit EXIT_RQCPRM10_001
vor 20 Stunden von a-dead-trousers 2 / 342
Daten an Tabelle binden
Gestern von Lukas Sanders 2 / 1393

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

Trennen Strasse und Hausnummer
vor 42 Minuten von DeathAndPain 14 / 10736
Dialog-Container mit Toolbar/Status
vor 53 Minuten von DeathAndPain gelöst 24 / 3859
User Exit EXIT_RQCPRM10_001
vor 20 Stunden von a-dead-trousers 2 / 342
Daten an Tabelle binden
Gestern von Lukas Sanders 2 / 1393

Unbeantwortete Forenbeiträge

aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2925
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9518