Текущее время: Вт, июл 15 2025, 12:12

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




Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: Скрытие кнопок в шаге "решение пользователя" в зависимости от выполняющего задачу
СообщениеДобавлено: Пн, авг 10 2009, 10:33 
Начинающий
Начинающий

Зарегистрирован:
Пн, авг 10 2009, 10:25
Сообщения: 4
Подскажите, как можно реализовать следущее:

в ПО есть шаг - решение пользователя - TS00300052. определены несколько выходов (среди прочих - "вернуть на доработку"). требуется, в зависимости от обработчика, скрывать или показывать кнопку "вернуть на доработку". среди прочего устроило бы даже решение с помощью полномочий, но, похоже они не проверяются. по крайней мере в трассировке полномочий не увидел.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Скрытие кнопок в шаге "решение пользователя" в зависимости от выполняющего задачу
СообщениеДобавлено: Пн, авг 10 2009, 12:42 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Ср, ноя 03 2004, 14:51
Сообщения: 1912
Откуда: КраснАдар
Пол: Мужской
Думается, что динамически нельзя это сделать.
Если поток свой - то, как вариант, сделайте несколько задач "Решение пользователя" с различными выходами и заверните все это дело в шаг "Множественное условие". А перед ним уже определяйте (хоть через полномочия, хоть через операцию с контейнером) - в какую ветку прыгать.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Скрытие кнопок в шаге "решение пользователя" в зависимости от выполняющего задачу
СообщениеДобавлено: Пн, авг 10 2009, 13:06 
Начинающий
Начинающий

Зарегистрирован:
Пн, авг 10 2009, 10:25
Сообщения: 4
John Doe написал:
Думается, что динамически нельзя это сделать.
Если поток свой - то, как вариант, сделайте несколько задач "Решение пользователя" с различными выходами и заверните все это дело в шаг "Множественное условие". А перед ним уже определяйте (хоть через полномочия, хоть через операцию с контейнером) - в какую ветку прыгать.


жаль. хотел как раз уйти от этого. типа 1 универсальный шаг решения. большое спасибо за ответ.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Скрытие кнопок в шаге "решение пользователя" в зависимости от выполняющего задачу
СообщениеДобавлено: Пн, авг 10 2009, 13:32 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Ср, ноя 03 2004, 14:51
Сообщения: 1912
Откуда: КраснАдар
Пол: Мужской
Если есть возможность модифицировать объекты или точку расширения воткнуть - то есть одна возможность.
Смотрим ФМ SWU_PREPROCESS_DECISION. После отработки SAP_WAPI_READ_CONTAINER имеем содержимое контейнера задачи. В элементах _DECISION_TEXT присутствуют все возможные выходы. На основании их собственно и рисуются кнопки в html. Все что нужно - врезаться либо в конец SAP_WAPI_READ_CONTAINER и там рулить формированием таблички SIMPLE_CONTAINER, либо в конец SWU_PREPROCESS_DECISION и там чистить табличку ET_ALTERNATIVES по собственному алгоритму.

Добавил: Вместо SWU_PREPROCESS_DECISION смотрим SWU_PROCESS_MANUEL_DECISION.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Скрытие кнопок в шаге "решение пользователя" в зависимости от выполняющего задачу
СообщениеДобавлено: Пн, авг 10 2009, 13:45 
Начинающий
Начинающий

Зарегистрирован:
Пн, авг 10 2009, 10:25
Сообщения: 4
John Doe написал:
Если есть возможность модифицировать объекты или точку расширения воткнуть - то есть одна возможность.
Смотрим ФМ SWU_PREPROCESS_DECISION. После отработки SAP_WAPI_READ_CONTAINER имеем содержимое контейнера задачи. В элементах _DECISION_TEXT присутствуют все возможные выходы. На основании их собственно и рисуются кнопки в html. Все что нужно - врезаться либо в конец SAP_WAPI_READ_CONTAINER и там рулить формированием таблички SIMPLE_CONTAINER, либо в конец SWU_PREPROCESS_DECISION и там чистить табличку ET_ALTERNATIVES по собственному алгоритму.


