*&---------------------------------------------------------------------*
*& Report ZMIGRATE_EMP_PHOTOS_SFSF
*&
*&---------------------------------------------------------------------*
*& Program to Migrate Employee Photos from SAP to SuccessFactors
*& Photo download based on FM PAD_PHOTO_UPDATE_GET_DETAIL
*& Metadata file and Photo signatures based on SAP note 2094242
*&---------------------------------------------------------------------*
REPORT zhtr_emp_photo_dwnld.
DATA: lt_connections TYPE TABLE OF toav0.
DATA: ls_connections TYPE toav0.
DATA: lv_doc_type TYPE toadd-doc_type.
DATA: ls_return TYPE bapiret2.
DATA: ls_employee_number TYPE toav0-object_id.
DATA: lc_update_start_date TYPE sy-datum VALUE '18000101'.
DATA: lc_update_end_date TYPE sy-datum VALUE '99991231'.
DATA: lt_photo_archive TYPE TABLE OF tbl1024.
DATA: ls_photo_archive TYPE tbl1024.
DATA: lt_messages TYPE bapiret2_tab.
DATA: lv_filename TYPE string.
DATA: lt_out_file TYPE TABLE OF string.
DATA: lv_out_file TYPE string.
DATA: BEGIN OF gt_pernr OCCURS 0,
pernr LIKE pernr-pernr,
uname LIKE p0105-usrid.
DATA: END OF gt_pernr.
NODES:pernr, peras, person.
INFOTYPES: 0105.
PARAMETERS: p_file TYPE rlgrap-filename.
GET peras.
* Collect the Employees based on selection
rp_provide_from_last p0105 '0001' pn-begda pn-endda.
gt_pernr-uname = p0105-usrid.
gt_pernr-pernr = peras-pernr.
APPEND gt_pernr.
END-OF-SELECTION.
lv_out_file = 'Username,Filename'.
APPEND lv_out_file TO lt_out_file.
* Prepare and dowload files
PERFORM get_and_store.
* Display errors
PERFORM display_alv.
*&---------------------------------------------------------------------*
*& Form get_and_store
*&---------------------------------------------------------------------*
* Retrieve Photos and download files
*----------------------------------------------------------------------*
FORM get_and_store.
LOOP AT gt_pernr.
CLEAR: ls_employee_number, ls_return, ls_connections.
REFRESH: lt_connections, lt_photo_archive.
CONCATENATE gt_pernr-pernr '%' INTO ls_employee_number.
* Function Module to get count of photos for an Employee with the date,
* Content Repository Information and Archive-Document-Id
CALL FUNCTION 'ARCHIV_GET_CONNECTIONS'
EXPORTING
object_id = ls_employee_number
documenttype = 'HRICOLFOTO'
from_ar_date = lc_update_start_date
until_ar_date = lc_update_end_date
TABLES
connections = lt_connections
EXCEPTIONS
nothing_found = 1
OTHERS = 2.
* If no Photo exists Generate Message
IF sy-subrc <> 0.
CALL FUNCTION 'BALW_BAPIRETURN_GET2'
EXPORTING
type = 'I'
cl = 'HR_SE_PA'
number = '001'
IMPORTING
return = ls_return.
ls_return-message_v1 = gt_pernr-pernr.
APPEND ls_return TO lt_messages.
CONTINUE.
ENDIF.
* Sort the table to get the most recent Entry
SORT lt_connections BY ar_date DESCENDING.
READ TABLE lt_connections INTO ls_connections INDEX 1.
* Function Module to get the Binary MIME object of the Photo
CALL FUNCTION 'ARCHIVOBJECT_GET_TABLE'
EXPORTING
archiv_id = ls_connections-archiv_id
document_type = lv_doc_type
archiv_doc_id = ls_connections-arc_doc_id
TABLES
binarchivobject = lt_photo_archive
EXCEPTIONS
error_archiv = 1
error_communicationtable = 2
error_kernel = 3
OTHERS = 4.
* If no MIME object exists Generate Message
IF sy-subrc <> 0.
CALL FUNCTION 'BALW_BAPIRETURN_GET2'
EXPORTING
type = 'E'
cl = 'HR_SE_PA'
number = '000'
IMPORTING
return = ls_return.
ls_return-message_v1 = gt_pernr-pernr.
APPEND ls_return TO lt_messages.
CONTINUE.
ENDIF.
CLEAR lv_filename.
lv_filename = |{ p_file }{ gt_pernr-pernr }.jpg|.
lv_out_file = |{ gt_pernr-uname },{ gt_pernr-pernr }.jpg|.
APPEND lv_out_file TO lt_out_file.
IF sy-batch IS INITIAL.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = lv_filename
filetype = 'BIN'
TABLES
data_tab = lt_photo_archive
EXCEPTIONS
OTHERS = 1.
ELSEIF sy-batch = abap_true.
TRY .
OPEN DATASET lv_filename FOR OUTPUT IN BINARY MODE.
IF sy-subrc = 0.
LOOP AT lt_photo_archive INTO ls_photo_archive.
TRANSFER ls_photo_archive TO lv_filename.
ENDLOOP.
ELSE .
ls_return-message = 'Failure-Unable to open the path'.
ls_return-message_v1 = gt_pernr-pernr.
ls_return-message_v2 = lv_filename.
APPEND ls_return TO lt_messages.
CONTINUE.
ENDIF.
CLOSE DATASET lv_filename.
CATCH cx_sy_file_authority.
ls_return-message = 'Failure-Authorisation to file location'.
ls_return-message_v1 = gt_pernr-pernr.
ls_return-message_v2 = lv_filename.
APPEND ls_return TO lt_messages.
CONTINUE.
ENDTRY.
ENDIF.
"ls_alv_output-status = 'Success'.
CLEAR lv_filename.
ENDLOOP.
PERFORM meta_file_create.
ENDFORM. "get_and_store
*&---------------------------------------------------------------------*
*& Form display_alv
*&---------------------------------------------------------------------*
* Display Errors in List
*----------------------------------------------------------------------*
FORM display_alv .
DATA functions TYPE REF TO cl_salv_functions_list.
DATA: gr_table TYPE REF TO cl_salv_table.
*... Create Instance
CALL METHOD cl_salv_table=>factory
IMPORTING
r_salv_table = gr_table
CHANGING
t_table = lt_messages.
functions = gr_table->get_functions( ).
functions->set_all( ).
*... Display Table
gr_table->display( ).
ENDFORM. "display_alv
*&---------------------------------------------------------------------*
*& Form meta_file_create
*&---------------------------------------------------------------------*
* SFSF needs Metadata file linking user names to photos
* This Metadata file is stored here
*----------------------------------------------------------------------*
FORM meta_file_create.
lv_filename = |{ p_file }employee_photos_{ sy-datum }.csv|.
IF sy-batch IS INITIAL.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = lv_filename
TABLES
data_tab = lt_out_file
EXCEPTIONS
OTHERS = 1.
ELSEIF sy-batch = abap_true.
TRY .
OPEN DATASET lv_filename FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.
IF sy-subrc = 0.
LOOP AT lt_out_file INTO lv_out_file.
TRANSFER lv_out_file TO lv_filename.
ENDLOOP.
ELSE .
ls_return-message = 'Failure-Unable to open the path'.
ls_return-message_v1 = lv_filename.
APPEND ls_return TO lt_messages.
ENDIF.
CLOSE DATASET lv_filename.
CATCH cx_sy_file_authority.
ls_return-message = 'Failure-Authorisation to file location'.
ls_return-message_v1 = lv_filename.
APPEND ls_return TO lt_messages.
ENDTRY.
ENDIF.
ENDFORM. "meta_file_create
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
16 | |
1 | |
1 | |
1 | |
1 | |
1 | |
1 | |
1 | |
1 | |
1 |