Uprawnienia do zapisu layoutu w ALV

Jeśli programujesz, administrujesz, integrujesz i masz wątpliwość lub obawę, to właśnie najlepsze miejsce dla Ciebie. Pisz śmiało...
wojtas7
Posty: 979
Rejestracja: pt mar 14, 2008 12:51 pm
Has thanked: 65 times
Been thanked: 271 times

Uprawnienia do zapisu layoutu w ALV

Post autor: wojtas7 »

Jest obiekt autoryzacyjny S_ALV_LAYO którym można sterować czy ktoś ma prawo do zapisania domyślnego wariantu layoutu na ALV. Czy można wysterować uprawnieniami żeby tylko określone raporty mogły mieć pole "Default setting" niedostępne dla userów? Problem dość powszechny - ludzie nadpisują domyślne warianty i innym użytkownikom pojawiają się nieoczekiwane rzeczy (filtry, sortowanie, kolejność kolumn itd). Zabierając całkiem to uprawnienie, wykastrujemy z kolei raporty, gdzie powinni mieć taką możliwość.

Ot, taka zagwozdka.
Dzięki.
dominik.tylczynski
Posty: 7973
Rejestracja: wt kwie 03, 2007 4:05 pm
Has thanked: 1697 times
Been thanked: 1358 times

Re: Uprawnienia do zapisu layoutu w ALV

Post autor: dominik.tylczynski »

K602
Posty: 49
Rejestracja: śr sie 24, 2022 11:50 am
Has thanked: 23 times
Been thanked: 35 times

Re: Uprawnienia do zapisu layoutu w ALV

Post autor: K602 »

Widzę przynajmniej dwa sposoby.

Jeśli używasz obiektowej ALV (z design pattern: factory), to można podejść tak, że przy włączaniu opcji zapisu wariantu, pozawalasz je robić jedynie dla danego użytkownika. Krótko mówiąc, użytkownik zapisuje tylko dla siebie warianty i nie są one widoczne dla innych. W poniższym przypadku to RESTRICT_USER_DEPENDANT.

Albo drugi sposób. Robisz swój obiekt uprawnień i sprawdzasz go przed dodaniem opcji zapisu wariantu do ALV.

Kod: Zaznacz cały

AUTHORITY-CHECK OBJECT 'ZALV_V_SAV'
         ID 'ACTVT' FIELD '__________'.
Z tego globalnego bym nie korzystał, bo zapewne działa on dla wszystkich ALV w systemie... (cyt. However, the authorization is cross-report; that is, you cannot restrict or allow maintenance report-specifically).
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
SAP ABAP Certified Developer | Chief Specialist
wojtas7
Posty: 979
Rejestracja: pt mar 14, 2008 12:51 pm
Has thanked: 65 times
Been thanked: 271 times

Re: Uprawnienia do zapisu layoutu w ALV

Post autor: wojtas7 »

Dziękuję :-) Chyba bez developmentu, samymi rolami, za bardzo nie da się tego zrobić, bo chodzi o to żeby zabrać uprawnienia do zapisywania globalnego wariantu wszystkim userom, oprócz key-userów, tylko w obrębie jednego raportu. Tu akurat jest REUSE_ALV_GRID_DISPLAY w użyciu.
dominik.tylczynski
Posty: 7973
Rejestracja: wt kwie 03, 2007 4:05 pm
Has thanked: 1697 times
Been thanked: 1358 times

Re: Uprawnienia do zapisu layoutu w ALV

Post autor: dominik.tylczynski »

Czy obiekt S_ALV_LAYR z wcześniej wskazanej noty zadziałał?
K602
Posty: 49
Rejestracja: śr sie 24, 2022 11:50 am
Has thanked: 23 times
Been thanked: 35 times

Re: Uprawnienia do zapisu layoutu w ALV

Post autor: K602 »

dominik.tylczynski pisze: śr sty 25, 2023 11:17 am Czy obiekt S_ALV_LAYR z wcześniej wskazanej noty zadziałał?
wojtas7 pisze: śr sty 25, 2023 11:02 am tylko w obrębie jednego raportu
cyt. However, the authorization is cross-report; that is, you cannot restrict or allow maintenance report-specifically.

=>

Nie można użyć tej roli w tym przypadku...
SAP ABAP Certified Developer | Chief Specialist
dominik.tylczynski
Posty: 7973
Rejestracja: wt kwie 03, 2007 4:05 pm
Has thanked: 1697 times
Been thanked: 1358 times

Re: Uprawnienia do zapisu layoutu w ALV

Post autor: dominik.tylczynski »

K602 pisze: śr sty 25, 2023 11:35 am
dominik.tylczynski pisze: śr sty 25, 2023 11:17 am Czy obiekt S_ALV_LAYR z wcześniej wskazanej noty zadziałał?
wojtas7 pisze: śr sty 25, 2023 11:02 am tylko w obrębie jednego raportu
cyt. However, the authorization is cross-report; that is, you cannot restrict or allow maintenance report-specifically.

