cancel
Showing results for 
Search instead for 
Did you mean: 

How do i know PFCG role for a particular catalog id in SAP Fiori

rohit_dutta2
Explorer
0 Kudos

Suppose we have 3 tiles for a particular catalog in SAP Fiori lauchpad. Like below screenshot.

How can I get the PFCG role for that particular Catalog?

Accepted Solutions (0)

Answers (2)

Answers (2)

almastro23
Explorer
0 Kudos

Have you tried searching table AGR_BUFFI with field URL = *<catalogname>*

You can also use trx /UI2/FLC or, depending on your Fiori version, trx /UI2/FLPCM_CUST (or /UI2/FLPCM_CONF)

Another option is using trx SUIM > Roles > Search for Applications in Role Menu > Type of Menu Entry = Launchpad Catalog and entering the catalog name(s) into field Catalog

Regards

VincentBloem
Participant
0 Kudos

HI,

I created a program for that:

DATA: lt_agr_hier  TYPE TABLE OF agr_hier,
      lt_agr_hiert TYPE TABLE OF agr_hiert,
      lt_agr_buffi TYPE TABLE OF agr_buffi.
DATA: lt_roles TYPE TABLE OF agr_hier.
DATA: check, found TYPE boolean.
CONSTANTS: ct_group   TYPE char30 VALUE 'Fiori Group',
           ct_catalog TYPE char30 VALUE 'Fiori Catalog'.
FIELD-SYMBOLS <fs_role> LIKE LINE OF lt_roles.
FIELD-SYMBOLS <fs_agr_hier> LIKE LINE OF lt_agr_hier.
FIELD-SYMBOLS <fs_agr_hiert> LIKE LINE OF lt_agr_hiert.
DATA: ls_agr_buffi TYPE agr_buffi.
DATA: ls_agr_hiert TYPE agr_hiert.
DATA lv_part1 TYPE string.
DATA lv_part2 TYPE string.
SELECT * FROM agr_hier INTO TABLE lt_agr_hier WHERE report EQ 'GROUP_PROVIDER' OR report EQ 'CAT_PROVIDER'.
SELECT * FROM agr_hiert INTO TABLE lt_agr_hiert FOR ALL ENTRIES IN lt_agr_hier WHERE agr_name = lt_agr_hier-agr_name AND spras = 'E'.
SELECT * FROM agr_buffi INTO TABLE lt_agr_buffi.
SELECT * FROM /ui2/pb_c_pagemt INTO TABLE @DATA(lt_pagemt) WHERE langu EQ 'N'.
SELECT * FROM /ui2/pb_c_paget INTO TABLE @DATA(lt_paget) WHERE langu EQ 'N'.
SELECT * FROM /ui2/pb_c_propmt INTO TABLE @DATA(lt_prompt) WHERE langu EQ 'N'.
SELECT * FROM /ui2/pb_c_chipm INTO TABLE @DATA(lt_chipm).
SELECT * FROM /ui2/pb_c_chipmt INTO TABLE @DATA(lt_chipmt) WHERE langu EQ 'N'.
SELECTION-SCREEN BEGIN OF BLOCK bl1 WITH FRAME TITLE TEXT-001.
PARAMETERS: c_cat      AS CHECKBOX DEFAULT abap_true.
PARAMETERS: c_grp      AS CHECKBOX DEFAULT abap_true.
SELECTION-SCREEN END OF BLOCK bl1.
SELECTION-SCREEN BEGIN OF BLOCK bl2 WITH FRAME TITLE TEXT-002.
PARAMETERS: grpid      TYPE ssm_title.
PARAMETERS: grpdesc    TYPE ssm_title.
SELECTION-SCREEN END OF BLOCK bl2.
SELECTION-SCREEN BEGIN OF BLOCK bl3 WITH FRAME TITLE TEXT-003.
PARAMETERS: catid      TYPE ssm_title.
PARAMETERS: catdesc    TYPE ssm_title.
SELECTION-SCREEN END OF BLOCK bl3.
SELECT * FROM agr_hier INTO TABLE lt_roles WHERE ( report EQ 'GROUP_PROVIDER' OR report EQ 'CAT_PROVIDER' ).
SORT lt_roles ASCENDING.
DELETE ADJACENT DUPLICATES FROM lt_roles COMPARING agr_name.
SELECT agr_hier~agr_name AS agr_name,
       agr_hier~report AS report,
       agr_hier~object_id AS object_id,
       agr_texts~text AS role_description,
       agr_texts~spras AS language,
       agr_buffi~url AS url,
       agr_hiert~text AS text,
       /ui2/pb_c_chipm~BASECHIPID as tile_id
  FROM agr_hier AS agr_hier
  LEFT OUTER JOIN agr_texts AS agr_texts
    ON agr_hier~agr_name = agr_texts~agr_name
    LEFT OUTER JOIN agr_buffi AS agr_buffi
    ON agr_hier~agr_name = agr_buffi~agr_name AND
       agr_hier~object_id = agr_buffi~object_id
    LEFT OUTER JOIN agr_hiert AS agr_hiert
      ON  agr_hier~agr_name = agr_hiert~agr_name AND
          agr_hier~object_id = agr_hiert~object_id
    LEFT OUTER JOIN /ui2/pb_c_chipm AS /ui2/pb_c_chipm
      ON agr_buffi~url = /ui2/pb_c_chipm~parentid
    INTO TABLE @DATA(lt_roles2)
  WHERE ( agr_hier~report EQ 'GROUP_PROVIDER' OR agr_hier~report EQ 'CAT_PROVIDER' ) AND agr_texts~spras EQ 'N' AND agr_hiert~spras EQ 'N'.
  sort lt_roles2 by agr_name.
