*FUNCTION / *ENDFUNCTION
Определяемая пользователем функция представляет собой имя метки-заполнителя, которую можно вставлять в формулы вместо соответствующего оператора MDX или его части. Это позволяет существенно повысить удобочитаемость операторов логики.
Определения логических функций можно вставлять в любое место файла логики или во включенный файл. Они имеют следующий синтаксис.
Для функций с одной строкой
*FUNCTION {functionname}({Param1}[,{Param2}…]) = {Function Text}
Для функций с несколькими строками
*FUNCTION {functionname}({Param1}[,{Param2}…])
{Function text}
{Function text}
*ENDFUNCTION
В файле логики скрипта можно определить неограниченное количество функций.
Для динамического изменения соответствующей строки MDX можно передавать в функцию неограниченное число параметров.
В настоящее время функции не могут быть вложенными, то есть функция не может содержать другую функцию.
Положение функций в файле логики не имеет значения, если только не переопределяется одна и та же функция. В этом случае новое определение функции применимо только с места переопределения.
Значения переданных параметров заменяются в тексте функции без проверки, даже если они встроены в более длинные слова.
Следует внимательно относиться к определению имен параметров, чтобы не возникали конфликты с зарезервированными словами MDX и окружающим их текстом в логике. Лучше всего окружать имена параметров разделителями, как в следующем примере:
*FUNCTION Price(%COST%,%HOUR%)
%COST%/%HOUR%
*ENDFUNCTION[#CE0661000] = Price([CE0004000],[CE0652000])
В этом примере вычисляется цена. Нет необходимости проверять, не имеет ли знаменатель нулевое значение, во избежание ошибки деления на нуль. Подсистема логики скрипта автоматически заменяет ошибку деления на нуль нулем.
Чтобы сделать скрипты более удобочитаемыми, для замены элементов или измерений также можно использовать *FUNCTION.
*FUNCTION PERSONAL_COST = CE0004000
*FUNCTION LAB_HOUR = CE0652000
*FUNCTION PER_PRICE = CE0661000
*FUNCTION ACCOUNT = P_ACCT
Price(%COST%,%HOUR%)
%COST%/%HOUR%
*ENDFUNCTION
[ACCOUNT].[#PER_PRICE] = Price([ACCOUNT].[PERSONAL_COST],[ACCOUNT].[LAB_HOUR])
В именах логических функций недопустимы следующие символы, а также символ пробела:
+ - / * ^ % > < = ( ) [ ] { } , . ; ' : & \ | # ~ "
Любое кодирование программного обеспечения и/или строки текста программы ("Код"), включенные в эту документацию, являются только примерами и не предназначены для использования в среде продуктивной системы. Код предназначен лишь для лучшего объяснения и наглядного представления синтаксиса и правил построения выражений в определенном кодировании. SAP не гарантирует правильность и полноту приведенного здесь Кода. SAP не будет нести ответственность за ошибки и ущерб, возникшие по причине использования этого Кода, за исключением случаев, если такой ущерб нанесен со стороны SAP намеренно или по грубой неосторожности.