SAP BW Query Exit to restrict users output

Please note this article has been written from an ABAPers point of view and some knowledge of creating BW queries will be required.

When using an authorisation object to restrict a query report it determines if the user can see everything in a range. If they cant see them all then an authorisation error will be displayed. You may have a requirement to still allow the user to see the report but to remove values they are not authorised to see.

This would be done by having 2 variables on the report selection screen, one for the user to enter their selection and a hidden one which will do the actual report restriction. The code for this will look something like this, where 'ZGMGTNOI' is the hidden field and '0S_GRANT' is the visible user input field.

**** ZGMGTNOI variable derives input from variable OS_GRANT
  WHEN 'ZGMGTNOI'.
    if i_step = 2.
*     gets selection values entered by user (0S_GRANT)
      loop at I_T_VAR_RANGE into  wa_range where VNAM eq   '0S_GRANT'
                                             and IOBJNM eq '0GRANT_NBR'.
        wa_grant-low  = wa_range-low.
        wa_grant-high = wa_range-high.
        wa_grant-option  = wa_range-opt.
        wa_grant-sign = wa_range-sign.
        append wa_grant to r_grant.
      endloop.
*     selects all grants user is authorised to see within entered
*     selection values
      select grant_nbr
            from ZGMUSERGRANTS
            into corresponding fields of table it_ZGMUSERGRANTS
           where UNAME eq sy-uname
             and grant_nbr in r_grant.
*     If no values are found! Populates hidden restriction variable with
*     user input
      if sy-subrc ne 0.
        loop at r_grant into wa_grant.
          move-corresponding  wa_grant to wa_ETRANGE.
          wa_ETRANGE-opt = wa_grant-option.
          append wa_ETRANGE to E_T_RANGE.
        endloop.
*     If values are found! Populates hidden restriction variable with
*     all values user is authorised to see
      else.
        clear: wa_range.
        loop at it_ZGMUSERGRANTS into wa_ZGMUSERGRANTS.
          wa_ETRANGE-sign = 'I'.
          wa_ETRANGE-opt = 'EQ'.
          wa_ETRANGE-low  = wa_ZGMUSERGRANTS-grant_nbr.
          append wa_ETRANGE to E_T_RANGE.
        endloop.
      endif.
    endif.

SAP BW Query Exit to populate authorisation dynamically


Related Articles

Business Warehouse(BW) & Business Intelligence(BI) development
What is the BW user exit RSR00001, and How does it work?
SAP BW Query User exit RSR00001 to populate query authorisation object dynamically
BI development using the SAP BW Query User exit RSR00001 to enhance your business warehouse querys