TV Image

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

ABAP Web Dynpro, BusinessServerPages; Erstellung von Webapplikationen.
18 Beiträge • Seite 1 von 2 (current) Nächste
18 Beiträge Seite 1 von 2 (current) Nächste

TV Image

Beitrag von Seguro ( / / 0 / 3 ) »
Hallo,

hab folgendes problem, vielleicht kann mir ja jemand dabei helfen... ich hoffs mal!

ich hab ein tableview basierend auf einer internen tabelle, das 4 felder dieser anzeigt. nun will ich in jeder zeile ein bild/icon haben ohne das in meine interne tabelle hinzufügen zu müssen.
Die Quellcodes aus der SAP hilfe funktionieren leider kein bischen... hier mein Code

Code: Alles auswählen.

            <htmlb:tableViewColumn    columnName       = "myicon"
                                      type             = "user"
                                     title            = "Image"
                                     horizontalAlignment="center" >
               <htmlb:link           id               = "test"
                                     onClick          = "test"
                                      tooltip          = "test">
                  <htmlb:image       src              = "TEST.JPG" 
                                      alt              = "test"
                                      tooltip          = "test" />
              </htmlb:link>
          </htmlb:tableViewColumn>
ist ein 4.7er System, habs daher auch schon mit

Code: Alles auswählen.

          <htmlb:tableViewColumn    columnName       = "myicon"
                                      type             = "IMAGE"
                                     title            = "Image"
                                     horizontalAlignment="center" >

