Углубляюсь в новый дивный мир работы с потоками. Ранее уже у меня был описан поиск нужного потока(будут некоторые пересечения).
Накидаю дополнительных методов и FM для работы с потоками:
FM на случай если мы хотим прекратить поток или конкретную задачу вручную. Может быть полезно если мы хотим, например, "протолкнуть" шаг потока в обход стандартного интерфейса.
1 2 3 4 5 6 7 8 9 |
CALL FUNCTION 'SWW_WI_ADMIN_CANCEL' EXPORTING wi_id = '' "Идентификатор задачи\потока autorization_checked = abap_true EXCEPTIONS update_failed = 1 no_autorization = 2 infeasible_state_transition = 3 others = 4 . |
Найти подзадачи:
1 2 3 4 5 6 7 |
DATA lt_items TYPE TABLE OF swr_wihdr. CALL FUNCTION 'SAP_WAPI_GET_DEPENT_WIS' EXPORTING workitem = CONV swr_struct-workitemid( 8240 ) "8240 мой поток для примера TABLES items = lt_items. |
Чтение данных контейнера.
Имеем поток операций 8240 с контейнером
Для получения данных контейнера у нас есть два способа
1. Классический при помощи ФМ 'SAP_WAPI_READ_CONTAINER'
1 2 3 4 5 6 |
CALL FUNCTION 'SAP_WAPI_READ_CONTAINER' EXPORTING workitem_id = wi_id TABLES simple_container = . |
2. Более прогрессивный при помощи классов
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
DATA lv_name TYPE swfdname VALUE 'FILENAME'. DATA lv_value TYPE string. "Могут быть разные типы в зависимости от типа в контейнере TRY. DATA(lo_wi_handle) = cl_swf_run_wim_factoru=>find_by_wiid( CONV srw_struct-workitemid( 8240 ) ). CATCH cx_root. ENDTRY. TRY. DATA(lo_containe) = lo_wi_handle->get_wi_container( ). lo_container->if_swf_cnt_element_access_l~element_get_value( EXPORTING name = lv_name IMPORTING value = lv_value ). CATCH cx_root. ENDTRY. |
Если можно получить данные из контейнера, можно их и изменить там
1 2 3 4 5 6 7 8 9 |
lv_value = './PASHIGOREVAY-20......File2.jpg'. TRY. lo_container->if_swf_cnt_element_acces_l~element_set_value( name = lv_name value = lv_value ). lo_wi_handle->ifswf_run_wim_pers_internal~save_container( ). CATCH cx_root. ENDTRY. |
Смотрим в контейнер:
По возможности буду дополнять, но это не точно.