Выбор и требования синтаксиса

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

При создании пользовательской функции, так же как при создании формулы для отчета, вы можете выбрать любой из двух доступных языков (или синтаксисов) формул Crystal Reports. Сделайте это, воспользовавшись выпадающим списком в правой части панели инструментов редактора Custom Function Editor. Дерево функций и дерево операций изменятся в соответствии с выбранным синтаксисом. В тексте формулы, автоматически добавленном Crystal Reports, также будут внесены соответствующие изменения.

Основной предпосылкой для создания пользовательской функции непосредственно в редакторе Custom Function Editor является разработка формулы, способной принимать любые необходимые значения, передаваемые в аргументы функции из вызывающей ее формулы, вычислять значения, производить расчеты, выполнять проверки If-Then- Else и так далее в рамках пользовательской функции, и возвращать значение в вызывающую формулу Если вам уже доводилось создавать функции на каком-нибудь языке программирования, типа Visual Basic, тогда для вас этот процесс будет достаточно простым. Если программировать на каком-то языке раньше не приходилось, тогда освоение процесса создания пользовательской функции у вас займет какое-то время. Но если вы, хотя бы в общем, знакомы с формулами Crystal Reports, то достаточно быстро сможете применить свои знания и опыт для создания пользовательских функций.

Ниже приводится пример пользовательской функции в синтаксисе Basic, которая возвращает полное название отдела компании на основании его сокращенной версии, передаваемой в качестве аргумента:

Function SpellDepartment (Abbreviation As String) As String Select Case Abbreviation Case "HR"

SpellDepartment = "Human Resources"

Case "IT"

SpellDepartment = "Information Technology"

Case "EXEC"

SpellDepartment = "Executive"

Case "ENG"

SpellDepartment = "Engineering"

Case Else

SpellDepartment = Abbreviation

End Function

Базовая компоновка функции в синтаксисе Basic выглядит следующим образом: код формулы размещается внутри блока Function и End Function. Оператор Function объявляет имя функции (то же имя, которое было указано при создании функции), список всех аргументов и типов данных, которые функция должна принимать (в данном случае это строковый аргумент Abbreviation) и тип данных, который функция будет возвращать вызывающей формуле (часть As, отвечающая за тип данных, является необязательной; если ее не включить, тип данных, возвращаемый функцией, будет соответствовать типу данных, который вы назначите позже имени функции внутри функции).

Последний оператор внутри блока Function — End Function, присваивающий значение имени функции, — определяет, что именно функция возвратит в вызывающую формулу. В данном случае функция использует конструкцию Select Case (из категории Control Structures (Управляющие структуры) дерева операций) для выполнения проверки на совпадение с одним из различных возможных значений аргумента Abbreviation, присваивая имени функции строковый литерал на основании значения аргумента.

Вот как эта же функция выглядит в синтаксисе Crystal (кстати, на рис. 6.5 показан именно этот вариант):

Function (StringVar Abbreviation)

Select Abbreviation Case "HR";

"Human Resources"

Case "IT";

"Information Technology"

Case "EXEC";

"Executive"

Case "ENG";

"Engineering"

Default;

Abbreviation

В данном случае блока Function - End Function нет; здесь таким “блоком” считается весь включенный в функцию текст. Аргумент, передаваемый в функцию, заключен в скобки, идущие сразу же после ключевого слова Function; перед самим аргументом указан присваиваемый ему тип данных (для объявления типов данных используются те же самые ключевые слова, что и для объявления переменных; посмотреть, как они правильно пишутся, можно, развернув в дереве операций категорию Variable Declarations (Объявления переменных)). Так же как и в примере с синтаксисом Basic, последний оператор вычисляемой функции определяет, что функция возвратит в вызывающую ее формулу. В данном примере оператор Case, просматривающий значения на наличие совпадений со значением, переданным в аргументе, возвратит в вызывающую формулу строковое значение.

Выбор и требования синтаксиса

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

Function (DateVar, BDate, Optional DateVar, EDate := CurrentDate)

Совет. Ответы на остальные вопросы, касающиеся использования синтаксисов Crystal и Basic при создании пользовательских переменных (например, как объявляются сложные типы данных в аргументах или каковы синтаксические различия между пользовательскими функциями и формулами в отчетах), можно найти в следующих разделах оперативной справочной системы Crystal Reports: Basic Syntax^ Custom Functions (Синтаксис Basics Пользовательские функции) и Crystal Syntax^ Custom Functions (Синтаксис Crystal^ Пользовательские функции).

Внесение изменений в существующие пользовательские функции

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

Если пользовательская функция была добавлена только в один отчет, вы можете внести в нее изменения точно таким же образом, как бы это делали для формулы, то есть просто выбрав ее в окне Formula Workshop и изменив сам текст функции в окне редактора Custom Function Editor. После сохранения эти изменения немедленно проявятся во всех формулах, которые используют эту функцию.

На заметку! Даже если изначально вы могли извлечь пользовательскую функцию из формулы, используя диалоговое окно, вносить в нее изменения вам все равно придется в окне редактора Custom Function Editor. После того как пользовательская функция будет сохранена (даже если она извлекалась из формулы), редактировать ее разрешается только в окне редактора Custom Function Editor.