sowas probiert... auch kein Erfolg :(

Die Spalte wird zwar angezeigt, aber leider inhaltslos :-([/quote]

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


antwort

Beitrag von vvursT (ForumUser / 72 / 0 / 0 ) »
also ich bin auch erst seit ein paar monaten dabei ergo neuling aber ich versuch dir mal unter vorbehalt zu helfen. soweit ich weiss ist die einzige möglichkeit spalten im tv zu erstellen der iterator.
mit diesem lassen sich jede einzelne zelle dynamisch rendern und zusätzliche spalten mit logik definieren.
(z.b. eine statusleuchte abhängig von einem wert in einem vorhandenen feld)

Code: Alles auswählen.

<htmlb:tableViewColumn    columnName       = "myicon"
                                      type             = "IMAGE"
                                     title            = "Image"
                                     horizontalAlignment="center" >
ist soweit ich weiss nur auf eine bereits vorhandene spalte im tv anwendbar. du bräuchtest also z.b. eine spalte in der zellen der wert die adresse des mime-objekts steht und kannst dir dann mit type="image" die spalte als bild anzeigen lassen.
ich hab ca. einen tag gebraucht um den iterator in meinem coding zu realisieren. war eigentlich nicht schwer als ich diesen webblog dazu verwendet hab rumzuprobieren:
https://www.sdn.sap.com/irj/sdn/weblogs ... ub/wlg/830

beispiele zur anwendung findest du in der sap bsp applikation: sbspext_table
muss allerdings eventuell über sicf aktiviert werden, bei mir war sie zumindest inaktiv.
bei weiteren fragen steh ich dir zur verfügung, hätte mich damals auch über hilfe gefreut ;)

Beitrag von Seguro ( / / 0 / 3 ) »
Hui vielen Dank, das sind sehr nützliche Infos!!

Setze mich jetzt mal an deine Links, thanks a lot!

Beitrag von Seguro ( / / 0 / 3 ) »
Was ich nicht ganz verstehe ist, ich würd gern nach example #3 verfahren, da ich ein tableview brauche, wo in der ersten spalte ein icon ist, wenn ich draufklicke für ich dann weiteren code aus.

aber in der weblog die du gepostet hast ( https://www.sdn.sap.com/irj/sdn/weblogs ... ub/wlg/830 )

ist dort eine extra methode geschrieben... muss ich das machen? und es steht nicht drin wie ich den iterator dann einbaue, geschweige denn welche parameter/returning werte ich der methode geben muss :-/

bin leider auch ein blutiger anfänger, waer super wenn du mir nochmal unter die arme gereifen könntest!

Beitrag von vvursT (ForumUser / 72 / 0 / 0 ) »
ok ich hab grad kurz zeit und geb dir mal ein grobes vorgehensmuster der schritte die alle gemacht werden müssen. die reihenfolge ist im endeffekt egal.

also die columndefinitions erstmal raus, das ist nebenbei auch der vorteil am iterator, wenig quellcode auf der layout seite ;)

Setze Iterator Attribut im TV auf Layoutseite:

Code: Alles auswählen.

iterator        = "<%= iterator%>" >
Erstelle Attribut auf Seite:

Code: Alles auswählen.

iterator TYPE IF_HTMLB_TABLEVIEW_ITERATOR
onCreate wird der später zu erstellende Iterator zugewiesen:

Code: Alles auswählen.

CLEAR iterator.
CREATE OBJECT iterator TYPE ZZ_TESTITERATOR.
p.s. namensraum beachten, ansonsten ist der name egal.

Nun die Klasse im Paket erstellen in der die BSP läuft:
- Rechts aufs Paket, Klassenbibliothek, Klasse
- Name: ZZ_TESTITERATOR
- Interface eingeben: IF_HTMLB_TABLEVIEW_ITERATOR

Jetzt sind die Standardmethode auf deine erstellte Klasse vererbt.

Attribut erstellen: M_ROW_REF TYPE "DEINEDBTABELLE"

Nun die Implementierung der Methoden anpassen (die Definition ist von der Basisklasse gegeben)
- Rechts auf Methode/Ändern/Implementierung
- Zwischen Method und Endmethod jeweils folgendes:

- Für "GET_COLUMN_DEFINITIONS" z.B.

Code: Alles auswählen.

   FIELD-SYMBOLS: <def> LIKE LINE OF p_column_definitions.

* ERSTELLE SPALTE => ICON

   APPEND INITIAL LINE TO p_column_definitions ASSIGNING <def>.
   <def>-COLUMNNAME = 'ICON'.
   <def>-TITLE      = '&nbsp;'.

* JETZT KOMMEN DIE STANDARD SPALTEN DER POSITIONEN

   APPEND INITIAL LINE TO p_column_definitions ASSIGNING <def>.
   <def>-COLUMNNAME = 'POSNR'.
   <def>-TITLE      = 'NR'.

* JETZT SPALTEN MIT BILDER UND EVENTVERKNÜPFUNG

   APPEND INITIAL LINE TO p_column_definitions ASSIGNING <def>.
   <def>-COLUMNNAME  = 'FREIGABE'.
   <def>-TITLE       = '&nbsp;'.
   <def>-ONCELLCLICK = 'cellclick_freigabe'.

   APPEND INITIAL LINE TO p_column_definitions ASSIGNING <def>.
   <def>-COLUMNNAME = 'ABLEHNEN'.
   <def>-TITLE      = '&nbsp;'.
   <def>-ONCELLCLICK = 'cellclick_ablehnen'.

   APPEND INITIAL LINE TO p_column_definitions ASSIGNING <def>.
   <def>-COLUMNNAME = 'RESET'.
   <def>-TITLE      = '&nbsp;'.
   <def>-ONCELLCLICK = 'cellclick_reset'.

* EDITIERBARE SPALTEN:

   APPEND INITIAL LINE TO p_column_definitions ASSIGNING <def>.
   <def>-COLUMNNAME = 'SAKNR'.
   <def>-EDIT = 'X'.

* Normale Spalten

  APPEND INITIAL LINE TO p_column_definitions ASSIGNING <def>.
   <def>-COLUMNNAME = 'KTEXT'.
Jede Spalte die angezeigt werden soll, muss hier angegeben werden. Einer in der itab vorhandenen Spalte wird automatisch der richtige Wert zugewiesen.
Columnname muss halt stimmen. TITLE kann individuell gewählt werden. Das erste Icon hat keinen Event, ist also lediglich Bild. Die andere Spalten (Freigabe etc.) haben Icons und haben eine Eventbezeichnung. Somit wird dann später die gewählte Spalte im eventhandler übergeben. (Auf die gewählte Zeile komm ich noch)

-Für RENDER_ROW_START nur:

Code: Alles auswählen.

m_row_ref ?= p_row_data_ref.
-Für RENDER_CELL_START dann z.b. das hier:

Code: Alles auswählen.

CASE p_column_key.

*#### BESTIMME AMPELFARBE = POSITIONSSTATUS ########
    WHEN 'ICON'.
      DATA: icon TYPE STRING.
      IF m_row_ref->status = 'FREE'.
        icon = CL_BSP_MIMES=>SAP_ICON( id = 'ICON_LED_GREEN' ).
      ELSEIF m_row_ref->status = 'ABORT'.
        icon = CL_BSP_MIMES=>SAP_ICON( id = 'ICON_LED_RED' ).
      ELSEIF m_row_ref->status = 'STD'.
        icon = CL_BSP_MIMES=>SAP_ICON( id = 'ICON_LED_YELLOW' ).
      ELSE.
      icon = CL_BSP_MIMES=>SAP_ICON( id = 'ICON_SYSTEM_EXTENDED_HELP' ).
      ENDIF.
      p_replacement_bee = CL_HTMLB_IMAGE=>FACTORY( id  = p_cell_id
                                                   src = icon ).

*#### ERSTELLE FREIGABESSPALTE ########
    WHEN 'FREIGABE'.

      DATA: icon1 TYPE STRING.
      icon1 = CL_BSP_MIMES=>SAP_ICON( id = 'ICON_RELEASE' ).
      p_replacement_bee = CL_HTMLB_IMAGE=>FACTORY( id  = p_cell_id
                                                   src = icon1 ).

*#### ERSTELLE ABLEHNENSPALTE ########
    WHEN 'ABLEHNEN'.

      DATA: icon2 TYPE STRING.
      icon2 = CL_BSP_MIMES=>SAP_ICON( id = 'ICON_REJECT' ).
      p_replacement_bee = CL_HTMLB_IMAGE=>FACTORY( id  = p_cell_id
                                                   src = icon2 ).

*#### ERSTELLE RESETSPALTE ########
    WHEN 'RESET'.

      DATA: icon3 TYPE STRING.
      icon3 = CL_BSP_MIMES=>SAP_ICON( id = 'ICON_SYSTEM_END' ).
      p_replacement_bee = CL_HTMLB_IMAGE=>FACTORY( id  = p_cell_id
                                                   src = icon3 ).
Der Replacement_bee dient sozusagen als Platzhalter dem eine Source übergeben wird. Hier werden nur Spalten angegeben die auch verändert werden müssen.
Z.b. kann auch mit einem:

Code: Alles auswählen.

WHEN 'SAKNR'.
      IF p_edit_mode IS NOT INITIAL.

      ENDIF.
die Zelle anders gerändert werden wenn sie im editiermodus ist.

Soweit so gut.

Den Event wenn dann ein Button gedrückt wird fängt man dann im onInputProcessing etwa so ab:

Code: Alles auswählen.

CLASS cl_htmlb_manager DEFINITION LOAD.

* 1 ** IF ### WENN EVENT AUSGELÖST WIRD
IF event_id = cl_htmlb_manager=>event_id.

  DATA :    tv                TYPE REF TO cl_htmlb_tableview,
            table_event       TYPE REF TO cl_htmlb_event_tableview,
            event             TYPE REF TO cl_htmlb_event,
            button_event      TYPE REF TO cl_htmlb_event_button,
            iterator          TYPE REF TO IF_HTMLB_TABLEVIEW_ITERATOR,
            tv_data           TYPE REF TO cl_htmlb_event_tableview.

  FIELD-SYMBOLS <wa> LIKE LINE OF alditab_positionsdaten.
  event = cl_htmlb_manager=>get_event( runtime->server->request ).

*#######################################################################
*################ BUTTON IN SPALTE GEDRÜCKT ############################
*#######################################################################

    IF  event             IS NOT INITIAL
    AND event->name       = 'tableView'
    AND event->event_type = 'cellClick'.
      table_event ?= event.
***   REFERENZ VON tv auf tableView Objekt
      tv ?= cl_htmlb_manager=>get_data(
               request = runtime->server->request
               name    = 'tableView'
               id      = 'Positionen' ).
      table_event = tv->data.

*#### WELCHE SPALTE WURDE MARKIERT ########
      CASE table_event->SERVER_EVENT.

*** SPALTE: FREIGABE
        WHEN 'cellclick_freigabe'.
*** CODE CODE CODE ***
        WHEN 'cellclick_ablehnen'.
*** CODE CODE CODE ***

und so weiter.
Die Zeile in der sich der Button befindet den du gedrückt hast steht in folgendem Eventattribut:

Code: Alles auswählen.

table_event->ROW_INDEX
hoffe ich konnte dir helfen.
viel glück weiterhin

Beitrag von vvursT (ForumUser / 72 / 0 / 0 ) »
hm ausserdem hab ich dir die falsche url gepostet....
https://www.sdn.sap.com/irj/sdn/weblogs ... ub/wlg/213
sorry wurde nicht in die adresszeile übernommen...

Beitrag von Seguro ( / / 0 / 3 ) »
Boah was für ne Arbeit, ich glaub du hast mir grad 100 Jahre Verständnisarbeit und 200 Liter Kaffe erspart *g*

vielen vielen vielen dank vvurst!

Beitrag von vvursT (ForumUser / 72 / 0 / 0 ) »
hehe np, die arbeit hatte ich schon und die muss ja nicht jeder wieder haben.. ;)
probier lieber erstmal ob du es hinbekommst

