In this tutorial i’m gonna show how to display the employee’s data/photo on a FIORI App, by reading a QR Code that contains his PERNR (Personnel number), showing all the way through.
To be able to complete this tutorial, your HR environment needs to have at least 1 employee with image configured.
So let’s go, i’m using myself (PERNR 1) with my photo uploaded.
To be able to complete this tutorial, your HR environment needs to have at least 1 employee with image configured.
So let’s go, i’m using myself (PERNR 1) with my photo uploaded.
Now that the Employee is ready, let’s go to the Gateway side.
Create a project named ZHR_PHOTO_DEMO, in the end will look like this:
Create 2 entities, Employee and EmployeeData (don’t forget to mark the first one as Media, like below):
For both of them, like this:
Let’s, map the EmployeeDataSet READ Method, to the BAPI_EMPLOYEE_GETDATA, like this:
Generate your project. The Data side is all set, now let’s work on getting the Employee’s photo.
Go to the DPC EXT method, like this:
Redefine method GET_STREAM (why? GET_STREAM is the Gateways “way” to recover entities marked as media, for attachments, etc.)
Place the code below and Active:
method /iwbep/if_mgw_appl_srv_runtime~get_stream.
data: t_photo type table of tbl1024,
t_msg type table of bapiret2,
s_photo type tbl1024,
s_msg type bapiret2,
lv_pernr(8) type n,
l_photo type xstring,
l_line type string,
l_photo1 type string,
ls_key type /iwbep/s_mgw_name_value_pair,
ls_stream type ty_s_media_resource,
lv_entity_name type /iwbep/mgw_tech_name,
lo_dp_facade type ref to /iwbep/if_mgw_dp_facade,
lv_destination type rfcdest.
lv_entity_name = io_tech_request_context->get_entity_type_name( ).
* Get RFC destination
lo_dp_facade = /iwbep/if_mgw_conv_srv_runtime~get_dp_facade( ).
lv_destination = /iwbep/cl_sb_gen_dpc_rt_util=>get_rfc_destination( io_dp_facade = lo_dp_facade ).
case lv_entity_name.
when 'Employee'.
read table it_key_tab into ls_key
with key name = 'Perno'.
if sy-subrc eq 0.
lv_pernr = ls_key-value.
call function 'PAD_PHOTO_UPDATE_GET_DETAIL' destination lv_destination
exporting
iv_employee_number = lv_pernr
tables
t_photo_archive_out = t_photo
t_messages_out = t_msg.
loop at t_photo into s_photo.
l_line = s_photo-line.
concatenate l_photo1 l_line into l_photo1.
endloop.
ls_stream-value = l_photo = l_photo1.
ls_stream-mime_type = 'image/jpeg'.
copy_data_to_ref( exporting is_data = ls_stream
changing cr_data = er_stream ).
endif.
when others.
endcase.
endmethod.
Now register your service at /IWFND/MAINT_SERVICE, and point it to your desired System Alias (Local for Embeeded and your backend’s for Hub).
So now the Gateway side is all set too, let’s test the services:
Below testing the Media EmployeeSet Entity (with the /$value in the end for media):
You could test the “Data” service as well, with (for this example): /sap/opu/odata/sap/ZHR_PHOTO_DEMO_SRV/EmployeeDataSet(‘0000001’)
Great, you’re now ready to go to the SAPUI5 part.
In there, i’m using the sap.ndc.BarcodeScanner, that will open the Barcode (in your device camera) if you’re using the FIORI Client, or a popup if not.
I’ve created a simple QR Code (with the employee number 1) just to demonstrate.
Testing my scenario (running my app with FIORI Client):
Voila! Great.
Now you could explore all the other possibilities, as this was a real basic scenario (like get more employee data, files, etc. Sky is the limit! ).
SAP is still investing heavily in the development of ABAP, partly because most of their core software (ECC, CRM etc.) is written in ABAP, but also because it is an excellent and robust platform for developing business applications. Thanks for sharing your knowledge with us.
ReplyDeleteSAP ABAP training Marathahalli