Соберите динамическое предложение WHERE.Начните с функционального модуля RH_DYNAMIC_WHERE_BUILD
.Напишите собственный построитель строк, если он не подходит.
Вы также можете построить диапазоны для динамических предложений IN, но это будет сложнее.Типы полей различаются, и, поскольку диапазоны зависят от типа (TYPE RANGE OF <type>
), вы получите много чрезмерно динамического кода, который не доставляет удовольствия программировать.
Обратите внимание на следующие детали при построении WHEREпредложение:
Имена полей в полномочиях могут отличаться от имен столбцов, из которых вы выбираете.Вам может потребоваться отобразить их.
Значения авторизации могут содержать заполнитель *
.Убедитесь, что вы перевели его на оператор ABAP CP
или оператор SQL LIKE
.Если значение является только звездочкой, вы можете игнорировать условие, потому что оно ничего не будет ограничивать.
Функциональный модуль принимает значения длиной до 20 символов, в то время как значения авторизации могут быть вышедо 40 символов.Если вам нужна полная длина, функционального модуля недостаточно.
Строковые поля требуют заключать значения в кавычки для правильного синтаксиса SQL, а не строковые значения, такие как целые числа не должен быть приложен, чтобы сделать выбор правильным.Убедитесь, что вы выбрали правильное вложение для типа колонки.
Я не уверен, что инспектор кода распознает эту комбинацию функциональных модулей как безопасную.Динамические предложения WHERE являются потенциальной точкой проникновения для внедрения SQL.Инспектор кода обычно отклоняет управляющие потоки, которые делегируют сборку предложения какому-либо другому классу.Вам может понадобиться добавить экранирование с помощью методов класса cl_abap_dyn_prg
.