SAP Processes and Forms. Валидация полей формы.

0. Intro

В одной из заметок, посвященных теме SAP Processes and Forms, я описывал процесс создания FPM процесса "с нуля", следуя руководству вендора

См. заметку SAP Processes and Forms based on FPM Forms

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

См. заметку Как добавить радиокнопки в FPM форму?

Таким образом, небольшое количество материала про работу с полями FPM процесса у нас есть. Но, как это часто бывает, если есть какие-то поля, неважно, будь то инфо-тип, заявка на отпуск или FPM процесс, то обязательно должна быть и проверка этих самых полей, ну или того, что туда ввел пользователь. Об этом и пойдет речь в этой заметке.

1. Prerequisites

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

1.1 Создание формы сценария

С помощью транзакции HRASR_DT создайте новую форму сценария

Рисунок 1.

В узле "Fields" добавьте два поля. В моем случае это поля TEST_FIELD1TEST_FIELD2.

Рисунок 2.

1.2.  Создание процесса

Для созданного сценария определите новый процесс

Рисунок 3.

Затем настройте форму для процесса

См. Editing the Form Layout Using FPM Configurations

Для этого, создайте конфигурацию компонента FPM_FORM_UIBB_GL2, запустив Web Dynpro приложение CONFIGURE_COMPONENT

Рисунок 4.

В качестве Feeder Class используйте класс CL_HRASR00_FPM_FEEDER

Рисунок 5.

на следующем экране выберите созданный ранее сценарий и его версию

Рисунок 6.

В области предлагаемых полей, которые могут быть добавлены в форму, отсутствуют два поля, которые были определены мной в разделе _# 1.1 Создание формы сценария (_поля TEST_FIELD1 и TEST_FIELD2)

Рисунок 7.

Чтобы исправить это, мне, как минимум, понадобится создать back-end сервис для своего процесса.

1. 3.  Создание backend-сервиса для процесса

Создайте новый backend-сервис для процесса. Ранее я публиковал материал, в котором, как мне кажется, очень подробно описал данный процесс

См. заметку Создание собственного backend-сервиса для процесса Processes and Forms

В результате должно быть создано два внедрения для BAdI HRASR00GEN_SERVICE_ADVANCED и HRASR00GEN_SERVICE_BASIC.

N.B. Обоим внедрениям должен быть присвоен один реализующий класс.

[Рисунок 8.]

Если все действия выполнены корректно, новый backend-сервис будет присвоен вашему процессу

Рисунок 9.

2. Определение операций для полей. Метод GET_OPERATIONS

В методе GET_OPERATIONS определите операции, которые будут применяться к проверяемым полям процесса

Рисунок 10.

Например, операция «IS_NOT_EMPTY», которое применяется для двух полей моего процесса

Рисунок 11.

По контексту можно понять, что данная операция предназначается для проверки полей процесса «на пустоту».

См. SAP Note 2502891 - How to create Generic Services in HCM Processes and Forms

Determine Supported Operations (GET_OPERATIONS)
This method is optional. Only implement this method if you use operations. If the Generic Service does not support any operations and is only to be used to proved default values and input help, you do not need this method. The method defines which operations the Generic Service supports.
Note: Operations are self-contained subfunctions of the Generic Service. Each operation has parameters that are required for the execution and that can return error messages. The operations of a Generic Service can be used when you define form scenarios. You can use either all operations or just a subset of operations. Operations must be implemented in such a way that they can run independently of each other.
The parameters of the operations are also specified in the GET_OPERATIONS method. They correspond to fields of the Generic Service. The parameters must be categorized in the GET_FIELD_INFO method.

3. Определение группировок полей процесса. Присвоение операций группировкам полей

Field Group for Generic Services

Groups the fields that are required when executing an **operation **for a Generic Service.

Use

For each operation that you use in your form scenario, define your own field group. Assign form fields to the field group and link this to the operation parameters.

См. Definition of User Events

Для двух полей своего процесса я создам одну группировку полей FG1, присвоив им операцию IS_NOT_EMPTY, созданную в описании пункта # 2. Определение операций для полей. Метод GET_OPERATIONS

Рисунок 12.

Затем необходимо выполнить присвоение группировки полей непосредственно полям процесса

Рисунок 13.

Обратите внимание на то, что операция будет заполнена автоматически.

4. Повторное создание формы процесса

Повторно выполняю создание формы процесса, которое не было завершено в описании пункта # 1.2. Создание процесса

5. Реализация проверок полей процесса. Метод DO_OPERATIONS

Perform Operations (DO_OPERATIONS)
This method is optional. Only implement this method if you define operations for the Generic Service. If the Generic Service does not support any operations and is only to be used to proved default values and input help, you do not need this method.
In the method, you define the corresponding coding for each of the operations. This is called repeatedly when a form scenario is run - that is, for every roundtrip to the back end.

В методе DO_OPERATIONS реализующего класса backend-сервиса вашего процесса, необходимо выполнить проверку на «пустоту полей». В моем случае, проверка будет заключаться в том, что поля, которым присвоена операция "IS_NOT_EMPTY", не должны быть пустыми. Иначе - необходимо вывести сообщение об ошибке

Рисунок 14.

Код может иметь различные вариации. Одна из которых

Рисунок 15.

Все проверки, реализованные в методе DO_OPERATIONS, будут активированы при нажатии на кнопку  после его запуска.

6. Тестирование

См. заметку Как установить внешнюю точку прерываний для пользователя?