Technology Blog Posts by Members
cancel
Showing results for 
Search instead for 
Did you mean: 
guilherme_lahr
Explorer
1,497
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.

3 Comments