ABAP: от get_auth_values ​​() результат к запросу SQL - PullRequest
0 голосов
/ 10 декабря 2018

Я использую результат get_auth_values ​​() .Это структура типа us335 .

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

Я хочу использовать эти результаты, аналогичные us335, и сделатьзапрос SQL.Комбинируя записи с AND.

, я вижу следующие способы решения этой проблемы:

  • создайте запрос SQL с `WHERE COL IN (value1, value2, ...) ANDCOL <= value3 и col> = value4 ...
  • создать запрос SQL, используя специфичные для OpenSQL IN seltab с моим собственным кодом (используя RANGE)
  • создать SQLзапрос с использованием специфичного для OpenSQL IN seltab со встроенным методом (который я не знаю до сих пор)

Я думаю, есть еще больше способов решить эту проблему.

Какой самый выполнимый способ?

1 Ответ

0 голосов
/ 12 декабря 2018

Соберите динамическое предложение WHERE.Начните с функционального модуля RH_DYNAMIC_WHERE_BUILD.Напишите собственный построитель строк, если он не подходит.

Вы также можете построить диапазоны для динамических предложений IN, но это будет сложнее.Типы полей различаются, и, поскольку диапазоны зависят от типа (TYPE RANGE OF <type>), вы получите много чрезмерно динамического кода, который не доставляет удовольствия программировать.

Обратите внимание на следующие детали при построении WHEREпредложение:

  • Имена полей в полномочиях могут отличаться от имен столбцов, из которых вы выбираете.Вам может потребоваться отобразить их.

  • Значения авторизации могут содержать заполнитель *.Убедитесь, что вы перевели его на оператор ABAP CP или оператор SQL LIKE.Если значение является только звездочкой, вы можете игнорировать условие, потому что оно ничего не будет ограничивать.

  • Функциональный модуль принимает значения длиной до 20 символов, в то время как значения авторизации могут быть вышедо 40 символов.Если вам нужна полная длина, функционального модуля недостаточно.

  • Строковые поля требуют заключать значения в кавычки для правильного синтаксиса SQL, а не строковые значения, такие как целые числа не должен быть приложен, чтобы сделать выбор правильным.Убедитесь, что вы выбрали правильное вложение для типа колонки.

  • Я не уверен, что инспектор кода распознает эту комбинацию функциональных модулей как безопасную.Динамические предложения WHERE являются потенциальной точкой проникновения для внедрения SQL.Инспектор кода обычно отклоняет управляющие потоки, которые делегируют сборку предложения какому-либо другому классу.Вам может понадобиться добавить экранирование с помощью методов класса cl_abap_dyn_prg.

...