=>

Nie można użyć tej roli w tym przypadku...

Moim zdaniem nota 1667238 - Introduction of authorization object S_ALV_LAYR powinna rozwiązać problem.
Nota pisze:1667238 - Introduction of authorization object S_ALV_LAYR
Symptom
You use the authorization S_ALV_LAYO to enable maintenance for cross-user ALV layouts. However, the authorization is cross-report; that is, you cannot restrict or allow maintenance report-specifically.

Solution
This correction provides the new authorization object S_ALV_LAYR. This allows you (if there is no authorization for S_ALV_LAYO) to save layouts through specific authorization assignment for the authorization object S_ALV_LAYR within the ALV instance (specified by report name, handle, and Log_Group).
Rozumiem to tak, że nota daje nowy obiekt autoryzacyjny S_ALV_LAYR, który działa tak samo jak S_ALV_LAYO, ale na poziomie konkretnego raportu.
Kontrola obiektu S_ALV_LAYR jest wykonywana jeśli użytkownik nie ma uprawnień do S_ALV_LAYO.
wojtas7
Posty: 979
Rejestracja: pt mar 14, 2008 12:51 pm
Has thanked: 65 times
Been thanked: 271 times

Re: Uprawnienia do zapisu layoutu w ALV

Post autor: wojtas7 »

Jeśli ten nowy obiekt autoryzacyjny tak działa, to by trzeba dać userom tyle uprawnień, ile raportów ALV używają, nawet rozszerzać to w przyszłości o nowe. A fajnie by było żeby było wprost przeciwnie - mogą zapisywać globalne warianty wszystkich raportów, oprócz tego jednego. Trudny temat?
dominik.tylczynski
Posty: 7973
Rejestracja: wt kwie 03, 2007 4:05 pm
Has thanked: 1697 times
Been thanked: 1358 times

Re: Uprawnienia do zapisu layoutu w ALV

Post autor: dominik.tylczynski »

Nie, nie trudny, ale niestandardowy. Dzięki nocie wiesz dokładnie gdzie ALV robi kontrolę autoryzacji. Możesz się wbić w te miejsca z własną logiką.
K602
Posty: 49
Rejestracja: śr sie 24, 2022 11:50 am
Has thanked: 23 times
Been thanked: 35 times

Re: Uprawnienia do zapisu layoutu w ALV

Post autor: K602 »

dominik.tylczynski pisze: śr sty 25, 2023 3:02 pm Solution
This correction provides the new authorization object S_ALV_LAYR. This allows you (if there is no authorization for S_ALV_LAYO) to save layouts through specific authorization assignment for the authorization object S_ALV_LAYR within the ALV instance (specified by report name, handle, and Log_Group).

Rozumiem to tak, że nota daje nowy obiekt autoryzacyjny S_ALV_LAYR, który działa tak samo jak S_ALV_LAYO, ale na poziomie konkretnego raportu.
Kontrola obiektu S_ALV_LAYR jest wykonywana jeśli użytkownik nie ma uprawnień do S_ALV_LAYO.
Zgadza się. Tak trzeba to rozumieć. Tego nie doczytałem.

Tak czy inaczej, w Twoim przypadku, tak się aktywuje ten zapis:

Kod: Zaznacz cały

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
* EXPORTING
*   I_INTERFACE_CHECK                 = ' '
*   I_BYPASSING_BUFFER                = ' '
*   I_BUFFER_ACTIVE                   = ' '
*   I_CALLBACK_PROGRAM                = ' '
*   I_CALLBACK_PF_STATUS_SET          = ' '
*   I_CALLBACK_USER_COMMAND           = ' '
*   I_CALLBACK_TOP_OF_PAGE            = ' '
*   I_CALLBACK_HTML_TOP_OF_PAGE       = ' '
*   I_CALLBACK_HTML_END_OF_LIST       = ' '
*   I_STRUCTURE_NAME                  = I_STRUCTURE_NAME
*   I_BACKGROUND_ID                   = ' '
*   I_GRID_TITLE                      = I_GRID_TITLE
*   I_GRID_SETTINGS                   = I_GRID_SETTINGS
*   IS_LAYOUT                         = IS_LAYOUT
*   IT_FIELDCAT                       = IT_FIELDCAT
*   IT_EXCLUDING                      = IT_EXCLUDING
*   IT_SPECIAL_GROUPS                 = IT_SPECIAL_GROUPS
*   IT_SORT                           = IT_SORT
*   IT_FILTER                         = IT_FILTER
*   IS_SEL_HIDE                       = IS_SEL_HIDE
*   I_DEFAULT                         = 'X'
*   I_SAVE                            = ' '
*   IS_VARIANT                        = IS_VARIANT
*   IT_EVENTS                         = IT_EVENTS
*   IT_EVENT_EXIT                     = IT_EVENT_EXIT
*   IS_PRINT                          = IS_PRINT
*   IS_REPREP_ID                      = IS_REPREP_ID
*   I_SCREEN_START_COLUMN             = 0
*   I_SCREEN_START_LINE               = 0
*   I_SCREEN_END_COLUMN               = 0
*   I_SCREEN_END_LINE                 = 0
*   I_HTML_HEIGHT_TOP                 = 0
*   I_HTML_HEIGHT_END                 = 0
*   IT_ALV_GRAPHICS                   = IT_ALV_GRAPHICS
*   IT_HYPERLINK                      = IT_HYPERLINK
*   IT_ADD_FIELDCAT                   = IT_ADD_FIELDCAT
*   IT_EXCEPT_QINFO                   = IT_EXCEPT_QINFO
*   IR_SALV_FULLSCREEN_ADAPTER        = IR_SALV_FULLSCREEN_ADAPTER
* IMPORTING
*   E_EXIT_CAUSED_BY_CALLER           = E_EXIT_CAUSED_BY_CALLER
*   ES_EXIT_CAUSED_BY_USER            = ES_EXIT_CAUSED_BY_USER
  TABLES
    t_outtab                          = t_outtab