Beitrag von Seguro ( / / 0 / 3 ) »
Also langsam blicke ich schon durch, aber ich bekomm momentan noch ne Fehlermeldung durch die ich noch nicht ganz durchblicke.

hab (fast) alles so gemacht wie du bzw. der weblog es gesagt haben, bis auf die Methode "RENDER_CELL_START", die hab ich leer gelassen weil ich momentan eigenltich nichts verändern wlil, sondern nur ein icon in meinem TV haben will.

die get column methode sieht jetzt so aus (zugeschnitten auf meine tabelle)

Code: Alles auswählen.

method IF_HTMLB_TABLEVIEW_ITERATOR~GET_COLUMN_DEFINITIONS .


   FIELD-SYMBOLS: <def> LIKE LINE OF p_column_definitions.

* ERSTELLE SPALTE => ICON

   APPEND INITIAL LINE TO p_column_definitions ASSIGNING <def>.
   <def>-COLUMNNAME = 'ICON'.
   <def>-TITLE      = '&nbsp;'.

* JETZT KOMMEN DIE STANDARD SPALTEN DER POSITIONEN

   APPEND INITIAL LINE TO p_column_definitions ASSIGNING <def>.
   <def>-COLUMNNAME = 'UNAME'.
   <def>-TITLE      = 'Username'.

