Пользовательские функции
Пользовательская функция — это блок пользовательского кода в файле процедуры, который возвращает значение. Это похоже на внутреннюю процедуру, но с требованием, чтобы она возвращала значение. Пользовательская функция также может определять параметры, которые используются как входные, выходные или и те, и другие.
Прежде чем вы сможете использовать определяемую пользователем функцию в своём коде, вы должны определить её. Определение должно предшествовать коду, в котором оно используется. Упрощённый синтаксис:
FUNCTION function-name RETURNS type [ ( parameter-list ) ] : /* ABL code */ RETURN return-value. END FUNCTION.
function-name
Имя функции.
type
Тип возвращаемого значения.
parameter-list
Параметры являются необязательными. Допустимая спецификация параметров включает использование параметра (INPUT, OUTPUT, INPUT-OUTPUT), его имя и тип.
return-value
Возвращаемое значение функции. Значение должно соответствовать типу, указанному в type.
В следующем примере кода мы определяем две функции OrderPrefix() и GeneratePO(). Функция, OrderPrefix() не принимает параметров и возвращает префикс для заказа на поставку (PO) как тип CHARACTER. Функция GeneratePO()имеет два параметра и строит номер заказа на покупку, используя эти параметры.
/* eCustomFunctions.p */ FUNCTION OrderPrefix RETURNS CHARACTER(): RETURN "PO". END FUNCTION. FUNCTION GeneratePO RETURNS CHARACTER (INPUT pcString AS CHARACTER, INPUT-OUTPUT piNumber AS INTEGER): VAR CHAR cResult. cResult = pcString + STRING(100 * piNumber). piNumber = piNumber + 1. RETURN cResult. END FUNCTION. DEFINE VARIABLE iNum AS INTEGER NO-UNDO INITIAL 999. /* main procedure code */ MESSAGE "Purchase Order number is:" GeneratePO(OrderPrefix(),INPUT-OUTPUT iNum) SKIP "New iNum is: " iNum VIEW-AS ALERT-BOX.
Вы можете передать функцию в качестве параметра другой функции. В примере кода вы видите, что функция OrderPrefix() передаётся в качестве первого параметра функции GeneratePO(). Выполнение кода приводит к следующему выводу:
Purchase Order number is: PO99900 New iNum is: 1000
