Аргументы пользовательской функции

Оценить
(0 голоса)

Первое, что придется сделать при создании пользовательской функции (в отличие от формулы) — это разобраться с аргументами. Аргумент — это параметр, создаваемый внутри функции для принятия значения от формулы, которая ее вызывает. Функция затем использует это значение (возможно вместе с другими, также предоставленными аргументами) для того, чтобы выполнить те или иные вычислительные или логические операции и возвратить результат вызвавшей ее формуле.

Если говорить о встроенных функциях Crystal Reports, то большинство из них при использовании в формулах требует предоставления аргументов. Например, если вы применяете функцию ToText для преобразования чисел, дат или любых других нестроковых данных в строковые, то должны указать, по меньшей мере, один аргумент — нестроковое значение, которое требуется преобразовать. А функция Left, которая возвращает заданное количество символов из левой части строки, требует, чтобы вы предоставили два аргумента — строку, из которой необходимо извлечь подмножество символов, и количество извлекаемых символов. Когда речь идет о встроенных функциях, предоставляемые аргументы должны соответствовать определенным типам данных. Например, в случае функции ToText с одним аргументом предоставляемый аргумент должен быть строковым, а в случае функции Left первый аргумент должен быть строковым, а второй — числовым.

Ограничения при присваивании имен пользовательским функциям

При выборе имен для пользовательских функций вы более ограничены, чем при выборе имен для формул. Поскольку пользовательские функции будут отображаться в дереве функций редактора Formula Editor вместе со всеми остальными встроенными функциями, для их имен существуют следующие ограничения:

•    Имена пользовательских функций должны начинаться с буквы — имя пользовательской функции не может начинаться с цифры. Кроме того, имена пользовательских функций могут содержать только буквы, цифры и символы подчеркивания; другие специальные знаки (такие, например, как % или #) в них включать не допускается.

•    Имена пользовательских функций не могут содержать пробелы — для разделения слов разрешается использовать только символ подчеркивания. Зато в именах пользовательских функций можно использовать буквы как верхнего, так и нижнего регистра, что тоже может пригодиться при создании имен, состоящих из нескольких слов.

•    Нельзя использовать имя существующей встроенной функции Crystal Reports. Например, при попытке создать пользовательскую функцию с именем ToText или Left вы получите сообщение об ошибке.

•    Вы, должно быть, заметили, что имена пользовательских функций, поддерживаемых Business Objects, содержат двухбуквенный префикс cd. И хотя в добавлении собственного префикса особой необходимости нет, он может оказаться удобным способом идентификации конкретных групп пользовательских функций. Префиксы в названиях пользовательских функций могут также помочь избежать конфликтов имен с другими пользовательскими функциями, хранящимися в репозитории, равно как и с именами встроенных функций.

Создавая пользовательскую функцию (как путем извлечения логики из существующей формулы, так и разрабатывая функцию с нуля), обязательно следует продумать, будет ли эта функция принимать аргументы от вызывающей ее формулы, сколько аргументов потребуется функции, какие типы данных должны будут иметь эти аргументы, а также то, указывать для аргументов значения по умолчанию или нет.

Когда пользовательская функция извлекается из формулы, подобно функции, показанной на рис. 6.2, количество и типы аргументов в ней автоматически определяются числом включенных в исходную формулу уникальных полей базы данных. В примере, показанном на рис. 6.2, исходная формула, на базе которой создается пользовательская функция, содержит два поля базы данных — {Order.Orded Amount} и {Customer. Last Year's Sales}. Когда пользовательская функция извлекается из этой формулы, поля базы данных удаляются из функции и заменяются двумя аргументами типа currency (это тип данных исходных полей из базы данных).

Аргументы, идентифицируемые в процессе извлечения, появляются в списке Arguments (Аргументы) диалогового окна Extract Custom Function From Formula. Здесь будут отображаться исходные поля базы данных, которые замещаются аргументами, тип данных аргумента (оба эти столбца предназначены только для справки, и вносить в них изменения нельзя), имя аргумента в пользовательской функции и описание этого аргумента. По умолчанию процесс извлечения пронумерует аргументы по порядку, начиная с 1, и поставит перед номерами символ v.

Желая оставить применяемую по умолчанию v-нумерацию аргументов, вы можете проигнорировать этот раздел диалогового окна Extract Custom Function from Formula. Однако знайте, что в таком случае функция, показанная на рис. 6.2, появилась бы в дереве функции редактора Formula Editor в Следующем виде:

CurrentYearDiscount(vl, v2)

Наверняка вы захотите, чтобы аргументы пользовательской функции имели более осмысленные имена, например, не vl, a OrderAmount (Объем заказа), и не v2, а PreviousSaleAmount (Объем продаж за предыдущий период). Для этого просто переименуйте vl и v2 в диалоговом окне Extract Custom Function from Formula. Также здесь вы, по желанию, можете добавить к каждому аргументу описание, которое будет отображаться в окне эксперта Formula Expert (см. главу 5).

 

Кнопка Enter More Info
Создание пользовательской функции с нуля
Редактор Custom Function Editor
Выбор и требования синтаксиса
Применение пользовательских функций в формулах

Добавить комментарий


Защитный код
Обновить