Если пользовательская функция была добавлена в отчет из репозитория, при ее выборе в древовидном списке в окне Formula Workshop область с текстом формулы в окне редакторе Custom Function Editor будет недоступной для редактирования. Причина этого состоит в том, что пользовательская функция не была предварительно отсоединена от репозитория. Для того чтобы вносить изменения в содержимое хранящейся в репозитории функции, ее сначала необходимо отсоединить от репозитория — это чем-то напоминает “исключение” функции из репозитория.

Для отсоединения пользовательской функции от репозитория в древовидном списке Formula Workshop щелкните правой кнопкой мыши на функции, которую хотите отредактировать (это должна быть функция из категории Report Custom Functions — отсоединять или редактировать пользовательскую функцию, которая не была предварительно добавлена в отчет, нельзя). В появившемся контекстном меню выберите пункт Disconnect from Repository (Отсоединить от репозитория). Вы заметите два изменения: во-первых, пользовательская функция станет доступной для редактирования в редакторе Custom Function Editor и, во-вторых, в дереве Formula Workshop исчезнет значок рядом с именем данной пользовательской функции, обозначающий подсоединенное состояние (рис. 6.7).

Редактировать можно не только текст формулы существующей пользовательской функции, но также ее описание, автора, категорию и другие отличные от формульных параметры, которые были заданы во время создания функции. Когда функция, которую вы хотите отредактировать, появится в окне редактора Custom Function Editor, щелкните на кнопке Toggle Property Display (Переключить отображение свойств), которая находится в панели инструментов Formula Workshop, или щелкните правой кнопкой мыши на имени функции в дереве Formula Workshop и выберите пункт Toggle Property Display в появившемся контекстном меню. На месте окна редактора Custom Function Editor появится диалоговое окно, отображающее все остальные свойства, которые могут быть установлены для данной функции. Внесите здесь все необходимые изменения и щелкните на той же самой кнопке панели инструментов или выберите тот же самый пункт в контекстном меню, чтобы вернуться обратно в окно редактора Custom Function Editor.

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

Совместное использование пользовательских функций

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

Выбор и требования синтаксиса

Это достигается путем сохранения пользовательской функции или функций в репозитории. Кроме того, после отсоединения пользовательской функции от репозитория для внесения изменений практически всегда необходимо сохранить измененную функцию обратно в репозитории. Действия, которые требуется выполнить, чтобы добавить в репозиторий новую функцию или обновить отсоединенную от репозитория функцию, практически одинаковы. На самом деле существует три различных способа сделать это:

•    В древовидном списке Formula Workshop щелкните правой кнопкой мыши на Ш пользовательской функции, которую хотите добавить в репозиторий. В появившемся контекстном меню выберите пункт Add to Repository (Добавить в репозиторий). Если вы еще не подключились к системе BusinessObjects Enterprise XI/Crystal Reports Server XI, на экране появится окно с приглашением сделать это. Если функция уже существует (то есть она была просто отсоединена от репозитория ранее), на экране появится окно с приглашением подтвердить намерение перезаписать существующую в репозитории функцию.

•    В древовидном списке Formula Workshop выделите пользовательскую функцию, которую хотите добавить в репозиторий. Щелкните на кнопке Add То Repository, которая находится в панели инструментов Formula Workshop. При необходимости на экране появится окно с приглашением подключиться к системе BusinessObjects Enterprise/Crystal Reports Server. Если функция уже существует (то есть она была просто отсоединена от репозитория ранее), на экране появится окно с приглашением подтвердить намерение перезаписать существующую в репозитории функцию.

•    Просто перетащите пользовательскую функцию, которую хотите добавить в репозиторий, из категории Report Custom Functions древовидного списка Formula Workshop в категорию Repository Custom Functions (Пользовательские функции репозитория). Это действие автоматически добавит функцию в выбранный репозиторий. При необходимости вам будет предложено подключиться к системе BusinessObjects Enterprise/Crystal Reports Server. Если функция уже существует (то есть она была просто отсоединена от репозитория ранее), на экране появится окно с приглашением подтвердить намерение перезаписать существующую в репозитории функцию.

Внимание! Может случиться и так, что вам не удастся добавить пользовательскую функцию в репозиторий — будь-mo хоть новая пользовательская функция, которую вы создали сами, или пользовательская функция, которую вы отсоединили от репозитория для редактирования. В зависимости от того, к какой системе BusinessObjects Enterprise/Crystal Reports Server вы подключены, а также от того, какими правами вы обладаете, вам может быть не разрешено добавлять и изменять пользовательские функции. Если вы получите сообщение об ошибке при попытке добавить пользовательскую функцию в репозиторий, свяжитесь с администратором вашей системы и поинтересуйтесь, имеете ли вы права на внесение изменений в репозиторий.

 

Применение пользовательских функций в формулах
Повышение визуальной привлекательности отчетов
Общее форматирование
Панель инструментов форматирования
Редактор Format Editor

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


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