IF c_cat EQ abap_false.
  DELETE lt_agr_hier WHERE report EQ 'CAT_PROVIDER'.
ENDIF.
IF c_grp EQ abap_false.
  DELETE lt_agr_hier WHERE report EQ 'GROUP_PROVIDER'.
ENDIF.
WRITE : ' PFCG Role ' COLOR COL_KEY, ' Fiori Group ' COLOR COL_GROUP , ' Fiori Catalog ' COLOR COL_NEGATIVE , ' Fiori App' COLOR COL_TOTAL.
SKIP 2.
*FIELD-SYMBOLS <fs_role> LIKE LINE OF lt_roles2.
LOOP AT lt_roles ASSIGNING <fs_role>.
  check = abap_false.
  found = abap_false.
*  perform filter:
*  search on group description:
  IF grpdesc IS NOT INITIAL.
    READ TABLE lt_agr_hiert WITH KEY agr_name = <fs_role>-agr_name spras = 'N' INTO ls_agr_hiert.
    IF sy-subrc = 0.
      READ TABLE lt_agr_hier WITH KEY agr_name = <fs_role>-agr_name report = 'GROUP_PROVIDER' TRANSPORTING NO FIELDS.
      IF sy-subrc = 0.
        IF ls_agr_hiert-text CS grpdesc.
          found = abap_true.
        ENDIF.
      ENDIF.
    ENDIF.
  ENDIF.
*  search on catalog description:
  IF catdesc IS NOT INITIAL.
    READ TABLE lt_agr_hiert WITH KEY agr_name = <fs_role>-agr_name spras = 'N' INTO ls_agr_hiert.
    IF sy-subrc = 0.
      READ TABLE lt_agr_hier WITH KEY agr_name = <fs_role>-agr_name report = 'CAT_PROVIDER' TRANSPORTING NO FIELDS.
      IF sy-subrc = 0.
        IF ls_agr_hiert-text CS catdesc.
          found = abap_true.
        ENDIF.
      ENDIF.
    ENDIF.
  ENDIF.
*  search on groupid:
  IF grpid IS NOT INITIAL.
    LOOP AT lt_agr_hier ASSIGNING <fs_agr_hier> WHERE agr_name = <fs_role>-agr_name AND report = 'GROUP_PROVIDER'.
      READ TABLE lt_agr_buffi WITH KEY object_id = <fs_agr_hier>-object_id agr_name = <fs_agr_hier>-agr_name INTO ls_agr_buffi.
      SPLIT ls_agr_buffi-url AT ':' INTO lv_part1 lv_part2.
      SPLIT lv_part2 AT '?' INTO lv_part1 lv_part2.
      IF lv_part1 CS grpid.
        found = abap_true.
        EXIT.
      ENDIF.
    ENDLOOP.
  ENDIF.
*  search on catid:
  IF catid IS NOT INITIAL.
    LOOP AT lt_agr_hier ASSIGNING <fs_agr_hier> WHERE agr_name = <fs_role>-agr_name AND report = 'CAT_PROVIDER'.
      READ TABLE lt_agr_buffi WITH KEY object_id = <fs_agr_hier>-object_id agr_name = <fs_agr_hier>-agr_name INTO ls_agr_buffi.
      SPLIT ls_agr_buffi-url AT ':' INTO lv_part1 lv_part2.
      SPLIT lv_part2 AT '?' INTO lv_part1 lv_part2.
      IF lv_part1 CS catid.
        found = abap_true.
        EXIT.
      ENDIF.
    ENDLOOP.
  ENDIF.
  IF grpid IS NOT INITIAL OR grpdesc IS NOT INITIAL OR catid IS NOT INITIAL OR catdesc IS NOT INITIAL.
    IF found = abap_true.
      check = abap_true.
    ENDIF.
  ELSE.
    check = abap_true.
  ENDIF.
  IF check = abap_true.
    WRITE:/ 'PFCG-role:' , <fs_role>-agr_name COLOR COL_KEY.
    LOOP AT lt_agr_hier ASSIGNING <fs_agr_hier> WHERE agr_name = <fs_role>-agr_name.
      NEW-LINE.
      WRITE: '  |'.
      NEW-LINE.
      WRITE: '  ---'.
