Создаем вот такую табличку:
Создаем вот такой ФМ типа RFC:
FUNCTION zfm_krs_test_bg.
*"--------------------------------------------------------------------
*"*"Локальный интерфейс:
*" IMPORTING
*" VALUE(ID) TYPE CHAR10
*"--------------------------------------------------------------------
DATA ls_data TYPE zkrs_test_bgto.
ls_data-id = id.
GET TIME STAMP FIELD ls_data-tst.
MODIFY zkrs_test_bgto FROM ls_data.
COMMIT WORK.
ENDFUNCTION.
Еще один типа UPDATE TASK немедленного запуска (обратите внимание что в нем еще раз запускается BG-ФМ со своим ID):
FUNCTION zfm_krs_test_upd.
*"----------------------------------------------------------------------
*"*"Функциональный модуль обновления:
*"
*"*"Локальный интерфейс:
*" IMPORTING
*" VALUE(ID) TYPE CHAR10
*" VALUE(IV_WAIT) TYPE INT4 DEFAULT 5
*"----------------------------------------------------------------------
DATA ls_data TYPE zkrs_test_bgto.
ls_data-id = id.
WAIT UP TO iv_wait SECONDS.
GET TIME STAMP FIELD ls_data-tst.
MODIFY zkrs_test_bgto FROM ls_data.
ls_data-id = |BG{ id }|.
CALL FUNCTION 'ZFM_KRS_TEST_BG'
IN BACKGROUND TASK
EXPORTING
id = ls_data-id.
ENDFUNCTION.
И еще один UPDATE TASK отложенного запуска:
FUNCTION zfm_krs_test_upd2.
*"----------------------------------------------------------------------
*"*"Функциональный модуль обновления:
*"
*"*"Локальный интерфейс:
*" IMPORTING
*" VALUE(ID) TYPE CHAR10
*"----------------------------------------------------------------------
DATA ls_data TYPE zkrs_test_bgto.
ls_data-id = id.
* WAIT UP TO 5 SECONDS.
GET TIME STAMP FIELD ls_data-tst.
MODIFY zkrs_test_bgto FROM ls_data.
ENDFUNCTION.
Для наглядности где какой тип ставить картинка:
И выполняем вот такой код для проверки
CALL FUNCTION 'ZFM_KRS_TEST_BG'
IN BACKGROUND TASK
EXPORTING
id = 'BG'.
CALL FUNCTION 'ZFM_KRS_TEST_UPD'
IN UPDATE TASK
EXPORTING
id = 'U0'
iv_wait = 0.
CALL FUNCTION 'ZFM_KRS_TEST_UPD'
IN UPDATE TASK
EXPORTING
id = 'U1'
iv_wait = 5.
CALL FUNCTION 'ZFM_KRS_TEST_UPD2'
IN UPDATE TASK
EXPORTING
id = 'U2'.
COMMIT WORK.
Как видите, тут мы вначале регистрируем BG-ФМ, потом UPD-ФМ с нулевой задержкой внутри, потом UPD-ФМ с задержкой в 5 секунд перед обновлением и завершением, и, наконец, UPD-ФМ с задержкой обновления.Наша задача доказать что BG-ФМ выполнится последним, несмотря на то, что зарегистрирован первым, и главное выполнится только после всех UPD-ФМ. И заодно проверим вызовется ли BG-ФМ из UPD-ФМ без COMMIT.
Запускаем и смотрим в таблицу (таблица для наглядности отсортирована по времени выполнения):
Итак, какие можно сделать выводы.
- BG-ФМ запускается после выполнения всех UPD-ФМ (даже после UPD-ФМ с задержкой запуска)
- BG-ФМ, вызванный из UPD-ФМ, не нуждается в дополнительном COMMIT для запуска
- BG-ФМ, вызванный из UPD-ФМ, также запускается только после выполнения всех UPD-ФМ (даже после UPD-ФМ с задержкой запуска)
- BG-ФМ, зарегистрированный до COMMIT, вызывается позже чем BG-ФМ, вызванные из UPD-ФМ
ЧТД.
Добрый день ! У меня результат отличается от вашего
ОтветитьУдалить100 U0 0 20.191.209.184.246,3347770
100 U1 0 20.191.209.184.251,3392320
100 BGU0 0 20.191.209.184.251,3712110
100 BGU1 0 20.191.209.184.251,3758440
100 U2 0 20.191.209.184.251,3769550
100 BG 0 20.191.209.184.251,3798500
занятно
УдалитьПолучается что U2 рандомит. То раньше то позже то между BACKGROUND TASK
УдалитьТакой результат тоже удалось получить - по запускав раз 10 в другой системе.
ОтветитьУдалить200 U0 0 20.191.209.191.745,2202250
200 U1 0 20.191.209.191.750,2320030
200 BGU0 0 20.191.209.191.750,2720590
200 U2 0 20.191.209.191.750,2730700
200 BGU1 0 20.191.209.191.750,2743430
200 BG 0 20.191.209.191.750,2858310
Меняется все
3)
ОтветитьУдалить100 U0 0 20.191.209.201.409,6051740
100 U1 0 20.191.209.201.414,6097190
100 BGU0 0 20.191.209.201.414,6402200
100 BGU1 0 20.191.209.201.414,6417710
100 BG 0 20.191.209.201.414,6552420
100 U2 0 20.191.209.201.414,6566010
4) 100 U0 0 20.191.214.121.726,9379530
ОтветитьУдалить100 U1 0 20.191.214.121.731,9439360
100 U2 0 20.191.214.121.731,9876530
100 BGU0 1 20.191.214.121.732,0279100
100 BG 1 20.191.214.121.732,0291910
100 BGU1 2 20.191.214.121.732,0369570