* JETZT SPALTEN MIT BILDER UND EVENTVERKNÜPFUNG

   APPEND INITIAL LINE TO p_column_definitions ASSIGNING <def>.
   <def>-COLUMNNAME  = 'FNAME'.
   <def>-TITLE       = 'Vorname'.
*   <def>-ONCELLCLICK = 'cellclick_freigabe'.

   APPEND INITIAL LINE TO p_column_definitions ASSIGNING <def>.
   <def>-COLUMNNAME = 'LNAME'.
   <def>-TITLE      = 'Nachname'.
*   <def>-ONCELLCLICK = 'cellclick_ablehnen'.

* EDITIERBARE SPALTEN:
*
*   APPEND INITIAL LINE TO p_column_definitions ASSIGNING <def>.
*   <def>-COLUMNNAME = 'SAKNR'.
*   <def>-EDIT = 'X'.

* Normale Spalten

*  APPEND INITIAL LINE TO p_column_definitions ASSIGNING <def>.
*   <def>-COLUMNNAME = 'KTEXT'.


endmethod.
und meine Render Row Start so:

Code: Alles auswählen.

method IF_HTMLB_TABLEVIEW_ITERATOR~RENDER_ROW_START .

m_row_ref ?= p_row_data_ref.

endmethod.
und hier liegt der fehler. beim prüfen sagt er mir:

Die CAST-Operation (f1 ?= f2, MOVE f2 ?TO f1) ist zur Zeit nur für Objektreferenzen unterstütz.
was zum teufel? :D

hab auch wie beschreiben m_row_ref als attribut meiner Tabelle eingetragen!

Beitrag von vvursT (ForumUser / 72 / 0 / 0 ) »
also erstmal:
das attribut: <def>-ONCELLCLICK brauchst du bloss setzen wenn diese spalte auch einen event beinhalten soll, also z.b. möglich sein soll auf das icon zu klicken um dann code auszuführen.

die methode Render_Cell_Start musst du auf jeden fall implementieren da in dieser die Icons in den erstellten Spalten erzeugt werden müssen. (woher soll beim rendern sonst das icon bekannt sein ???).

Code: Alles auswählen.

*#### ERSTELLE ICONSPALTE ########
    WHEN 'ICON'.

      DATA: icon TYPE STRING.
      icon = CL_BSP_MIMES=>SAP_ICON( id = 'DEIN_SAP_ICON' ).
      p_replacement_bee = CL_HTMLB_IMAGE=>FACTORY( id  = p_cell_id
                                                   src = icon ). 
somit wird in jeder zeile dieses icon gerendert.

die icons findest du in der db="icon"

warum der cast nicht funktioniert weiss ich jetzt auch nicht. ich überlege mal...

Beitrag von Seguro ( / / 0 / 3 ) »
Meine Attribut Definition sieht so aus, vielleicht liegt dort ja der Fehler!

Code: Alles auswählen.

M_ROW_REF 
Instance Attribute
Public	
Type	ZECRQ_USER_ST	
_______________________________


definition von ZECRQ_USER_ST in der typgruppe:

Code: Alles auswählen.


  begin of zecrq_user,
    uname type syuname,
    fname type char25,
    lname type char25,
  end of   zecrq_user,

  zecrq_user_st type standard table of zecrq_user
  with non-unique default key,
  zecrq_user_s  type sorted table of zecrq_user,

Beitrag von vvursT (ForumUser / 72 / 0 / 0 ) »
joa.
du kannst bei der attribut definition nicht auf typen zugreifen die innerhalb der bsp definiert sind.

du arbeitest doch sicher mit einer db tabelle.
verwende einfach den typen der db, dann funktionierts auch. also ganz allgemein in der flugtabelle

Code: Alles auswählen.

m_row_ref TYPE REF TO SFLIGHT.
/edit: ah hier liegt der fehler:

hatte geschrieben "type" und nicht "type ref to"

jetzt müsste es gehen ;)

Beitrag von Seguro ( / / 0 / 3 ) »
Thanks again, das wars :P

Beitrag von Seg ( / / 0 / 3 ) »
Ein klitzekleines Problemchen hät ich da dann doch noch :oops:

die Anzeige funktioniert wunderbar, hab mein Icon drin (ennnnnndlich), aber der onclick funktioniert nicht!

hab zwar:

Code: Alles auswählen.

method IF_HTMLB_TABLEVIEW_ITERATOR~GET_COLUMN_DEFINITIONS .


   FIELD-SYMBOLS: <def> LIKE LINE OF p_column_definitions.

