Решил так
Code:
WHEN 'SAVE'.
LOOP AT go_fixx_offence->tt_fix_offence INTO ls_fixx_offence
WHERE btn_addoffrf = abap_true .
IF ls_fixx_offence-crit_fsfr IS NOT INITIAL.
i_crit_fsfr = abap_true.
CASE ls_fixx_offence-crit_fsfr.
WHEN text-002.
lv_reason = '01'.
WHEN text-003.
lv_reason = '03'.
WHEN text-004.
lv_reason = '02'.
WHEN OTHERS.
ENDCASE.
lv_usrid = ls_fixx_offence-uname.
CALL FUNCTION 'RP_GET_PERNR_FROM_USERID'
EXPORTING
begda = sy-datum
endda = sy-datum
usrid = lv_usrid
usrty = '0001'
IMPORTING
usr_pernr = lv_pernr
EXCEPTIONS
retcd = 1
OTHERS = 2.
CALL FUNCTION 'ZSC_ACTAPPR_FIX_OFFENCE'
EXPORTING
i_type = zcl_sc_settings=>mc_offence_type
i_pernr = lv_pernr
i_date = ls_fixx_offence-workdate
i_reason = zcl_sc_settings=>mc_offence_reason_fsfr
i_crit = lv_reason
i_id = go_fixx_offence->mv_id
i_crit_fsfr = i_crit_fsfr
IMPORTING
e_s_request = ls_request
e_id_app = go_fixx_offence->mv_id
EXCEPTIONS
fix_offence_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
MESSAGE s004(zsc) DISPLAY LIKE 'E'.
ELSE.
MESSAGE s035(zsc) WITH go_fixx_offence->mv_id.
ENDIF.
ELSE.
MESSAGE s022(zsc) DISPLAY LIKE 'E'.
ENDIF.
ENDLOOP.
ENDCASE.
ФМ для этих манипуляций пришлось написать
Code:
FUNCTION zsc_actappr_fix_offence.
*"----------------------------------------------------------------------
*"*"Локальный интерфейс:
*" IMPORTING
*" REFERENCE(I_TYPE) TYPE ZE_TYPE
*" REFERENCE(I_PERNR) TYPE PERNR_D
*" REFERENCE(I_DATE) TYPE DATS
*" REFERENCE(I_REASON) TYPE ZE_REASON_ID
*" REFERENCE(I_CRIT) TYPE ZHR_E_CRITICALLY
*" REFERENCE(I_ID) TYPE ZE_IDAPP OPTIONAL
*" REFERENCE(I_CRIT_FSFR) TYPE BOOL_PAY OPTIONAL
*" EXPORTING
*" REFERENCE(E_ID_APP) TYPE ZE_IDAPP
*" REFERENCE(E_S_REQUEST) TYPE ZTHR_REQUEST
*" EXCEPTIONS
*" FIX_OFFENCE_ERROR
*"----------------------------------------------------------------------
DATA:
lv_saved TYPE abap_bool
.
CREATE OBJECT go_fix_offence
EXPORTING
i_type = i_type
i_pernr = i_pernr
i_date = i_date
i_reason = i_reason
i_crit = i_crit
i_id = i_id.
go_fix_offence->fill_critically_list( ).
go_fix_offence->fill_reason_list( ).
go_fix_offence->fill_fio( ).
e_s_request = go_fix_offence->process( I_CRIT_FSFR = I_CRIT_FSFR ).
go_fix_offence->is_saved(
IMPORTING
e_saved = lv_saved
e_id_app = e_id_app ).
FREE go_fix_offence.
IF e_id_app IS INITIAL AND lv_saved = abap_true.
RAISE fix_offence_error.
ENDIF.
ENDFUNCTION.
Класс и группа функций
Code:
*&---------------------------------------------------------------------*
*& Include LZSC_ACTAPPRP01
*&---------------------------------------------------------------------*
CLASS lcl_comment IMPLEMENTATION.
METHOD constructor.
* IMPORTING
* i_pernr TYPE pernr_d
* i_workdate TYPE zsc_e_workdate
* i_edit TYPE flag
mv_pernr = i_pernr.
mv_workdate = i_workdate.
mv_edit = i_edit.
mv_hsu = i_hsu.
CONCATENATE mc_tdobname mv_pernr mv_workdate INTO mv_name SEPARATED BY '_'.
IF mv_hsu = abap_true.
CONCATENATE mv_name 'HSU' INTO mv_name SEPARATED BY '_'.
ENDIF.
ENDMETHOD. "constructor
METHOD create_text_editor.
CREATE OBJECT mo_text_editor
EXPORTING
i_contname = 'TEXTEDITOR'
i_isfill = abap_true
i_isedit = mv_edit
i_name = mv_name.
ENDMETHOD. "create_text_editor
METHOD save.
DATA:
lt_text TYPE TABLE OF tline-tdline
.
mo_text_editor->get_text( IMPORTING et_text = lt_text ).
IF lt_text IS NOT INITIAL.
mo_text_editor->save( ).
mv_cmmnt_svd = abap_true.
ENDIF.
ENDMETHOD. "save
METHOD read.
* RETURNING
* VALUE(rt_text) TYPE text_lines
DATA:
lv_name TYPE tdobname
.
CONCATENATE mc_tdobname mv_pernr mv_workdate INTO lv_name SEPARATED BY '_'.
CALL FUNCTION 'READ_TEXT'
EXPORTING
id = 'ST'
language = sy-langu
name = mv_name
object = 'TEXT'
TABLES
lines = rt_text
EXCEPTIONS
id = 1
language = 2
name = 3
not_found = 4
object = 5
reference_check = 6
wrong_access_to_archive = 7
OTHERS = 8.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDMETHOD. "read
METHOD free.
mo_text_editor->free( ).
FREE mo_text_editor.
ENDMETHOD. "free
METHOD is_saved.
* RETURNING
* value(r_saved) TYPE flag
r_saved = mv_cmmnt_svd.
ENDMETHOD. "is_saved
ENDCLASS. "lcl_comment IMPLEMENTATION
*----------------------------------------------------------------------*
* CLASS lcl_cats_info IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_cats_info IMPLEMENTATION.
METHOD constructor.
FIELD-SYMBOLS:
<fs_outtab> LIKE LINE OF mt_outtab
.
* IMPORTING
* it_cats_info TYPE zsc_tt_cats_info
mt_outtab = it_cats_info.
mv_awart_only = abap_true.
LOOP AT mt_outtab ASSIGNING <fs_outtab>.
IF <fs_outtab>-task_id IS NOT INITIAL
OR <fs_outtab>-project_id IS NOT INITIAL.
mv_awart_only = abap_false.
EXIT.
ENDIF.
ENDLOOP.
ENDMETHOD. "constructor
METHOD create_viewer.
DATA:
lo_columns TYPE REF TO cl_salv_columns_table
, lo_column TYPE REF TO cl_salv_column
, lo_sorts TYPE REF TO cl_salv_sorts
.
IF cl_salv_table=>is_offline( ) EQ if_salv_c_bool_sap=>false.
CREATE OBJECT mo_container
EXPORTING
container_name = 'CC_CATS_INFO'.
ENDIF.
TRY.
cl_salv_table=>factory(
EXPORTING
r_container = mo_container
container_name = 'CC_CATS_INFO'
IMPORTING
r_salv_table = mo_viewer
CHANGING
t_table = mt_outtab ).
CATCH cx_salv_msg. "#EC NO_HANDLER
ENDTRY.
lo_columns = mo_viewer->get_columns( ).
lo_columns->set_optimize( ).
lo_column = lo_columns->get_column( 'AWART' ).
lo_column->set_output_length( 6 ).
IF mv_awart_only = abap_true.
lo_column = lo_columns->get_column( 'PROJECT_ID' ).
lo_column->set_technical( 'X' ).
lo_column = lo_columns->get_column( 'PROJECT_NAME' ).
lo_column->set_technical( 'X' ).
lo_column = lo_columns->get_column( 'TASK_ID' ).
lo_column->set_technical( 'X' ).
lo_column = lo_columns->get_column( 'TASK_NAME' ).
lo_column->set_technical( 'X' ).
ELSE.
lo_column = lo_columns->get_column( 'PROJECT_ID' ).
lo_column->set_output_length( 10 ).
lo_column = lo_columns->get_column( 'PROJECT_NAME' ).
lo_column->set_output_length( 20 ).
lo_column = lo_columns->get_column( 'TASK_ID' ).
lo_column->set_long_text( 'Идентификатор задачи' ).
lo_column->set_medium_text( 'Идентификатор задачи' ).
lo_column->set_short_text( 'ID задачи' ).
lo_column = lo_columns->get_column( 'TASK_NAME' ).
lo_column->set_output_length( 20 ).
ENDIF.
lo_sorts = mo_viewer->get_sorts( ).
lo_sorts->add_sort( columnname = 'AWART' ).
mo_viewer->display( ).
ENDMETHOD. "create_viewer
METHOD free.
mo_viewer->close_screen( ).
FREE mo_viewer.
mo_container->free( ).
FREE mo_container.
ENDMETHOD. "free
ENDCLASS. "lcl_cats_info IMPLEMENTATION
*----------------------------------------------------------------------*
* CLASS lcl_fix_offence IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_fix_offence IMPLEMENTATION.
METHOD constructor.
* IMPORTING
* i_type TYPE ze_type
* i_pernr TYPE pernr_d
* i_date TYPE dats
* i_reason TYPE ze_reason_id
* i_crit TYPE zhr_e_critically
mv_type = i_type.
mv_pernr = i_pernr.
mv_date = i_date.
mv_reason = i_reason.
mv_critically = i_crit.
mv_id_app = i_id.
ENDMETHOD. "constructor
METHOD process.
DATA:
lv_next_stat TYPE ze_status
, ls_request TYPE zthr_request
.
mv_saved = abap_true.
lv_next_stat = zcl_constants=>mc_req_status_completed.
CALL FUNCTION 'NUMBER_RANGE_ENQUEUE'
EXPORTING
object = 'ZHRMGR'
EXCEPTIONS
foreign_lock = 1
object_not_found = 2
system_failure = 3
OTHERS = 4.
CHECK sy-subrc = 0.
CALL FUNCTION 'NUMBER_GET_NEXT'
EXPORTING
nr_range_nr = '01'
object = 'ZHRMGR'
quantity = '1'
toyear = sy-datum(4)
IMPORTING
number = mv_id_app
EXCEPTIONS
interval_not_found = 1
number_range_not_intern = 2
object_not_found = 3
quantity_is_0 = 4
quantity_is_not_1 = 5
interval_overflow = 6
buffer_overflow = 7
OTHERS = 8.
CHECK sy-subrc = 0.
CALL FUNCTION 'NUMBER_RANGE_DEQUEUE'
EXPORTING
object = 'ZHRMGR'
EXCEPTIONS
foreign_lock = 1
object_not_found = 2
system_failure = 3
OTHERS = 4.
ls_request = me->save_req(
i_req_type = mv_type
i_req_stat = lv_next_stat
i_fix_to_empl = mv_pernr
i_fix_on_date = mv_date
i_reason = mv_reason
i_crit = mv_critically
i_id = mv_id_app
i_crit_fsfr = i_crit_fsfr ).
CHECK ls_request IS NOT INITIAL.
rs_request = ls_request.
* mv_id_app = ls_request-id_app.
*
*
* me->save_req_pernr(
* i_app_id = ls_request-id_app
* i_req_type = mv_type
* i_fix_to_empl = mv_pernr ).
*
* me->save_req_report(
* is_request = ls_request ).
ENDMETHOD. "process
METHOD save_req_handlers.
* IMPORTING
* i_app_id TYPE ze_idapp
* i_req_type TYPE ze_type
* i_req_stat TYPE ze_status
* i_fix_to_empl TYPE pernr_d
* i_fix_from_empl TYPE pernr_d
* i_department TYPE ze_otdel DEFAULT zcl_sc_settings=>mc_fix_offence_department
CONSTANTS:
lc_status_new TYPE ze_status VALUE '10'
, lc_status_chck_init TYPE ze_status VALUE '11'
, lc_init_role(4) TYPE c VALUE 'INIT'
, lc_action_start TYPE ze_action VALUE 'Создал'
, lc_hfa_department TYPE ze_otdel VALUE 'HFA'
.
DATA:
lt_status_rule TYPE STANDARD TABLE OF zthr_status_rule
, ls_status_rule TYPE zthr_status_rule
, ls_status_rule_temp TYPE zthr_status_rule
, ls_status_to TYPE zthr_status_rule
, lt_req_handlers TYPE STANDARD TABLE OF zthr_req_handler
, ls_req_handlers TYPE zthr_req_handler
, lt_rules TYPE STANDARD TABLE OF zhr_mgp_pravilo
, ls_rules TYPE zhr_mgp_pravilo
, ls_available_approve TYPE zthr_approve_pm
, lv_rule TYPE rhobjects-object
, lt_actor_tab TYPE tswhactor
, ls_actor_tab TYPE swhactor
, lv_uname TYPE user_id
, lv_buss_comp TYPE zsm_e_buss_comp
, lt_func_role_from_sl TYPE zsm_tt_functional_role_for_wf
, lt_hfa TYPE zsm_tt_functional_role_for_wf
, ls_func_role_from_sl TYPE zsm_s_functional_role_for_wf
, lt_all_werks TYPE zsm_tt_rfp_list
, lv_counter TYPE zsm_e_counter
, lv_division TYPE zsm_e_division
, lv_ename TYPE zsm_e_fio
, lv_all_roles_received TYPE abap_bool
, lv_status_to TYPE ze_status
, lv_department_to TYPE ze_otdel
, lt_matrix TYPE TABLE OF zhr_matrix
, ls_matrix TYPE zhr_matrix
, lt_role TYPE TABLE OF dd07v
, ls_role TYPE dd07v
, lv_rfc_dest TYPE rfc_dest
.
FIELD-SYMBOLS: <fs_req_handlers> TYPE zthr_req_handler.
REFRESH: lt_req_handlers.
CALL FUNCTION 'GET_DOMAIN_VALUES'
EXPORTING
domname = 'ZHR_D_ROLE'
TABLES
values_tab = lt_role.
lv_counter = 1.
SELECT *
FROM zhr_matrix
INTO TABLE lt_matrix.
SELECT DISTINCT *
FROM zhr_mgp_pravilo
INTO CORRESPONDING FIELDS OF TABLE lt_rules.
CHECK sy-subrc EQ 0.
SELECT DISTINCT *
FROM zthr_status_rule
INTO CORRESPONDING FIELDS OF TABLE lt_status_rule
WHERE request_type = i_req_type
AND namebut <> 'NEW_PERIOD'.
CHECK sy-subrc EQ 0.
SELECT SINGLE *
INTO CORRESPONDING FIELDS OF ls_available_approve
FROM zthr_approve_pm
WHERE type = i_req_type.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = lv_counter
IMPORTING
output = ls_req_handlers-counter.
ls_req_handlers-mandt = sy-mandt.
ls_req_handlers-id_app = i_app_id.
ls_req_handlers-type = i_req_type.
ls_req_handlers-status = lc_status_new.
ls_req_handlers-handler_type = lc_init_role.
ls_req_handlers-handler_uname = sy-uname.
ls_req_handlers-cdate = sy-datum.
ls_req_handlers-ctime = sy-uzeit.
ls_req_handlers-action = lc_action_start.
ls_req_handlers-action_flag = abap_true.
ls_req_handlers-pernr = i_fix_from_empl.
APPEND ls_req_handlers TO lt_req_handlers.
ADD 1 TO lv_counter.
zcl_hrmgp_wf_request=>get_uname_from_pernr(
EXPORTING
i_pernr = i_fix_to_empl
IMPORTING
e_uname = lv_uname ).
zcl_hrmgp_wf_request=>get_division_by_pernr(
EXPORTING
iv_pernr = i_fix_to_empl
IMPORTING
e_division = lv_division ).
zcl_hrmgp_wf_request=>get_buss_element_by_pernr(
EXPORTING
i_pernr = i_fix_to_empl
RECEIVING
e_buss_element = lv_buss_comp ).
CALL FUNCTION 'Z_SM_RFC_GET'
IMPORTING
ev_rfc_dest = lv_rfc_dest.
CALL FUNCTION 'ZSM_GET_ALL_HANDLERS_BY_PROJ' DESTINATION lv_rfc_dest "Получение всех ФР из SL1
EXPORTING
iv_all_roles = abap_true
iv_uname = lv_uname
iv_project_id = ''
iv_division = lv_division
iv_buss_comp = lv_buss_comp
it_all_werks = lt_all_werks
IMPORTING
et_func_role_for_wf = lt_func_role_from_sl.
READ TABLE lt_status_rule
INTO ls_status_to
WITH KEY status_from = lc_status_new
zotdel = i_department.
CHECK sy-subrc EQ 0.
lv_status_to = ls_status_to-status_to.
lv_department_to = ls_status_to-zotdel_to.
SORT lt_func_role_from_sl BY handler_type handler_uname ASCENDING.
DELETE ADJACENT DUPLICATES FROM lt_func_role_from_sl.
lt_hfa = lt_func_role_from_sl.
DELETE lt_hfa WHERE handler_type <> lc_hfa_department.
IF lines( lt_hfa ) > 1.
DELETE lt_func_role_from_sl
WHERE handler_type = lc_hfa_department
AND handler_uname = sy-uname.
ENDIF.
WHILE lv_all_roles_received NE abap_true.
READ TABLE lt_status_rule
INTO ls_status_rule
WITH KEY status_from = lv_status_to
zotdel = lv_department_to.
IF sy-subrc NE 0.
lv_all_roles_received = abap_true.
CONTINUE.
ENDIF.
CLEAR: ls_req_handlers.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = lv_counter
IMPORTING
output = ls_req_handlers-counter.
ls_req_handlers-mandt = sy-mandt.
ls_req_handlers-id_app = i_app_id.
ls_req_handlers-type = i_req_type.
ls_req_handlers-status = ls_status_rule-status_from.
ls_req_handlers-handler_type = ls_status_rule-zotdel.
IF ls_req_handlers-handler_type EQ 'EMPL'.
zcl_hrmgp_wf_request=>get_uname_from_pernr(
EXPORTING
i_pernr = i_fix_to_empl
IMPORTING
e_uname = ls_req_handlers-handler_uname ).
APPEND ls_req_handlers TO lt_req_handlers.
lv_status_to = ls_status_rule-status_to.
lv_department_to = ls_status_rule-zotdel_to.
ADD 1 TO lv_counter.
CONTINUE.
ENDIF.
LOOP AT lt_func_role_from_sl
INTO ls_func_role_from_sl
WHERE handler_type = ls_status_rule-zotdel.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = lv_counter
IMPORTING
output = ls_req_handlers-counter.
ls_req_handlers-handler_uname = ls_func_role_from_sl-handler_uname.
APPEND ls_req_handlers TO lt_req_handlers.
ADD 1 TO lv_counter.
ENDLOOP.
IF sy-subrc EQ 0.
lv_status_to = ls_status_rule-status_to.
lv_department_to = ls_status_rule-zotdel_to.
CONTINUE.
ENDIF.
READ TABLE lt_rules
INTO ls_rules
WITH KEY zotdel = ls_status_rule-zotdel.
REFRESH lt_actor_tab.
CLEAR lv_rule.
lv_rule = ls_rules-zpravilo.
CALL FUNCTION 'RH_GET_ACTORS'
EXPORTING
act_object = lv_rule
TABLES
actor_tab = lt_actor_tab
EXCEPTIONS
no_active_plvar = 1
no_actor_found = 2
exception_of_role_raised = 3
no_valid_agent_determined = 4
no_container = 5
OTHERS = 6.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
LOOP AT lt_actor_tab INTO ls_actor_tab.
IF ls_actor_tab-otype EQ 'US'.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = lv_counter
IMPORTING
output = ls_req_handlers-counter.
ls_req_handlers-handler_uname = ls_actor_tab-objid.
APPEND ls_req_handlers TO lt_req_handlers.
ADD 1 TO lv_counter.
ENDIF.
ENDLOOP.
lv_status_to = ls_status_rule-status_to.
lv_department_to = ls_status_rule-zotdel_to.
ENDWHILE.
LOOP AT lt_req_handlers ASSIGNING <fs_req_handlers>.
zcl_hrmgp_wf_request=>get_pernr_from_uname(
EXPORTING
i_uname = <fs_req_handlers>-handler_uname
IMPORTING
e_pernr = <fs_req_handlers>-pernr
EXCEPTIONS
not_found = 1
OTHERS = 2 ).
IF sy-subrc = 0 AND <fs_req_handlers>-pernr IS NOT INITIAL.
zcl_hrmgp_wf_request=>get_fio_by_pernr(
EXPORTING
i_pernr = <fs_req_handlers>-pernr
IMPORTING
e_fio = lv_ename ).
ELSE.
lv_ename = text-001.
ENDIF.
<fs_req_handlers>-ename = lv_ename.
ENDLOOP.
MODIFY zthr_req_handler FROM TABLE lt_req_handlers.
ENDMETHOD. "save_req_handlers
METHOD get_next_req_status.
* IMPORTING
* i_req_type TYPE ze_type
* i_req_stat TYPE ze_status
* i_department TYPE ze_otdel DEFAULT zcl_sc_settings=>mc_fix_offence_department
* i_ucomm TYPE syucomm DEFAULT zcl_sc_settings=>mc_fix_offence_ucomm
* RETURNING
* value(r_stat) TYPE ze_status
SELECT SINGLE status_to
FROM zthr_status_rule
INTO r_stat
WHERE request_type = i_req_type
AND status_from = i_req_stat
AND zotdel = i_department
AND namebut = i_ucomm.
ENDMETHOD. "get_next_req_status
METHOD save_req.
* IMPORTING
* i_req_type TYPE ze_type
* i_req_stat TYPE ze_status
* i_department TYPE ze_otdel
* i_ucomm TYPE syucomm DEFAULT zcl_sc_settings=>mc_fix_offence_ucomm
* i_fix_to_empl TYPE pernr_d
* i_fix_on_date TYPE dats
* i_reason TYPE ze_reason_id
* i_crit TYPE zhr_e_critically
* I_CRIT_FSFR TYPE BOOL_PAY.
* RETURNING
* VALUE(rs_request) TYPE zthr_request
DATA:
ls_request TYPE zthr_request
, lt_p0105 TYPE TABLE OF p0105
, ls_p0105 TYPE p0105
, lt_p0002 TYPE TABLE OF p0002
, ls_p0002 TYPE p0002
, lt_p0001 TYPE TABLE OF p0001
, ls_p0001 TYPE p0001
, lv_domnv TYPE domvalue_l
, lo_event TYPE REF TO if_swf_evt_event,
lv_event TYPE char50,
lv_objkey TYPE char200,
lo_event_parameters TYPE REF TO if_swf_ifs_parameter_container,
lv_type TYPE ze_type,
ls_req_cancelled TYPE zthr_request.
CONSTANTS:
c_request TYPE char50 VALUE '25'.
ls_request-id_app = i_id.
ls_request-datum = sy-datum.
ls_request-type = i_req_type.
ls_request-status = i_req_stat.
ls_request-pernr_empl = i_fix_to_empl.
ls_request-begda = i_fix_on_date.
ls_request-reason = i_reason.
ls_request-critically = i_crit.
ls_request-user_guid = i_department.
ls_request-fix = '01'.
SELECT SINGLE pernr
INTO ls_request-pernr
FROM pa0105
WHERE subty = '0001'
AND usrid = sy-uname.
CALL FUNCTION 'HR_READ_INFOTYPE'
EXPORTING
pernr = i_fix_to_empl
infty = '0001'
TABLES
infty_tab = lt_p0001
EXCEPTIONS
infty_not_found = 1.
CHECK sy-subrc = 0.
READ TABLE lt_p0001
INTO ls_p0001
INDEX 1.
ls_request-werks = ls_p0001-werks.
CALL FUNCTION 'HR_READ_INFOTYPE'
EXPORTING
pernr = i_fix_to_empl
infty = '0105'
TABLES
infty_tab = lt_p0105
EXCEPTIONS
infty_not_found = 1.
CHECK sy-subrc = 0.
READ TABLE lt_p0105
INTO ls_p0105
WITH KEY subty = '0001'.
ls_request-usrid = ls_p0105-usrid.
READ TABLE lt_p0105
INTO ls_p0105
WITH KEY subty = '0010'.
ls_request-usrid_long = ls_p0105-usrid_long.
CALL FUNCTION 'HR_READ_INFOTYPE'
EXPORTING
pernr = i_fix_to_empl
infty = '0002'
TABLES
infty_tab = lt_p0002
EXCEPTIONS
infty_not_found = 1.
CHECK sy-subrc = 0.
READ TABLE lt_p0002
INTO ls_p0002
INDEX 1.
ls_request-nachn = ls_p0002-nachn.
ls_request-vorna = ls_p0002-vorna.
ls_request-nach2 = ls_p0002-midnm.
lv_domnv = i_req_type.
CALL METHOD zcl_hrmgp_wf_request=>get_domen_name
EXPORTING
i_value = lv_domnv
i_name = 'ZD_TYPE'
RECEIVING
r_typename = ls_request-type_text.
me->save_req_handlers(
EXPORTING
i_app_id = ls_request-id_app
i_req_type = '25'
i_fix_to_empl = ls_request-pernr_empl
i_fix_from_empl = ls_request-pernr
i_req_stat = '23'
i_department = 'INIT'
).
IF i_crit_fsfr = abap_true.
CONCATENATE 'REQUEST' c_request INTO lv_event.
CONCATENATE ls_request-id_app c_request ls_request-z_index INTO lv_objkey.
CALL METHOD cl_swf_evt_event=>get_event_container
EXPORTING
im_objcateg = cl_swf_evt_event=>mc_objcateg_cl " CL Constant
im_objtype = 'ZCL_HRMGP_WF_REQUEST' " ZCLASS
im_event = lv_event " Event 'Created'
RECEIVING
re_reference = lo_event_parameters. " Event Param Instance
* Set the values of the parameters
CALL METHOD lo_event_parameters->set
EXPORTING
name = 'IS_REQUEST' " Parameter Name
value = ls_request. " Parameter Value
lo_event = cl_swf_evt_event=>get_instance(
im_objcateg = cl_swf_evt_event=>mc_objcateg_cl
im_objtype = 'ZCL_HRMGP_WF_REQUEST'
im_event = lv_event
im_objkey = lv_objkey
im_event_container = lo_event_parameters
).
lo_event->raise( ).
COMMIT WORK.
ELSE.
rs_request = ls_request.
ENDIF.
** .
** CALL FUNCTION 'NUMBER_RANGE_ENQUEUE'
** EXPORTING
** object = 'ZHRMGR'
** EXCEPTIONS
** foreign_lock = 1
** object_not_found = 2
** system_failure = 3
** OTHERS = 4.
** CHECK sy-subrc = 0.
**
** CALL FUNCTION 'NUMBER_GET_NEXT'
** EXPORTING
** nr_range_nr = '01'
** object = 'ZHRMGR'
** quantity = '1'
** toyear = sy-datum(4)
** IMPORTING
** number = ls_request-id_app
** EXCEPTIONS
** interval_not_found = 1
** number_range_not_intern = 2
** object_not_found = 3
** quantity_is_0 = 4
** quantity_is_not_1 = 5
** interval_overflow = 6
** buffer_overflow = 7
** OTHERS = 8.
** CHECK sy-subrc = 0.
**
** CALL FUNCTION 'NUMBER_RANGE_DEQUEUE'
** EXPORTING
** object = 'ZHRMGR'
** EXCEPTIONS
** foreign_lock = 1
** object_not_found = 2
** system_failure = 3
** OTHERS = 4.
** CHECK sy-subrc = 0.
ENDMETHOD. "save_req
METHOD save_req_pernr.
* IMPORTING
* i_app_id TYPE ze_idapp
* i_req_type TYPE ze_type
* i_fix_to_empl TYPE pernr_d
DATA:
ls_req_pernr TYPE zthr_request_pnr
.
ls_req_pernr-id_app = i_app_id.
ls_req_pernr-type = i_req_type.
ls_req_pernr-pernr = i_fix_to_empl.
MODIFY zthr_request_pnr FROM ls_req_pernr.
ENDMETHOD. "save_req_pernr
METHOD save_req_report.
* IMPORTING
* is_request TYPE zthr_request
DATA:
ls_req_report TYPE zthr_report
.
MOVE-CORRESPONDING is_request TO ls_req_report.
ls_req_report-numb = 1.
ls_req_report-z_index = is_request-z_index.
ls_req_report-zhandler = is_request-pernr.
ls_req_report-start_pr_date = sy-datum.
ls_req_report-start_pr_time = sy-uzeit.
INSERT zthr_report FROM ls_req_report.
ENDMETHOD. "save_req_report
METHOD fill_critically_list.
DATA:
lt_domain_value TYPE TABLE OF dd07v
, ls_domain_value TYPE dd07v
, lt_list TYPE vrm_values
, ls_list TYPE vrm_value
.
CALL FUNCTION 'GET_DOMAIN_VALUES'
EXPORTING
domname = 'ZHR_D_CRITICALLY'
TABLES
values_tab = lt_domain_value.
LOOP AT lt_domain_value INTO ls_domain_value.
ls_list-key = ls_domain_value-domvalue_l.
ls_list-text = ls_domain_value-ddtext.
APPEND ls_list TO lt_list.
ENDLOOP.
CALL FUNCTION 'VRM_SET_VALUES'
EXPORTING
id = 'GO_FIX_OFFENCE->MV_CRITICALLY'
values = lt_list
EXCEPTIONS
id_illegal_name = 1.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDMETHOD. "fill_critically_list
METHOD fill_reason_list.
DATA:
lt_list TYPE vrm_values
, ls_list TYPE vrm_value
, ls_list_reason TYPE zthr_reason
, lt_list_reason TYPE TABLE OF zthr_reason
.
SELECT *
FROM zthr_reason
INTO CORRESPONDING FIELDS OF TABLE lt_list_reason.
CHECK sy-subrc EQ 0.
LOOP AT lt_list_reason INTO ls_list_reason WHERE reason_id = '01' OR reason_id = '04'.
ls_list-key = ls_list_reason-reason_id.
ls_list-text = ls_list_reason-reason_text.
APPEND ls_list TO lt_list.
ENDLOOP.
CALL FUNCTION 'VRM_SET_VALUES'
EXPORTING
id = 'GO_FIX_OFFENCE->MV_REASON'
values = lt_list
EXCEPTIONS
id_illegal_name = 1.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDMETHOD. "fill_reason_list
METHOD fill_fio.
DATA:
lt_0002 TYPE TABLE OF p0002
, ls_0002 TYPE p0002
.
CALL FUNCTION 'HR_READ_INFOTYPE'
EXPORTING
pernr = mv_pernr
infty = '0002'
begda = mv_date
endda = mv_date
TABLES
infty_tab = lt_0002
EXCEPTIONS
infty_not_found = 1
OTHERS = 2.
IF sy-subrc = 0.
READ TABLE lt_0002 INTO ls_0002 INDEX 1.
IF sy-subrc = 0.
CONCATENATE ls_0002-nachn ls_0002-vorna ls_0002-midnm INTO mv_fio SEPARATED BY space.
ENDIF.
ENDIF.
ENDMETHOD. "fill_fio
METHOD is_saved.
* EXPORTING
* e_saved TYPE abap_bool
* e_id_app TYPE ze_idapp
e_saved = mv_saved.
e_id_app = mv_id_app.
ENDMETHOD. "is_saved
ENDCLASS. "lcl_fix_offence IMPLEMENTATION
*----------------------------------------------------------------------*
* CLASS lcl_offence_info IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_offence_info IMPLEMENTATION.
METHOD constructor.
* IMPORTING
* it_offence_info TYPE zsc_tt_cats_info
mt_offence_data = it_offence_info.
ENDMETHOD. "constructor
METHOD prepare_outtab.
DATA:
ls_offence_data TYPE zsc_s_offence_data
, ls_outtab TYPE zsc_s_offence_data_alv
, lt_p0002 TYPE TABLE OF p0002
, ls_p0002 TYPE p0002
.
LOOP AT mt_offence_data INTO ls_offence_data.
CLEAR ls_outtab.
"ИД заявки
ls_outtab-id_app = ls_offence_data-id_app.
"Статус
ls_outtab-status = ls_offence_data-status.
ls_outtab-status_txt = zcl_sm_utils=>get_domain_text( i_domname = 'ZD_STATUS' i_value = ls_outtab-status ).
"Тип заявки
ls_outtab-type = ls_offence_data-type.
ls_outtab-type_txt = zcl_sm_utils=>get_domain_text( i_domname = 'ZD_TYPE' i_value = ls_outtab-type ).
"Дата
ls_outtab-workdate = ls_offence_data-workdate.
"Создатель заявки
IF ls_offence_data-creator IS NOT INITIAL.
ls_outtab-creator = ls_offence_data-creator.
REFRESH lt_p0002.
CALL FUNCTION 'HR_READ_INFOTYPE'
EXPORTING
pernr = ls_outtab-creator
infty = '0002'
TABLES
infty_tab = lt_p0002
EXCEPTIONS
infty_not_found = 1
OTHERS = 2.
IF sy-subrc = 0.
READ TABLE lt_p0002
INTO ls_p0002
INDEX 1.
IF sy-subrc = 0.
CONCATENATE ls_p0002-nachn ls_p0002-vorna INTO ls_outtab-creator_fio SEPARATED BY space.
ENDIF.
ENDIF.
ELSE.
"Проверим, что записано в виде инициатора в таблице handlerod потока
SELECT SINGLE pernr ename
INTO (ls_outtab-creator, ls_outtab-creator_fio)
FROM zthr_req_handler
WHERE id_app = ls_offence_data-id_app
AND handler_type = 'INIT'.
ENDIF.
"Сотрудник, но которого создано нарушение
ls_outtab-employe = ls_offence_data-employe.
REFRESH lt_p0002.
CALL FUNCTION 'HR_READ_INFOTYPE'
EXPORTING
pernr = ls_outtab-employe
infty = '0002'
TABLES
infty_tab = lt_p0002
EXCEPTIONS
infty_not_found = 1
OTHERS = 2.
IF sy-subrc = 0.
READ TABLE lt_p0002
INTO ls_p0002
INDEX 1.
IF sy-subrc = 0.
CONCATENATE ls_p0002-nachn ls_p0002-vorna INTO ls_outtab-employe_fio SEPARATED BY space.
ENDIF.
ENDIF.
"Причина
ls_outtab-reason = ls_offence_data-reason.
SELECT SINGLE reason_text
INTO ls_outtab-reason_txt
FROM zthr_reason
WHERE reason_id = ls_outtab-reason.
"Критичность
ls_outtab-critically = ls_offence_data-critically.
ls_outtab-critically_txt = zcl_sm_utils=>get_domain_text( i_domname = 'ZHR_D_CRITICALLY' i_value = ls_outtab-critically ).
"Добавим значения в оуттаб
APPEND ls_outtab TO mt_outtab.
ENDLOOP.
ENDMETHOD. "prepare_outtab
METHOD create_viewer.
DATA:
lo_columns TYPE REF TO cl_salv_columns_table
, lo_column TYPE REF TO cl_salv_column
.
IF cl_salv_table=>is_offline( ) EQ if_salv_c_bool_sap=>false.
CREATE OBJECT mo_container
EXPORTING
container_name = 'CC_OFFENCE_INFO'.
ENDIF.
TRY.
cl_salv_table=>factory(
EXPORTING
r_container = mo_container
container_name = 'CC_OFFENCE_INFO'
IMPORTING
r_salv_table = mo_viewer
CHANGING
t_table = mt_outtab ).
CATCH cx_salv_msg. "#EC NO_HANDLER
ENDTRY.
lo_columns = mo_viewer->get_columns( ).
lo_column = lo_columns->get_column( 'TYPE' ).
lo_column->set_output_length( 3 ).
lo_column->set_visible( abap_false ).
lo_column = lo_columns->get_column( 'TYPE_TXT' ).
lo_column->set_output_length( 10 ).
lo_column->set_visible( abap_false ).
lo_column = lo_columns->get_column( 'STATUS' ).
lo_column->set_output_length( 3 ).
lo_column->set_visible( abap_false ).
lo_column = lo_columns->get_column( 'STATUS_TXT' ).
lo_column->set_output_length( 30 ).
lo_column = lo_columns->get_column( 'CREATOR_FIO' ).
lo_column->set_output_length( 20 ).
lo_column->set_short_text( 'Инициатор' ).
lo_column->set_medium_text( 'Инициатор заявки' ).
lo_column->set_long_text( 'Инициатор заявки' ).
lo_column = lo_columns->get_column( 'EMPLOYE_FIO' ).
lo_column->set_output_length( 20 ).
lo_column->set_short_text( 'Ответств.' ).
lo_column->set_medium_text( 'Ответственный' ).
lo_column->set_long_text( 'Ответственный сотрудник' ).
lo_column = lo_columns->get_column( 'REASON' ).
lo_column->set_output_length( 3 ).
lo_column->set_visible( abap_false ).
lo_column = lo_columns->get_column( 'REASON_TXT' ).
lo_column->set_output_length( 30 ).
lo_column = lo_columns->get_column( 'CRITICALLY' ).
lo_column->set_output_length( 3 ).
lo_column->set_visible( abap_false ).
lo_column = lo_columns->get_column( 'CRITICALLY_TXT' ).
lo_column->set_output_length( 10 ).
mo_viewer->display( ).
ENDMETHOD. "create_viewer
METHOD free.
mo_viewer->close_screen( ).
FREE mo_viewer.
mo_container->free( ).
FREE mo_container.
ENDMETHOD. "free
ENDCLASS. "lcl_offence_info IMPLEMENTATION