ФМ этот видел. 2004ерп. точек нет. ломать не хочу ;). екзитов нет. кароче по всему выходит - надо кучу квадратиков рисовать. ну ладно. теперь хоть с чистым сердцем.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Скрытие кнопок в шаге "решение пользователя" в зависимости от выполняющего задачу
СообщениеДобавлено: Пн, авг 10 2009, 15:39 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Ср, ноя 03 2004, 14:51
Сообщения: 1912
Откуда: КраснАдар
Пол: Мужской
Еще вариант.
1. Создаем ФМ
Code:
FUNCTION zcfa_inplace_decision_process.
*"----------------------------------------------------------------------
*"*"Ëîêàëüíûé èíòåðôåéñ:
*"  IMPORTING
*"     REFERENCE(I_INFO) TYPE  SWR_WIPR_I
*"  EXPORTING
*"     REFERENCE(E_INFO) TYPE  SWR_WIPR_E
*"----------------------------------------------------------------------

  TYPE-POOLS: swlc.
  CONSTANTS $swp_decision_parameter1 TYPE swc_elem
                                       VALUE '_DECISION_PARAMETER1'.
  CONSTANTS $swp_decision_parameter2 TYPE swc_elem
                                       VALUE '_DECISION_PARAMETER2'.
  CONSTANTS $swp_decision_parameter3 TYPE swc_elem
                                       VALUE '_DECISION_PARAMETER3'.
  CONSTANTS $swp_decision_parameter4 TYPE swc_elem
                                       VALUE '_DECISION_PARAMETER4'.
  CONSTANTS $swp_decision_text       TYPE swc_elem
                                       VALUE '_DECISION_TEXT'.
  CONSTANTS $swp_decision_title      TYPE swc_elem
                                       VALUE '_DECISION_TITLE'.

  DATA: BEGIN OF t_listtab OCCURS 0.
  DATA:   decision LIKE swd_decsn-decision.
  DATA: END OF t_listtab.


  DATA:
    lt_container        TYPE swr_cont OCCURS 0 WITH HEADER LINE,
    ls_wi_header        TYPE swwwihead,
    ls_ib_workitem      TYPE swlwp1,
    lt_merge_table      TYPE swww_t_merge_table WITH HEADER LINE,
    lt_mime_objects     TYPE sinmimeobj OCCURS 2 WITH HEADER LINE,
    ls_mergeline        TYPE swrsmerge,
    l_font_tag_sml(30)  TYPE c,
    l_font_tag_big(30)  TYPE c,
    l_col_bc(30)        TYPE c.
  DATA:
    l_action_name,
    l_action_index(4)   TYPE n,
    ls_por              TYPE sibflporb,
    ls_object           TYPE swlobjects,
    l_return_code       TYPE sy-subrc,
    l_result            TYPE swcont-value,
    l_title             TYPE swcont-value,
    ls_swlc_workitem    TYPE swlc_workitem.

  DATA: BEGIN OF gt_alternatives OCCURS 0,
          number(4)    TYPE c,
          text(251)    TYPE c,
        END OF gt_alternatives.

  DATA: g_refresh_html     TYPE sy-input,
        g_we_run_in_html_mode
                           TYPE sy-input,
        my_container       TYPE REF TO cl_gui_custom_container,
        my_html            TYPE REF TO cl_gui_html_viewer,
        gt_workitem_preview_objects
                           TYPE swlobjects_t.


  IF i_info-command IS INITIAL.
    e_info-enableexec = 'X'.
  ELSEIF i_info-command EQ '$EXECUTE'.
    CALL FUNCTION 'SWL_WI_SELECT'
      EXPORTING
        wi_id                 = i_info-wi_id
      CHANGING
        workitem              = ls_swlc_workitem
      EXCEPTIONS
        wi_reservation_failed = 1
        OTHERS                = 2.
    IF sy-subrc <> 0.
      e_info-enableexec = space.
      MESSAGE s145(5w)  .
    ELSE.
      CALL FUNCTION 'SAP_WAPI_READ_CONTAINER'
        EXPORTING
          workitem_id      = i_info-wi_id
        TABLES
          simple_container = lt_container
        EXCEPTIONS
          OTHERS           = 1.

      CLEAR gt_alternatives. REFRESH gt_alternatives.
      LOOP AT lt_container WHERE element = $swp_decision_text.
        gt_alternatives = lt_container-value.
        APPEND gt_alternatives.
      ENDLOOP.

      CALL FUNCTION 'SWW_WI_HEADER_READ'
        EXPORTING
          wi_id     = i_info-wi_id
        IMPORTING
          wi_header = ls_wi_header
        EXCEPTIONS
          OTHERS    = 1.

*- get text if language not equal creation language
*    IF ls_wi_header-wi_lang NE sy-langu.
      CALL FUNCTION 'SWU_GET_DECISION_TEXT_TITLE'
        EXPORTING
          wiid               = ls_wi_header-wi_id
        IMPORTING
          decision_title     = l_title
        TABLES
          decision_text      = gt_alternatives
        EXCEPTIONS
          node_not_found     = 1
          text_not_found     = 2
          workflow_not_found = 3
          OTHERS             = 4.
      IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
