Сохранить значение глобального атрибута при запуске нового сеанса - PullRequest
0 голосов
/ 25 сентября 2019

У меня есть два поля в приложении SAP Fiori: Template_ID и Offer_ID.

Я хочу выбрать значение в Offer_ID в зависимости от значения поля Template_ID.

Для решения этой проблемы я попытался выполнить следующие шаги:

Когдапользователь нажимает на поле Template_ID в Back-End и запускает метод:

CL_CUAN_CAMPAIGN_DPC->contentset_get_entityset().

Этот метод имеет возвращаемый параметр et_resultet_result у меня есть необходимое поле temp_id.

Для сохранения значения temp_id я создал глобальный атрибут в классе ZCL_CUAN_CLASS.

ZCL_CUAN_CLASS=>GV_CONTENT = VALUE #( et_result[ 1 ]-temp_ID OPTIONAL ).

Я буду использовать этот глобальный атрибут в качестве параметра input для моего второго метода:

CL_CUAN_CAMPAIGN_DPC->GET_OFFER_BY_TEMPLATE().

Этот метод возвращает мне внутреннюю таблицу с offer_id, которая принадлежит моему выбранному temp_id.

Но когда пользователь нажимает на поле Offer_ID в веб-интерфейсе, при отладке я вижу, что мой глобальный атрибут пуст.

Может быть, это из-за сеанса или чего-то еще, но оно пустое.

enter image description here

Ответы [ 2 ]

1 голос
/ 27 сентября 2019

OData - это протокол без состояний протокол , то есть сервер отвечает на ваш запрос, а затем забывает, что вы когда-либо были там.По определению, это не позволяет переносить содержимое основной памяти из одного запроса в другой.

Пользовательские интерфейсы, с другой стороны, обычно требуют состояния.Его можно получить с помощью одной из следующих опций:

Пользовательский интерфейс с отслеживанием состояния

Как отмечает Haojie, одним из решений является сохранение данных, выбранных в пользовательском интерфейсе, и передача их в видекритерий фильтра обратно на сервер со следующим запросом.Наличие пользовательского интерфейса с отслеживанием состояния является стандартным решением для серверных приложений без сохранения состояния.

Сохранение с сохранением состояния

Другой вариант - постоянное хранение данных в базе данных сервера, предпочтительно в ABAP, в бизнес-объекте.Этот объект имеет уникальный идентификатор, возможно, GUID, на который вы можете ссылаться в своих запросах, чтобы идентифицировать процесс, над которым вы работаете.

Черновое сохранение

Если не вся информация доступна за один шаг, например, в многошаговом мастере, не должен сразу становиться «активным», или вы хотите иметь возможность переключать устройства во время работы над многоступенчатым процессом, черновики являются опцией.Черновики - это обычные бизнес-объекты, единственной особенностью которых является то, что они остаются инертными до тех пор, пока пользователь не выполнит последний шаг активации.

Мягкое состояние

Для оптимизации производительности вы можете взглянуть на Режим мягкого состояния SAP Gateway , который позволяет буферизовать некоторые данные, чтобы иметь возможность быстрее реагировать на связанные запросы.Это, как правило, не рекомендуется, так как противоречит парадигме OData без состояния.

Протокол с отслеживанием состояния

В некоторых случаях протоколы без сохранения состояния, такие как OData, не являются правильным способом.Например, банковские приложения по-прежнему предпочитают сохранять состояние, чтобы избежать бесконечного входа пользователей в систему и, таким образом, стать уязвимыми для таких атак, как CSRF.Если это так, вам следует взглянуть на ABAP WebDynpro для вашего пользовательского интерфейса.Как правило, серверные протоколы с сохранением состояния считаются низшими, поскольку они связывают множество серверных ресурсов в течение длительного времени и, следовательно, не могут обрабатывать большее количество пользователей.

0 голосов
/ 26 сентября 2019

Когда пользователь нажимает на поле OfferId, он запускает сеанс NEW и, конечно, то, что вы сохраняете как GV_CONTENT в классе ZCL_CUAN_CLASS, теряется.

Что вам нужно сделать, так это чтобы второй запрос вы отправили бэкэнду с фильтром Template_ID, поэтому в вашем методе CL_CUAN_CAMPAIGN_DPC->GET_OFFER_BY_TEMPLATE() вы можете дополнительно обработать результат с помощью Template_ID.

Или SET / GET Параметр.

...