Дождитесь ответа от пользовательского интерфейса в ABAP Odata

Я пытаюсь создать OData ABAP, который получает запрос, выполняет некоторые вычисления, а затем должен вернуть сообщение конечному пользователю и принять решение на основе ввода пользователя. Таким образом, служба OData должна быть приостановлена, прежде чем она получит ответ.

Есть у кого-нибудь хорошая идея?

Оцените ваш ответ. С Уважением!

Насколько я знаю, это невозможно. Вы можете разделить задачу на 2 отдельных запроса. 1. Вычислить запрос 2. Действие пользователя 3. Обработать действие пользователя Я думаю, что ваши требования больше походят на функциональный модуль RFC с удаленной поддержкой, который будет лучшим выбором. Надеюсь, это поможет.

Beka 29.05.2018 14:46

Привет, Бека. Спасибо за ответ. 2 отдельных запроса - это вариант, но это означает, что одна и та же полезная нагрузка будет отправлена ​​дважды. Так что я как бы искал другой вариант.

KranzFafka 29.05.2018 16:01

возможно, вы сможете подробнее объяснить свой запрос. в одном запросе это будет невозможно из-за асинхронной обработки NW Gateway. Поможет ли SuggestionHelp / LiveValues? Это похоже на помощь по значению, когда пользователь вводит значения, которые он получает автоматически (это предложение может быть привязано к службе odata). Если ваш расчет достаточно быстр, вы можете предложить значения в соответствии с вводом пользователя. Может ли это помочь?

dotchuZ 30.05.2018 09:01

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

KranzFafka 30.05.2018 11:15
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
4
210
1

Ответы 1

OData - это особый вид REST. REST не имеет гражданства. То, что вы хотите, - это состояние.

Хороший способ превратить этот поток с сохранением состояния в поток без состояния:

Отправьте первый запрос (REST: POST, OData: CREATE), который создает и сохраняет (!) Документ, представляющий вычисление и его результат. Этот первый запрос может вернуть результат вычисления, который будет представлен пользователю.

Затем выбор пользователя отправляет второй запрос, который обращается к ранее созданному документу (например, через GUID) и включает выбор пользователя. Это означает, что второй запрос не должен снова отправлять ввод вычислений и фактически не выполняет никаких вычислений; он изменяет только состояние существующего объекта.

Если впоследствии расчет больше не нужен, второй запрос может удалить его. Чтобы предотвратить утечку данных, удаление старых вычислений по прошествии определенного времени (например, 24 часов) может быть разумным шагом.

Для этого есть ограничение, я не могу хранить данные во второй таблице только для их хранения. Я думал о веб-сокете, но есть и некоторые ограничения. Спасибо за ваш ответ!

KranzFafka 31.05.2018 10:53

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

Florian 01.06.2018 10:26

Если вы не можете сохранить данные, я бы просто повторил запрос. Или попросите первый запрос вернуть результат расчета и повторно отправить его во втором запросе. Зависит от того, насколько это должно быть безопасно.

Florian 01.06.2018 10:27

Вы оценили использование вместо этого протокола связи с отслеживанием состояния? Например, материал, лежащий в основе ABAP WebDynpro, может лучше подходить для вашего случая использования.

Florian 01.06.2018 10:28

Другие вопросы по теме