*    ENDIF.


      MOVE-CORRESPONDING ls_wi_header TO ls_ib_workitem.
      ls_ib_workitem-wi_text = l_title.

      REFRESH gt_workitem_preview_objects.
      CALL FUNCTION 'SIN_WI_PREVIEW_HTML_BUILD'
        EXPORTING
          workitem                 = ls_ib_workitem
          inbox_mode               = space
          deliver_data_but_no_html = 'X'
        IMPORTING
          e_font_tag_sml           = l_font_tag_sml
          e_font_tag_big           = l_font_tag_big
          e_col_bc                 = l_col_bc
        TABLES
          preview_objects          = gt_workitem_preview_objects[].

*- add the stuff necessary for executing a decision...
      REFRESH t_listtab.
      SORT gt_alternatives ASCENDING BY number.


      LOOP AT gt_alternatives.
        CLEAR t_listtab.

      " OVER HERE!Я ИДИЁТ, УБЕЙТЕ МИНЯ КТО-НИБУДЬ!!
      " Lets kill some button. Second button for example
        IF sy-tabix = 2.
          CONTINUE.
        ENDIF.
      " End of buttonkiller proccess

        t_listtab-decision = gt_alternatives-text.
        APPEND t_listtab.
      ENDLOOP.

      PERFORM add_decision_html
        TABLES lt_merge_table t_listtab
        USING  l_font_tag_sml l_font_tag_big l_col_bc.

      LOOP AT lt_merge_table.
        CLEAR ls_mergeline.
        ls_mergeline-name    = lt_merge_table-name.
        ls_mergeline-command = lt_merge_table-command.
        APPEND LINES OF lt_merge_table-html TO ls_mergeline-html.
        APPEND ls_mergeline TO e_info-mergelines.
      ENDLOOP.
    ENDIF.

  ELSEIF i_info-command EQ '$HTMLEVT'. "SAPEVENT event has been raised

    IF i_info-evt_par-action CS 'NOTE:'.
      SPLIT i_info-evt_par-action AT ':'
            INTO l_action_name l_action_index.
      READ TABLE gt_workitem_preview_objects INTO ls_object
           INDEX l_action_index.
      IF sy-subrc EQ 0.

        MOVE ls_object-objid TO ls_por.

        CLASS cl_swf_utl_run_services DEFINITION LOAD.
        CALL METHOD cl_swf_utl_run_services=>execute_default_method_object
          EXPORTING
            im_lpor = ls_por.
      ENDIF.
    ELSEIF i_info-evt_par-action CS 'DECI:'.
      CALL FUNCTION 'SWL_WI_SELECT'
        EXPORTING
          wi_id                 = i_info-wi_id
        CHANGING
          workitem              = ls_swlc_workitem
        EXCEPTIONS
          wi_reservation_failed = 1
          OTHERS                = 2.
      IF sy-subrc <> 0.
        e_info-enableexec = space.
        e_info-execresult = 'C'.
        MESSAGE s145(5w)  .
      ELSE.

        SPLIT i_info-evt_par-action AT ':'
              INTO l_action_name l_action_index.
        IF l_action_index EQ 0.          "user selected 'cancel'
          e_info-execresult = 'C'.
        ELSE.               "user selected a terminating alternative

          READ TABLE gt_alternatives INDEX l_action_index.
          IF sy-subrc EQ 0.
            DATA wim   TYPE REF TO if_swf_run_wim_internal.
            DATA txmgr TYPE REF TO cl_swf_run_transaction_manager.
            DATA cnt   TYPE REF TO if_swf_cnt_container.
            DATA element_name TYPE swfdname.

            TRY.
                txmgr = cl_swf_run_transaction_manager=>get_instance( ).

                wim = cl_swf_run_wim_factory=>find_by_wiid(
                      im_read_for_update = 'X'
                      im_wiid            = i_info-wi_id
                      im_tx              = txmgr ).

                cnt = wim->get_wi_container( ).

                element_name = cl_swf_run_decision_services=>c_inplace_decision_result.
                cnt->element_set( name = element_name
                                  value = gt_alternatives-number ).

                txmgr->add_object( wim ).
                txmgr->save( ).
                txmgr->commit( ).

                e_info-execresult = 'E'.

              CATCH cx_swf_ifs_exception.
                e_info-execresult = 'C'.
            ENDTRY.
          ELSE.
            e_info-execresult = 'C'.
          ENDIF.   "problems while reading alternative table
        ENDIF.                         "decision was not "cancel"
      ENDIF.                           "item could bb selected
    ENDIF.                             "decision has been selected
  ENDIF.         "an event has been fired during execution

