xurgestaltx Geschrieben 14. August 2014 Geschrieben 14. August 2014 Guten Morgen, ich hab ein Problem in einem SAP ABAP Programm, ich habe 2 mal ein Programm geschrieben: 1 mal mit Dynamischer Selektion und 1 mal mit einer ALV Ausgabe - Problem: Ich bin vermutlich zu doof für Copy & Paste! Kann jemand da bitte drüber schauen und mir sagen, warum er mir keine ALV Ausgabe bietet und mir erklären, was ich falsch mache? *&---------------------------------------------------------------------* *& Report Z_BC_AUTH *& *&---------------------------------------------------------------------* *&Infosystem zur Abfrage von: *& 1. Transaktionen -> Welche Rollen behinhalten die ausgewählte Transaktion *& 2. Rollen -> Welche Transaktionen können mit der ausgewählten Rolle aufgerufen werden *& 3. Benutzer -> Welche Rollen haben ausgewählte Benutzer *& Ausagbe: ALV-Liste *&---------------------------------------------------------------------* report z_bc_auth. tables: sscrfields, agr_tcodes, agr_texts. data: lttstct type table of tstct, wa_tstct type tstct. data: ltrole_owner type table of /realtime/apmc23-role_owner, ltagr_texts type table of agr_texts. types: begin of ls_roles, agr_name type agr_name, text type agr_title, role_owner type /realtime/apm_owner, end of ls_roles. types: begin of ls_tcode, tcode type agxreport, ttext type ttext_stct, end of ls_tcode. data: wa_agr_tcodes type agr_tcodes, lt_agr_tcodes type table of agr_tcodes. data: wa_tcode type ls_tcode, lt_tcode type table of ls_tcode. data: wa_roles type zsd_roles, lt_roles type table of zsd_roles. data: lv_counter1 type flag, lv_counter2 type flag, lv_counter3 type flag. data: ok_code like sy-ucomm, * allgemeiner Container für die Darstellung (Custom Controls) g_custom_container type ref to cl_gui_custom_container, * Containername im Dynpro (Custom Controls) g_container type scrfname value 'LT_ROLES', * Klasse mit allen Methoden und Attributen für die ALV-Grid Darstellung grid1 type ref to cl_gui_alv_grid, * Layoutvariante, welche vorgegeben werden kann lv_variant type disvariant. selection-screen begin of screen 100 as subscreen. parameters: rb_tcode radiobutton group a1 user-command uc2 default 'X', rb_role radiobutton group a1, rb_user radiobutton group a1. selection-screen skip. parameters: p_tcode type agr_tcodes-tcode modif id uc1. parameters: p_role type agr_tcodes-agr_name default 'Z:*' modif id uc1. parameters: p_user type sy-uname default sy-uname matchcode object kw_f4_username modif id uc1. selection-screen end of screen 100. selection-screen begin of tabbed block block1 for 6 lines. selection-screen tab (30) tab1 user-command '' default screen 100. selection-screen end of block block1. initialization. tab1 = 'Auswahl über'. at selection-screen output. loop at screen. * Radiobutton rb_tcode if screen-group1 = 'UC1'. if rb_tcode eq 'X' and ( screen-name = 'P_TCODE' or screen-name = '%_P_TCODE_%_APP_%-TEXT' ). screen-active = 1. screen-invisible = 0. modify screen. * Radiobutton rb_tcode elseif rb_tcode ne 'X' and ( screen-name = 'P_TCODE' or screen-name = '%_P_TCODE_%_APP_%-TEXT' ). screen-active = 0. screen-invisible = 1. modify screen. endif. * Radiobutton rb_role if rb_role eq 'X' and ( screen-name = 'P_ROLE' or screen-name = '%_P_ROLE_%_APP_%-TEXT' ). screen-active = 1. screen-invisible = 0. modify screen. * Radiobutton rb_role elseif rb_role ne 'X' and ( screen-name = 'P_ROLE' or screen-name = '%_P_ROLE_%_APP_%-TEXT' ). screen-active = 0. screen-invisible = 1. modify screen. endif. * Radiobutton rb_user if rb_user eq 'X' and ( screen-name = 'P_USER' or screen-name = '%_P_USER_%_APP_%-TEXT' ). screen-active = 1. screen-invisible = 0. modify screen. * Radiobutton rb_user elseif rb_user ne 'X' and ( screen-name = 'P_USER' or screen-name = '%_P_USER_%_APP_%-TEXT' ). screen-active = 0. screen-invisible = 1. modify screen. endif. endif. endloop. start-of-selection. if rb_tcode = 'X'. perform read_roles. *Lesen aller Rollen, welche den abgefragten TCode beinhalten. elseif rb_role = 'X'. perform read_tcode. *Lesen aller Tcodes, welche in der abgefragten Rolle enthalten sind. elseif rb_user = 'X'. perform read_user. *Lesen aller Rollen, welche dem abgefragten User zugeordnet sind. endif. *&---------------------------------------------------------------------* *& Form read_roles *&---------------------------------------------------------------------* * Lesen aller Rollen, welche den abgefragten TCode beinhalten *----------------------------------------------------------------------* form read_roles. data: wa_activity_groups type agr_tcodes, lt_activity_groups type table of agr_tcodes. call function 'PRGN_READ_ACTIVITY_GR_TCODE' exporting tcode = p_tcode tables activity_groups = lt_activity_groups exceptions no_activity_groups_available = 1 others = 2. loop at lt_activity_groups into wa_activity_groups. if wa_activity_groups-agr_name cs 'Z:'. if lv_counter1 is initial. write: / 'Rollenname', 32 'Rollenbezeichnung', 113 'Rolleneigentümer'. lv_counter1 = 'X'. endif. wa_roles-agr_name = wa_activity_groups-agr_name. select single role_owner from /realtime/apmc23 into wa_roles-role_owner where agr_name = wa_roles-agr_name. select single text from agr_texts into wa_roles-text where agr_name = wa_roles-agr_name and spras = 'D'. append wa_roles to lt_roles. *WRITE: / wa_roles-agr_name, wa_roles-text, wa_roles-role_owner. endif. endloop. endform. "read_roles *&---------------------------------------------------------------------* *& Module PROCESS_BEFORE_OUTPUT OUTPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* module process_before_output output. * optional für die Bereitstellung des Feldkatalogs data: lt_fieldcat type lvc_t_fcat, wa_fieldcat type line of lvc_t_fcat. if g_custom_container is initial. create object g_custom_container exporting container_name = g_container. create object grid1 exporting i_parent = g_custom_container. perform fieldcat. call method grid1->set_table_for_first_display exporting i_structure_name = 'ZSD_ROLES' i_save = 'A' * is_variant = lv_variant changing it_outtab = lt_roles. *optionaler Aufbau des Feldkatalogs der Tabelle, wenn keine Struktur vorhanden. * it_fieldcatalog = lt_fieldcat. endif. endmodule. " PROCESS_BEFORE_OUTPUT OUTPUT *&---------------------------------------------------------------------* *& Form FIELDCAT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* form fieldcat . wa_fieldcat-fieldname = 'AGR_NAME'. wa_fieldcat-ref_table = 'ZSD_ROLES'. wa_fieldcat-just = 'L'. append wa_fieldcat to lt_fieldcat. wa_fieldcat-fieldname = 'TEXT'. wa_fieldcat-ref_table = 'ZSD_ROLES'. wa_fieldcat-just = 'L'. append wa_fieldcat to lt_fieldcat. wa_fieldcat-fieldname = 'ROLE_OWNER'. wa_fieldcat-ref_table = 'ZSD_ROLES'. wa_fieldcat-just = 'C'. append wa_fieldcat to lt_fieldcat. endform. " FIELDCAT *&---------------------------------------------------------------------* *& Module PROCESS_AFTER_INPUT INPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* module process_after_input input. case ok_code. when 'EXIT'. leave program. when 'BACK'. leave to screen 0. when others. leave program. endcase. clear ok_code. endmodule. " PROCESS_AFTER_INPUT INPUT[/PHP] Zitieren
neinal Geschrieben 14. August 2014 Geschrieben 14. August 2014 Soweit ich das beurteilen kann.... du baust deinen Feldkatalog zusammen und machst ein Append to lt_fieldcat. Aber lt_fieldcat wird nie verwendet. *optionaler Aufbau des Feldkatalogs der Tabelle, wenn keine Struktur vorhanden. * it_fieldcatalog = lt_fieldcat. Wenn du lt_fielcat verwenden willst, muss das Sternchen weg. Für alle, die es leid sind sich einen Fieldcat zusammen zu bauen gibt es aber auch noch eine andere Möglichkeit: Data: gref_salv TYPE REF TO cl_salv_table, ref_func TYPE REF TO cl_salv_functions. TRY. CALL METHOD cl_salv_table=>factory IMPORTING r_salv_table = gref_salv CHANGING t_table = it_table. CATCH cx_salv_msg . ENDTRY. ref_func = gref_salv->get_functions( ). ref_func->set_all( abap_true ). gref_salv->display( ). Zitieren
xurgestaltx Geschrieben 14. August 2014 Autor Geschrieben 14. August 2014 Danke für die Antwort, doch wenn ich das * wegnehme, erhalte ich eine Fehlermeldung: Feld "IT_FIELDCATALOG" unbekannt. Es existiert aber ein Feld mit dem ähnlichen Namen "LT_FIELDCAT" Zudem habe ich den Code 1:1 aus dem anderen Programm kopiert und dort funktioniert die ALV-Ausgabe. Also platziere ich ja irgendetwas falsch oder? Zitieren
AlexS1980 Geschrieben 14. August 2014 Geschrieben 14. August 2014 Beim Aufruf von set_table_for_first_display ist hinter lt_roles ist ein Punkt. Dadurch wird wenn der Kommentarstern weg ist versucht dem it_fieldcatalog der Inhalt von lt_fieldcat zuzuweisen... klar dass das nicht klappt & in der genannten korrekten Fehlermeldung resultiert. Zitieren
xurgestaltx Geschrieben 26. August 2014 Autor Geschrieben 26. August 2014 Na wer hätte das gedacht, was ein kleiner "Call Screen 200." ausmacht Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.