* ERSTELLE SPALTE => ICON
   APPEND INITIAL LINE TO p_column_definitions ASSIGNING <def>.
   <def>-COLUMNNAME = 'ICON'.
   <def>-TITLE      = '&nbsp;'.
   <def>-ONCELLCLICK = 'sel_user'.

* JETZT KOMMEN DIE STANDARD SPALTEN DER USERNAME
   APPEND INITIAL LINE TO p_column_definitions ASSIGNING <def>.
   <def>-COLUMNNAME = 'UNAME'.
   <def>-TITLE      = 'Username'.

* JETZT SPALTEN FIRSTNAME
   APPEND INITIAL LINE TO p_column_definitions ASSIGNING <def>.
   <def>-COLUMNNAME  = 'FNAME'.
   <def>-TITLE       = 'Vorname'.

* JETZT SPALTE LASTNAME
   APPEND INITIAL LINE TO p_column_definitions ASSIGNING <def>.
   <def>-COLUMNNAME = 'LNAME'.
   <def>-TITLE      = 'Nachname'.

endmethod.
gemacht, und ich kann das icon nun auch anklicken... aber er geht nicht in den eventhandler (also in meinen breakpoint auf case event id).

die anderen htmlb events funktionieren!
hab also praktisch sowas wie

when sel_user.

...

im eventhandler onInputProcessing!

Beitrag von Gast ( / / 0 / 3 ) »

Code: Alles auswählen.

IF event_id = cl_htmlb_manager=>event_id. 

  DATA :    tv                TYPE REF TO cl_htmlb_tableview, 
            table_event       TYPE REF TO cl_htmlb_event_tableview, 
            iterator          TYPE REF TO IF_HTMLB_TABLEVIEW_ITERATOR, 
            tv_data           TYPE REF TO cl_htmlb_event_tableview. 

  event = cl_htmlb_manager=>get_event( runtime->server->request ). 

    IF  event             IS NOT INITIAL 
    AND event->name       = 'tableView' 
    AND event->event_type = 'cellClick'. 
      table_event ?= event. 
***   REFERENZ VON tv auf tableView Objekt 
      tv ?= cl_htmlb_manager=>get_data( 
               request = runtime->server->request 
               name    = 'tableView' 
               id      = 'Tv1' ). 
      table_event = tv->data. 

*#### WELCHE SPALTE WURDE MARKIERT ######## 
      CASE table_event->SERVER_EVENT. 

*** SPALTE: FREIGABE 
        WHEN 'sel_user'. 
        
        


              
              
              
              
              
        when others.
      
        endcase.  
    endif.
    
endif.   

das ist meine eventhandler!!

Vergleichbare Themen

5
Antw.
4995
Views
Image aus DB-Tabelle in WDA anzeigen
von Thanatos82 » 26.04.2013 11:55 • Verfasst in Web-Dynpro, BSP + BHTML
0
Antw.
5258
Views
2
Antw.
2345
Views
Größe von Image-Element an Umgebung anpassen
von Tobias85 » 11.04.2013 16:55 • Verfasst in Web-Dynpro, BSP + BHTML
2
Antw.
3634
Views
Image auf Custom Control des Dynpros anbringen
von pitty » 13.10.2015 16:04 • Verfasst in Dialogprogrammierung
1
Antw.
3229
Views
Image Source für Button zur Laufzeit festlegen
von Dyrdek » 06.04.2016 14:07 • Verfasst in Web-Dynpro, BSP + BHTML

Über diesen Beitrag


Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

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

Aktuelle Forenbeiträge

IF mit AND und OR
vor 5 Stunden von wreichelt 2 / 129
PCL2 Cluster auslesen
vor 9 Stunden von DeathAndPain 2 / 219
FUBA 'HR_INFOTYPES_OPERATION'
vor 11 Stunden von Bright4.5 3 / 4382

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.