ENDFUNCTION.


*&---------------------------------------------------------------------*
*&      Form  add_decision_html
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->LT_MERGE_TABLE  text
*      -->L_FONT_TAG_SML  text
*      -->L_FONT_TAG_BIG  text
*      -->L_COL_BC        text
*----------------------------------------------------------------------*
FORM add_decision_html
       TABLES lt_merge_table t_listtab
       USING  l_font_tag_sml l_font_tag_big l_col_bc.

  DATA: BEGIN OF tmp_listtab OCCURS 0.
  DATA:   decision LIKE swd_decsn-decision.
  DATA: END OF tmp_listtab.

  DATA: l_count(4) TYPE n,
        l_buf(255) TYPE c,
        merge_item TYPE swww_t_merge_item.

  tmp_listtab[] = t_listtab[].

  CLEAR merge_item.
  merge_item-name = '<!DECISION_ALTERNATIVES!>'.
  CLEAR l_buf.
  CONCATENATE '<hr><table width="100%" border="0"><tr><td><b>'
              l_font_tag_sml INTO l_buf.
  APPEND l_buf TO merge_item-html.
  APPEND 'Select one of the alternatives below'(300)
    TO merge_item-html.
  APPEND '</td></tr>'
    TO merge_item-html.
  LOOP AT tmp_listtab.
    l_count = sy-tabix.
    CLEAR l_buf.
    l_buf = '<tr>'.
    APPEND l_buf TO merge_item-html.
    CLEAR l_buf.
    CONCATENATE '<td onmouseover="this.className=''altfoc''"' "#EC NOTEXT
                'onmouseout="this.className=''alt''" class=alt' "#EC NOTEXT
                'style="background-color:'
    INTO l_buf SEPARATED BY space.
    CONCATENATE l_buf
                l_col_bc '"><a style="color:black;text-decoration:none;display:block;width:100%" href="SAPEVENT:DECI:' l_count '">' l_font_tag_sml
    INTO l_buf.
    APPEND l_buf TO merge_item-html.
    APPEND tmp_listtab-decision TO merge_item-html.
    APPEND '</a></td></tr>' TO merge_item-html.
  ENDLOOP.
*- unfortunately we gotta append a button for cancel...
  APPEND  '<tr>' TO merge_item-html.
  CLEAR l_buf.
  CONCATENATE '<td onmouseover="this.className=''altfoc''"' "#EC NOTEXT
              'onmouseout="this.className=''alt''" class=alt' "#EC NOTEXT
              'style="background-color:'
              l_col_bc '"><a style="color:black;text-decoration:none;display:block;width:100%" href="SAPEVENT:DECI:0000">' l_font_tag_sml
    INTO l_buf SEPARATED BY space.
  APPEND l_buf TO merge_item-html.
  APPEND 'Abort'(301) TO merge_item-html.
  APPEND '</a></td></tr>' TO merge_item-html.

  APPEND '</table><hr><br><br>' TO merge_item-html.
  APPEND merge_item TO lt_merge_table.

ENDFORM.                               " add_decision_html

2. В шаге на закладке "Просмотр ЭПО" прописываем его в настройке предварит.просмотра в интегр.Раб.месте.
После этих манипуляций данный шаг будет выполняться только в рамках предпросмотра (нижний контейнер). Зато кнопки сможете регулировать сами.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Скрытие кнопок в шаге "решение пользователя" в зависимости от выполняющего задачу
СообщениеДобавлено: Пн, авг 10 2009, 16:27 
Начинающий
Начинающий

Зарегистрирован:
Пн, авг 10 2009, 10:25
Сообщения: 4
John Doe написал:
Еще вариант.
[SKIP]

TYPE-POOLS: swlc.



только надо TYPE-POOLS: swlc, swww.
а то lt_merge_table TYPE swww_t_merge_table WITH HEADER LINE не находит.

спасибо за работу ;)

UPDATE: вариант интересен, но чтото не поехало "из коропки". надо допиливать. ладно. всё равно здорово. буду разбираться.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Скрытие кнопок в шаге "решение пользователя" в зависимости от выполняющего задачу
СообщениеДобавлено: Вт, сен 29 2009, 06:08 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пт, янв 21 2005, 12:40
Сообщения: 371
Пол: Мужской
Мне кажется проще создать свой бизнес объект со своей реализацией метода принятия решения.
В таком случае можно нарисовать свой экранчик и сделать управление нопками так как заблагорассудится.


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

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


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

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


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

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