Текущее время: Чт, апр 18 2024, 08:10

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




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

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


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

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

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


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

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


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

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

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


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

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


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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