Soft State(Гибкое состояние) - позволяет поддерживать сессию на некоторое время и сохранять данные между вызовами в этом периоде. Активируется и настраивается довольно легко.
1. В классе *MPC_EXT необходимо включить это состояние в переопределенном методе DEFINE
1 2 3 4 |
METHOD define. super->define( ). model->set_soft_state_enabled( abap_true ). ENDMETHOD. |
2. В классе *DPC_EXT определим две переменных.
MV_SOFTSTATE - переменная по которой мы будем определять, что состояние включено.(В случае, если на настройках сервиса Гибкое состояние деактивируется, переменная будет пустая)
MV_CHECK - статический атрибут, который нужен только в учебном случае для теста. Используем его, чтобы посмотреть, что данные действительно сохраняются между вызовами. На практике каждый сделает необходимые для себя переменные.
3. Переопределим в классе *DPC_EXT два метода OPERATION_START и OPERATION_END
В OPERATION_START взведем флаг MV_SOFTSTATE
1 2 3 |
METHOD operation_start. mv_softstate = abap_true ENDMETHOD. |
OPERATION_END ~ оставляем пустым, однако, переопределить его надо обязательно.
4. Далее настроим сервис. Перейдем в транзакцию /IWFND/MAINT_SERVICE
Soft State неактивно
Первым делом для активации надо настроить время сессии в SICF
Выбираем узел и нажимаем редактирование
Прописываем необходимое время и сохраняем
Возвращаемся в /IWFND/MAINT_SERVICE и активируем Soft State
Готово
Тест сервиса
В классе *DPC_EXT в методе ENTITYSPLISET_GET_ENTITYSET в случае если Soft State активировано, назначим переменной mv_check значение true.
1 2 3 4 5 |
METHOD ENTITYSPLISET_GET_ENTITYSET . IF mv_softstate = abap_true. gv_check = abap_true ENDIF. ENDMETHOD |
Далее нам понадобится вызывать сервис по ссылке из браузера. Адрес можно узнать в транзакции SICF
+ добавляем сущность которую хотим вызвать
Получим примерно такую строку: http://XXXXXXXXXXXXXXX/sap/opu/odata/sap/ZZ_TEST_SERVICE_SRV/EntitySpfliSet
Ставим точку в методе, после чего вызываем один раз, F8 и вызываем второй.
Видим, что сразу после второго вызова переменная GV_CHECK уже заполнена
После настроек классов *DPC_EXT и *MPC_EXT (перепроверил три раза) в тр-ции /IWFND/MAINT_SERVICE все равно статус гибкого состояния “не поддерживается”, и поставить статус “активно” не дает. Что это может быть?