Всем известно, что HR стоит немного особняком от всего ERP, и если консультант поставит задачу по созданию признака разработчику из ERP это может вызвать некоторое недоумение. Т.к. последний может подумать о признаках из ММ. Это абсолютно разные вещи. Признак в HR выглядит вот так:
В HR Признак представляет собой CASE для принятия решения. Его даже можно отладить поставив точку. Для этого зайдем в транзакцию PE03 и введем ИМЯ_ПРИЗНАКА. Выберем переключатель Атрибуты и нажмем "Просмотр". В открывшемся окне, можем увидеть имя сгенерированной программы. Например, для стандартного признака MMETA, который мы видим на Рис 1. мы найдем программу /1PAPA/FEAT000MMETA. "
Как видно, признак очень удобный инструмент для работы со сложными кейсами.
Создание признака
Для ведения признаков существует транзакция PE03.
Зайдем в транзакцию и введем желательное имя для признака, установим переключатель на "Атрибуты".
Нажимаем "Создать". При этом попадаем на экран обработки признака. Нам надо ввести региональные настройки
Выбираем страну или все страны и выбираем компонент.
Возвращаемся на предыдущий экран и нажимаем кнопку "Структ."
Для примера мы укажем структуру p0001( Именно ее мы будем подавать, для получения значения признаков в ФМы для чтения ). Но можем использовать любую.
Теперь мы должны выбрать поля из структуры, которые будем использовать в узлах нашего кейса.
Замечание: почему-то в табличке "Действ. поля для принятия решений", навигация осуществляется только при помощи кнопок PGDOWN PGUP. Может такое только у меня, но имейте ввиду.
Поле "Вид передачи" определяет то хотим мы получать результат одним значением или списком значений.
Поле "Имя поля для значения возврата" - можем указать какое либо поле структуры, чтобы выходной параметр был определенного типа.
Вообще, можно делать иерархии признаков(галка "подпризнак"), но это используется очень редко. Мы рассматриваем самый простой пример.
Сохраняем изменения и возвращаемся на главный экран транзакции PE03.
Мы должны построить дерево принятия решений. Т.е. Цепочки значений по которым мы получи то или иной код возврата.Создание этого дерева интуитивно понятно. Выделяем нужный узел, далее вставляем вставляем следующий и т.д. или удаляем\изменяем текущий.
После нажатия кнопки создать, мы увидим, что можно выбрать несколько значений:
Код возврата - здесь нам предложат ввести результат, который мы хотим увидеть на выходе.
Поле для принятия решения - нам предложат выбрать поле из списка выбранных ранее, для использования в качестве узла.
Признак - возможность выбрать подпризнак
Программа - Можно указать программу, из которой будет вызываться подпрограмма EXT_CALL_F , если до нее дойдет.
Операция отладки - срабатывание отладки для пользователя.
В итоге у меня получился вот такой признак:
Если WERKS = CA02 - Признак запустит программу.
Если WERKS = GB01 и PERSG = 2 - Признак вернет "Возврат 1"
Eсли werks какой либо другой - сработает отладчик.
Думаю, логика работы понятно. Тем более вы всегда можете поставить точку и посмотреть почему одно, а не другое.
Получение значение признаков.
Для получения значения признаков существуют специальные ФМ HR_FEATURE_BACKFIELD для признаков с единичным возвратом и HR_FEATURE_BACKTABLE для признаков с табличным результатом.
Пример кода для нашего признака.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
DATA ls_p0001 TYPE p0001. "Структура с полями DATA lv_res type text20. ls_p0001-werks = 'GB01'. ls_p0001-persg = '2'. CALL FUNCTION 'HR_FEATURE_BACKFIELD' EXPORTING feature = 'ZTEST' struc_content = ls_p0001 * KIND_OF_ERROR = IMPORTING BACK = lv_res * CHANGING * STATUS = EXCEPTIONS DUMMY = 1 ERROR_OPERATION = 2 NO_BACKVALUE = 3 FEATURE_NOT_GENERATED = 4 INVALID_SIGN_IN_FUNID = 5 FIELD_IN_REPORT_TAB_IN_PE03 = 6 OTHERS = 7 . IF sy-subrc <> 0. * Implement suitable error handling here ENDIF. |