* EXCEPTIONS
*   PROGRAM_ERROR                     = 1
*   OTHERS                            = 2
          .
I_SAVE = 'X'

Podstaw tam zmienną typu c i steruj nią, czy to dla konkretnych użytkowników, czy to dla uprawnień (sposób podałem). Te uprawnienia to nie koniecznie związane z ALV, ale np. inne, administracyjne, czy coś, przez co będziesz mógł wyselekcjonować te osoby, bez zarządzania uprawnieniami...
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Ostatnio zmieniony czw sty 26, 2023 9:37 am przez K602, łącznie zmieniany 1 raz.
SAP ABAP Certified Developer | Chief Specialist
K602
Posty: 49
Rejestracja: śr sie 24, 2022 11:50 am
Has thanked: 23 times
Been thanked: 35 times

Re: Uprawnienia do zapisu layoutu w ALV

Post autor: K602 »

wojtas7 pisze: śr sty 25, 2023 3:56 pm Jeśli ten nowy obiekt autoryzacyjny tak działa, to by trzeba dać userom tyle uprawnień, ile raportów ALV używają, nawet rozszerzać to w przyszłości o nowe. A fajnie by było żeby było wprost przeciwnie - mogą zapisywać globalne warianty wszystkich raportów, oprócz tego jednego. Trudny temat?
To wymaganie spełni najlepiej wspomniana już przeze mnie metoda factory:

Kod: Zaznacz cały

*-- Tworzenie ALV
    TRY.
        cl_salv_table=>factory(
          EXPORTING
            list_display   = abap_false
*        r_container    = r_container
*        container_name = container_name
          IMPORTING
            r_salv_table   = me->lo_alv
          CHANGING
            t_table        = me->lt_contr
          ).
      CATCH cx_salv_msg.
    ENDTRY.

*-- Save layout
    lo_layout = lo_alv->get_layout( ).
    ls_key-report = sy-repid.
    lo_layout->set_key( ls_key ).
    lo_layout->set_save_restriction( if_salv_c_layout=>RESTRICT_USER_DEPENDANT ).
Wtedy każdy zapisuje swoje i tyle... ale to wymaga przebudowania raportu. Jeśli jest duży i skomplikowany, no to nie koniecznie idealna opcja ;)
SAP ABAP Certified Developer | Chief Specialist
wojtas7
Posty: 979
Rejestracja: pt mar 14, 2008 12:51 pm
Has thanked: 65 times
Been thanked: 271 times

Re: Uprawnienia do zapisu layoutu w ALV

Post autor: wojtas7 »

dominik.tylczynski pisze: śr sty 25, 2023 4:35 pm Nie, nie trudny, ale niestandardowy. Dzięki nocie wiesz dokładnie gdzie ALV robi kontrolę autoryzacji. Możesz się wbić w te miejsca z własną logiką.
Jasne, dzięki, wszystko klarowne. Temat określam jako nietrywialny, z tego względu że nie załatwi się tego mailem/zmianą samych uprawnień, ale trzeba development.

Miłego!
dominik.tylczynski
Posty: 7973
Rejestracja: wt kwie 03, 2007 4:05 pm
Has thanked: 1697 times
Been thanked: 1358 times

Re: Uprawnienia do zapisu layoutu w ALV

Post autor: dominik.tylczynski »

Faktycznie, nietrywialny, ale i nieskomplikowany. Development jest potrzebny, bo chcesz zrobić niestandardową logikę kontroli uprawnień - w SAP uprawnienia się nadaje, a Ty chcesz je raczej odebrać, czyli uniemożliwić użytkownikom zmiany wariantów wybranych raportów.
wojtas7
Posty: 979
Rejestracja: pt mar 14, 2008 12:51 pm
Has thanked: 65 times
Been thanked: 271 times

Re: Uprawnienia do zapisu layoutu w ALV

Post autor: wojtas7 »

Zgadza się i co ciekawe pierwszy raz użytkownicy sami o to poprosili, po tym jak nadpisali centralny wariant:-)