*      IF <fs_agr_hier>-report = 'GROUP_PROVIDER'.
*        WRITE:  ct_group(16) COLOR COL_GROUP.
*      ENDIF.
*      IF <fs_agr_hier>-report = 'CAT_PROVIDER'.
*        WRITE: ct_catalog(16) COLOR COL_NEGATIVE.
*      ENDIF.
      READ TABLE lt_agr_hiert WITH KEY object_id = <fs_agr_hier>-object_id agr_name = <fs_agr_hier>-agr_name spras = 'N' INTO ls_agr_hiert.
*      WRITE: ls_agr_hiert-text.
      READ TABLE lt_agr_buffi WITH KEY object_id = <fs_agr_hier>-object_id agr_name = <fs_agr_hier>-agr_name INTO ls_agr_buffi.
      SPLIT ls_agr_buffi-url AT ':' INTO lv_part1 lv_part2.
      SPLIT lv_part2 AT '?' INTO lv_part1 lv_part2.
      IF <fs_agr_hier>-report = 'GROUP_PROVIDER'.
        WRITE: lv_part1 COLOR COL_GROUP.
      ENDIF.
      IF <fs_agr_hier>-report = 'CAT_PROVIDER'.
        WRITE: lv_part1 COLOR COL_NEGATIVE.
      ENDIF.
      LOOP AT lt_pagemt INTO DATA(ls_pagemt) WHERE langu EQ 'N' AND id EQ lv_part1.
        WRITE: ls_pagemt-title.
      ENDLOOP.
      LOOP AT lt_pagemt INTO DATA(ls_pagemt2) WHERE langu EQ 'N' AND id EQ ls_agr_buffi-url.
        WRITE: ls_pagemt2-title.
      ENDLOOP.
      LOOP AT lt_paget INTO DATA(ls_paget) WHERE langu EQ 'N' AND id EQ ls_agr_buffi-url.
        WRITE: ls_paget-title.
      ENDLOOP.
*      WRITE: lv_part1.
      LOOP AT lt_prompt INTO DATA(ls_prompt) WHERE bag_parentid CS lv_part1 AND name EQ 'display_title_text' AND value NE ''.  "tekst op de fiori app
        NEW-LINE.
        WRITE: '       |'.
        NEW-LINE.
        WRITE: '       ---' , ls_prompt-value(80) COLOR COL_TOTAL.
      ENDLOOP.
      LOOP AT lt_chipm INTO DATA(ls_chipm) WHERE parentid EQ lv_part1.
        NEW-LINE.
        WRITE: '       |'.
        NEW-LINE.
        READ TABLE lt_chipmt INTO DATA(ls_chip_t) WITH KEY id = ls_chipm-basechipid.
        WRITE: '       ---' , ls_chip_t-title(50) COLOR COL_TOTAL.
      ENDLOOP.
*      LOOP AT lt_chipm INTO DATA(ls_chipm) WHERE parentid EQ lv_part1.
*        READ TABLE lt_chipmt INTO DATA(ls_chipmt) WITH KEY id = ls_chipm-id.
*        IF ls_chipmt-title IS NOT INITIAL.
*          NEW-LINE.
*          WRITE: '       |'.
*          NEW-LINE.
*          WRITE: '       ---' , ls_chipmt-title COLOR COL_TOTAL.
*        ELSE.
*          READ TABLE lt_prompt INTO DATA(ls_propmt) WITH KEY bag_parentid = ls_chipm-id name = 'display_title_text'.
*          IF ls_propmt-value IS NOT INITIAL.
*            NEW-LINE.
*            WRITE: '       |'.
*            NEW-LINE.
*            WRITE: '       ---' , ls_propmt-value COLOR COL_TOTAL.
*          ENDIF.
*        ENDIF.
*      ENDLOOP.
    ENDLOOP.
    SKIP 1.
  ENDIF.
ENDLOOP.

Enjoy 😉

KR,

Vincent

rohit_dutta2
Explorer
0 Kudos

Hello Vincent,

Thanks for your help.I will try this program.

However, Is there any t-code or configuration, where I can see the PFCG role for a particular catalog id?

Thanks,

Rohit

RaminS
Participant
0 Kudos

But Vincent, you are using the cached table /ui2/pb_c_chipm. This is not going to give you what you want, is it?

What about the categories and groups that are not cached at the moment?

There are only 33 records in our cached table at the moment, and we have hundreds of catalogs.