Предположим, что есть некая гипотетическая ситуация, в ходе которой нужно пойти на некоторый неправильный подход с точки зрения REST. Получить данные в одном методе, а потом использовать их при следующем вызове другого метода. В этом случае можем воспользоваться классом для кэша /ui2/cl_cache_handler
Рассмотрим пример с файлом:
Создадим в классе *DPC_EXT
Переменную для хранения данных(переменную просто для удобства делаю, хранить данные в ней бессмысленно) и константу с именем.
1 2 |
data MS_FILE_FOR_SYSTEM type /IWBEP/IF_MGW_APPL_TYPES=>TY_S_MEDIA_RESOURCE . constants MC_CACHE_DATA_NAME type STRING value 'System' ##NO_TEXT. |
В моем случае получаю файл для хранения
1 2 3 4 5 6 7 8 |
METHOD /iwbep/if_mgw_appl_srv_runtime~update_stream. DATA(lo_cache) = NEW /ui2/cl_cache_handler( iv_cache_uri = mc_cache_data_name iv_cache_lifetime = /ui2/if_cache_support=>gc_max_cache_age ). lo_cache->set( iv_data = ms_file_for_system ). ENDMETHOD. |
При следующем вызове можем получить данные из кэша.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
DATA(lo_cache) = NEW /ui2/cl_cache_handler( iv_cache_uri = mc_cache_data_name iv_cache_lifetime = /ui2/if_cache_support=>gc_max_cache_age ). TRY. lo_cache->get( EXPORTING iv_uri = mc_cache_data_name iv_expiry_sec = 60 IMPORTING er_data = DATA(lr_data) ). lo_cache->delete( ). CATCH /ui2/cx_cache_invalid. CATCH /ui2/cx_cache_inactive. CATCH cx_root. ENDTRY. IF lr_data IS NOT INITIAL. ASSIGN lr_data->* TO FIELD-SYMBOL(<ls_сache_data>). ENDIF. |
Еще немного про класс /ui2/cl_cache_handler:
Документация
Более правильное применение
Примечание
С точки зрения концепции REST такой подход следует избегать