Employees pictures are being displayed in various application in SAP, including Fiori apps. When there isn’t any picture loaded in SAP for an employee there are two different watermarks that appear in the picture frame. These watermarks are nothing but male.jpg and female.jpg images loaded in MIME repository. Watermark to be used is decided based on flag P0002-GESCH. If P0002-GESCH = female then use female.jpg else male.jpg.
| /SAP/PUBLIC/BUSINESSSUITE/TM/ICONS/female.jpg | ![]() |
| /SAP/PUBLIC/BUSINESSSUITE/TM/ICONS/male.jpg | ![]() |
Of course, this logic may not fit on all cases and change would be required. Below information is useful to make such changes.
Two places where I have found (and had to make changes) these images are being supplied to front-end.
Class CL_HCM_PHOTO_API
Fiori applications uses method CL_HCM_PHOTO_API=>GET_EMPLOYEE_PHOTO to get employees picture. Within this method logic branch out to method CL_HCM_PHOTO_API=>GET_DUMMY_PHOTO to get default male/female picture in case picture of employee is not in database.
Method CL_HCM_PHOTO_API=>GET_DUMMY_PHOTO is where call is made to get Infotype 0002 of employee check their gender and URL of image is passed over.
TRY.
CALL METHOD lo_read_infotype->read_single
EXPORTING
tclas = cl_hrpa_tclas=>tclas_employee
pernr = iv_pernr
infty = '0002'
subty = space
objps = space
sprps = if_hrpa_read_infotype=>unlocked
begda = sy-datlo
endda = sy-datlo
mode = if_hrpa_read_infotype=>last_intersecting_record
no_auth_check = abap_true
IMPORTING
pnnnn = ls_p0002.
CATCH cx_hrpa_violated_assertion.
CLEAR ls_p0002.
ENDTRY.
IF ls_p0002-gesch = '2'. "female
lo_client->request->set_header_field( name = '~request_uri'
value = gv_url_female ).
ELSE. "male or unknown
lo_client->request->set_header_field( name = '~request_uri'
value = gv_url_male ).
ENDIF.
Class CL_HRPAD_IL
Webdynpro ESS applications uses class CL_HRPAD_IL=>GET_PHOTO to get employees picture and this is where URL of default picture is returned if FM HRWPC_RFC_EP_READ_PHOTO_URI failed to get employees picture.
CALL METHOD cl_hrpa_masterdata_factory=>get_read_infotype
IMPORTING
read_infotype = lr_read_infotype.
CALL METHOD lr_read_infotype->read_single
EXPORTING
tclas = 'A'
pernr = iv_pernr
infty = '0002'
subty = space
objps = space
sprps = if_hrpa_read_infotype=>unlocked
begda = sy-datlo
endda = sy-datlo
mode = if_hrpa_read_infotype=>last_intersecting_record
no_auth_check = abap_true
IMPORTING
pnnnn = ls_p0002
* PNNNN2 =
* PREF =
* DATA_EXISTS = ls_data_exists
* MISSING_AUTH =
.
IF ls_p0002 IS NOT INITIAL.
IF ls_p0002-gesch = '2'.
ev_photo_url = '/SAP/PUBLIC/BUSINESSSUITE/TM/ICONS/female.jpg'.
ELSE. " Male OR unkown
ev_photo_url = '/SAP/PUBLIC/BUSINESSSUITE/TM/ICONS/male.jpg'.
ENDIF.
ENDIF.
Below are some more method where this happens but I am not aware where are they used.
CL_HIER_VIS_PHOTO_URL
Method GET_PHOTO_URLS
READ TABLE lt_person_id INTO ls_person_id WITH KEY cp_id = ls_temp_url-cp_id.
IF ls_person_id-sex = '1'. "Female
CONCATENATE lv_absolute_url gc_pic_url_female INTO ls_photo_url-pic_url.
ELSE. " Male (OR) unknown
CONCATENATE lv_absolute_url gc_pic_url_male_or_default INTO ls_photo_url-pic_url.
ENDIF.
Class CL_HRASR00_FPM_UTILITIES – HCM P&F FPM Utility Class
Method GET_DEFAULT_PHOTO
READ TABLE <lt_p0002> INTO <ls_p0002> INDEX 1.
IF sy-subrc IS INITIAL.
ASSIGN COMPONENT 'GESCH' OF STRUCTURE <ls_p0002> TO <lv_gender>.
* get picture
IF <lv_gender> = 1."male
CONCATENATE c_icon_uri c_male INTO ev_pic_uri.
ELSE.
CONCATENATE c_icon_uri c_female INTO ev_pic_uri.
ENDIF.
ENDIF.
CL_HRASR00_PB_SPROFILE_PIC – Short Profile utility class
Method GET_DEFAULT_PHOTO
TRY.
CALL FUNCTION 'HR_READ_INFOTYPE'
EXPORTING
pernr = iv_pernr
infty = '0002'
begda = sy-datum
endda = sy-datum
TABLES
infty_tab = <lt_p0002>
EXCEPTIONS
infty_not_found = 1
OTHERS = 2.
READ TABLE <lt_p0002> INTO <ls_p0002> INDEX 1.
IF sy-subrc IS INITIAL.
ASSIGN COMPONENT 'GESCH' OF STRUCTURE <ls_p0002> TO <lv_gender>.
* get picture
IF <lv_gender> = 1."male
CONCATENATE c_icon_uri c_male INTO ev_pic_uri.
ELSE.
CONCATENATE c_icon_uri c_female INTO ev_pic_uri.
ENDIF.
ENDIF.
CATCH cx_sy_dyn_call_illegal_func.
RETURN.
ENDTRY.
CL_HRPAO_SHORTPRF_UTILITY – Utility class for PAO Short profile
Method GET_PHOTO_URL_FOR_OBJECT
CALL METHOD cl_hrtmc_cp_basic_utilities=>get_picture_url
EXPORTING
iv_person_id = ls_hrperson-personid
iv_pernr = lv_pernr
iv_sex_value = lv_gender
IMPORTING
ev_picture_url = ev_photo_url.
" Check if photo is real one or default
IF ev_photo_url IS NOT INITIAL.
IF ev_photo_url CS 'male.jpg' OR ev_photo_url CS 'female.jpg'.
IF ls_p0002-gesch = '2'. "Female
ev_photo_url = gc_pic_url_female.
ELSE. " Male (OR) unknown
ev_photo_url = gc_pic_url_male_or_default.
ENDIF.
ev_photo_available = abap_false.
ELSE.
ev_photo_available = abap_true.
ENDIF.
ELSE.
IF ls_p0002-gesch = '2'. "Female
ev_photo_url = gc_pic_url_female.
ELSE. " Male (OR) unknown
ev_photo_url = gc_pic_url_male_or_default.
ENDIF.
ev_photo_available = abap_false.
ENDIF.
CL_HRTMC_CP_BASIC_UTILITIES – Utility Class for Talents
Method : GET_PICTURE_URL
IF lv_sex_value = 1. "XREN1387230
lv_dummy_icon_id = gc_female_mime_pic.
ELSE.
lv_dummy_icon_id = gc_male_mime_pic.
ENDIF.
CL_HR_STREAMWORK_API – Streamwork Integration APIs
Method : GET_BACKEND_USER_PHOTO_URL
CALL METHOD lo_read_infotype->read_single
EXPORTING
tclas = 'A'
pernr = lv_pernr
infty = '0002'
subty = space
objps = space
sprps = if_hrpa_read_infotype=>unlocked
begda = sy-datum
endda = sy-datum
mode = if_hrpa_read_infotype=>last_intersecting_record
no_auth_check = abap_false
IMPORTING
pnnnn = ls_p0002.
IF ls_p0002 IS NOT INITIAL.
IF ls_p0002-gesch = '2'. "Female
ev_user_photo_url = gc_pic_url_female.
ELSE. " Male (OR) unknown
ev_user_photo_url = gc_pic_url_male_or_default.
ENDIF.
ELSE." Male (OR) unknown
ev_user_photo_url = gc_pic_url_male_or_default.
ENDIF.

