Текущее время: Пн, июл 21 2025, 05:37

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
 Заголовок сообщения: Поток операций
СообщениеДобавлено: Пт, мар 25 2016, 17:04 
Специалист
Специалист

Зарегистрирован:
Пт, янв 22 2016, 10:20
Сообщения: 170
Приветствую!
Нужно по сейву фиксировать нарушение выбранному сотруднику. Логика подсказывает, что для этого необходимо инициализировать поток операций согласования
Подскажите пожалуйста, как это реализовать?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Поток операций
СообщениеДобавлено: Пт, мар 25 2016, 17:05 
Почетный гуру
Почетный гуру

Зарегистрирован:
Вт, ноя 07 2006, 10:12
Сообщения: 1194
Откуда: Москва
Пол: Мужской
Транзакции: SWEHR1, SWEHR2, SWEHR3. SWEHR3 как раз для запуска потоков клиентов по статусу изменения записей инфотипов. Первые две транзакции для базового функционала, как примеры посмотрите как оно работает.

Технически все делается в HR_EVENT_CREATE, который читает эти настройки из этих транзакций и файрит событие, если событие залинковано с потоком то поток запустится.

_________________
С уважением, Р.В. Величко


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Поток операций
СообщениеДобавлено: Пт, мар 25 2016, 17:52 
Специалист
Специалист

Зарегистрирован:
Пт, янв 22 2016, 10:20
Сообщения: 170
посмотрел ФМ, но как применить в моей задаче не понял :(

у меня есть строка или набор строк в котор-ой(-ых) прописаны данные сотрудника, которому надо зафиксировать нарушение, по сейву должна происходить обычная процедура согласования заявки(как я понял. должен инициироваться поток)


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Поток операций
СообщениеДобавлено: Сб, мар 26 2016, 08:38 
Почетный гуру
Почетный гуру

Зарегистрирован:
Вт, ноя 07 2006, 10:12
Сообщения: 1194
Откуда: Москва
Пол: Мужской
1. Что такое "сейв"?
2. Распишите задачу более конкретно с точки зрения бизнеса.
3. Расскажи какая конкретно транзакция выполняется.

В рамках стандартного сап решения в транзакции PA30 встроена поддержка sap workflow, при любом действии над записью инфотипа система сама запускает потоки операций. Очевидно, что только клиенту решать какие конкретно потоки запускать, и только клиент может сам понять какие потоки ему нужны.

Поэтому, делаете бизнес-постановку задачи, думаете какие конкретно потоки должны быть, настраиваете потоки, отлаживаете их, потом берете и активируете связи между потоками и операциями над инфотипами через SWEHR3.

_________________
С уважением, Р.В. Величко


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Поток операций
СообщениеДобавлено: Ср, мар 30 2016, 17:28 
Специалист
Специалист

Зарегистрирован:
Пт, янв 22 2016, 10:20
Сообщения: 170
Решил так


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


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Поток операций
СообщениеДобавлено: Ср, мар 30 2016, 17:29 
Специалист
Специалист

Зарегистрирован:
Пт, янв 22 2016, 10:20
Сообщения: 170
Выложив на всякий случай, вдруг кому пригодиться.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Поток операций
СообщениеДобавлено: Пт, апр 01 2016, 09:16 
Почетный гуру
Почетный гуру

Зарегистрирован:
Вт, ноя 07 2006, 10:12
Сообщения: 1194
Откуда: Москва
Пол: Мужской
И где сиё чудо вызывается? Какая транзакция вызывает ЭТО? :-)

_________________
С уважением, Р.В. Величко


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Поток операций
СообщениеДобавлено: Пт, апр 01 2016, 18:43 
Специалист
Специалист

Зарегистрирован:
Пт, янв 22 2016, 10:20
Сообщения: 170
это коммерческий проект, так что транзакция ничего не даст


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Поток операций
СообщениеДобавлено: Сб, апр 02 2016, 00:24 
Почетный гуру
Почетный гуру

Зарегистрирован:
Вт, ноя 07 2006, 10:12
Сообщения: 1194
Откуда: Москва
Пол: Мужской
:')

_________________
С уважением, Р.В. Величко


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Ahrefs [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB