Skip to Content

No Fiori 2.0 a SAP introduziu a “Me Area” onde é possível obter informações do usuário, fazer logoff, encontrar apps, editar os grupos do Launchpad, setar valores default, etc. Umas das coisas que acho legal dessa área e da um “charme” é a fotinha do usuário.

Nas apresentações da SAP ela está sempre presente mas… quando você começa a utilizar o Fiori talvez se pergunte: “Que diabo de lugar eu posso colocar minha foto nesse sistema? Será na SU01? Será clicando no ícone do bonequinho que aparece?”

A nota 2381470 acaba com a brincadeira. Para utilizar a foto do usuário só integrando com o SAP Jam.

Uma opção para contornar a integração é a criação de um plugin para o Launchpad, no qual pode ser visualizado no blog abaixo.

https://blogs.sap.com/2016/12/02/custom-user-image-in-fiori-2.0/

Abaixo, segue outra opção onde vamos “dar um gato” nos serviços que fazer a integração com o SAP Jam.

Na primeira parte, o sistema fará a busca por informações do usuário. Uma das informações que é obtida é a ativação do Jam.

Classe /UI2/CL_START_UP_HANDLER método GET_SESSION_DATA

Crie um Enhancement na classe cl_smi_collab_platf_checker, método IS_JAM_CONFIGURED, ativando o SAP Jam.

rv_is_jam_configured = abap_true.

 

Com o Jam ativo, é hora de burlar as duas próximas chamadas.

O código abaixo pode ser encontrado no arquivo ContainerAdapter, explicado no final.

            //set user image
            if (oUser.isJamActive && oUser.isJamActive()) {
                OData.read('/sap/bc/ui2/smi/rest_tunnel/Jam/api/v1/OData/Self?$format=json',
                    function (oResponseData) {
                        var sJamUserId = oResponseData.results.Id,
                            sJamUserImageUrl = "/sap/bc/ui2/smi/rest_tunnel/Jam/api/v1/OData/Members('" + sJamUserId + "')/ProfilePhoto/$value";

                        oUser.setImage(sJamUserImageUrl);
                    },
                    function (message) {
                        jQuery.sap.log.error("Could not recieve JAM user data");
                    });
            }

Crie um Enhancement logo no começo do método IF_HTTP_EXTENSION~HANDLE_REQUEST.

Insira o código abaixo.

  DATA:
   lvz_json_content TYPE string.

  IF abap_true = me->handle_xsrf_token( server = server ).
    RETURN.
  ENDIF.

  DATA(lvz_path_info) = server->request->get_header_field( '~path_info' ).

  me->parse_path_info( EXPORTING iv_path_info        = lvz_path_info
                       IMPORTING ev_service_provider = DATA(lvz_serv_provider)
                                 ev_resource_path    = DATA(lvz_resource_path) ).

  "Parte 1 - retorna o ID do usuário
  IF lvz_resource_path CS 'api/v1/OData/Self'.

    "Retorna em formarto JON. Exemplo { "d" : { "results" : { "Id" : "MY_USERNAME" } } }
    lvz_json_content = '{' && |"d":| && '{' && |"results":| && '{' && |"Id": "{ sy-uname }"| && '} } }'.

    server->response->set_cdata( data = lvz_json_content ).

    server->response->set_content_type( 'application/json; charset=UTF-8' ).

    server->response->set_status( code = 200 reason = 'OK' ).

    RETURN.
  
  "Parte 2 - Com o ID do usuário, retorna a imagem
  ELSEIF lvz_resource_path CS 'api/v1/OData/Members'.

    DATA(loz_mr_api) = cl_mime_repository_api=>if_mr_api~get_api( ).

    CALL METHOD loz_mr_api->get
      EXPORTING
        i_url              = '/SAP/PUBLIC/ZUser/userphoto'
        i_check_authority  = ' '
      IMPORTING
        e_content          = DATA(lvz_mime_content)
        e_mime_type        = DATA(lvz_mime_type)
      EXCEPTIONS
        parameter_missing  = 1
        error_occured      = 2
        not_found          = 3
        permission_failure = 4
        OTHERS             = 5.

    IF sy-subrc EQ 0.

      server->response->set_content_type( lvz_mime_type ).

      server->response->set_data( data = lvz_mime_content ).

      server->response->set_status( code = 200 reason = 'OK' ).

    ELSE.

      server->response->set_status( code = 500 reason = 'MIME: Error occured' ).

    ENDIF.

    RETURN.

  ENDIF.

Explicações:

  • Na primeira parte o sistema retorna o ID do usuário que será utilizado para compor a URL que fará a busca pelo conteúdo da foto.
  • Na segunda parte, com o ID do usuário, retorna a foto do mesmo.
    OBS: No exemplo coloquei um caminho fixo mas você pode fazer um tratamento para buscar o ID do usuário que está na URL e retornar a foto correta.

 

Resultado

 

Por fim, para encontrar o código com as chamadas para o serviço do Jam, entre no Fiori Launchpad no modo debug.

URL: …/shells/abap/FioriLaunchpad.html?sap-client=100&sap-language=PT&sap-ui-debug=true

O arquivo ContainerAdapter está no caminho abaixo.

To report this post you need to login first.

3 Comments

You must be Logged on to comment or reply to a post.

Leave a Reply