<< Click to Display Table of Contents >> Функции |
В системе доступно создание функций в редакторах модулей и типов сущностей.
Функции модуля создаются, когда предполагается, что одна и та же логика будет выполняться в нескольких типах сущностей или отчетах модуля.
Функции типов сущностей создаются, когда предполагается, что они будут вызываться в разных местах программного кода. Например, в других функциях этого же типа сущности или событиях.
Функции делятся на клиентские, серверные, разделяемые. Также есть функции инициализации и функции вычисляемых выражений. Серверные и разделяемые функции модулей можно сделать интеграционными.
Выполняются в клиентском приложении. Используются для обращения к пользовательскому интерфейсу, вывода диалогов и сообщений.
Функции можно выбирать при настройке действий в обложках модулей. Чтобы в редакторе обложек отображалось локализованное значение имени и описания действия, создайте клиентскую функцию с атрибутом LocalizeFunction.
Примечание. Для настройки действий в обложке модуля проводника доступны клиентские функции с типом возвращаемого значения void, List<IEntity>, IQuieryable<IEntity>.
Пример. Клиентская функция модуля Company
/// <summary>
/// Показать настройки видимости организационной структуры.
/// </summary>
public virtual void ShowVisibilitySettings()
{
if (!VisibilitySettings.AccessRights.CanUpdate())
{
Dialogs.ShowMessage(Resources.VisibilitySettingsNotAvailable);
return;
}
Functions.Module.Remote.GetVisibilitySettings().Show();
}
Выполняются на сервере. Используются для получения, создания и удаления сущностей. В качестве параметров и типа возвращаемого значения для серверных функций используются только:
•простые типы:
short, short? |
Guid, Guid? |
double, double? |
---|---|---|
int, int? |
bool, bool? |
Uri |
long, long? |
decimal, decimal? |
string |
char, char? |
DateTime, DateTime? |
|
•типы сущностей. Например, IEmployee, ICompany, IContract;
•список List. Содержит простые типы или сущности. Например, List<int>, List<ICompany>. Используется, если функция возвращает небольшой список;
•параметризованный тип IQueryable (запрос на получение данных). Содержит только сущности. Например, IQueryable<IContractualDocument>. Используется при работе с большими объемами данных. В этом случае данные с сервера подгружаются порциями. Функция вызывается при загрузке каждой порции. Это позволяет работать с данными без ожидания полной загрузки с сервера.
важно. В серверных функциях не рекомендуется выполнять длительные расчеты. Также не рекомендуется часто вызывать серверные функции из клиентского приложения.
Пример 1. Действие CreateProjectDocument в справочнике ProjectCore
// Клиентский код, вызывающий серверную функцию.
public virtual void CreateProjectDocument(Sungero.Domain.Client.ExecuteActionArgs e)
{
var document = Functions.ProjectCore.Remote.CreateProjectDocument(_obj);
document.Show();
}
Пример 2. Серверная функция справочника ProjectCore
/// <summary>
/// Создать документ по проекту.
/// </summary>
/// <returns>Документ.</returns>
[Remote]
public IOfficialDocument CreateProjectDocument()
{
var document = ProjectDocuments.Create();
document.Project = _obj;
return document;
}
Выполняются как на сервере, так и в клиентском приложении. Могут использоваться, например, для изменения доступности, обязательности и видимости свойств в зависимости от значения другого свойства. Вызываются в событиях «Изменение значения свойства» и «Обновление формы».
Пример 1. Разделяемая функция справочника DocumentRegister (Журналы регистрации)
/// <summary>
/// Установить обязательность свойств в зависимости от заполненных данных.
/// </summary>
public virtual void SetRequiredProperties()
{
_obj.State.Properties.RegistrationGroup.IsRequired =
_obj.Info.Properties.RegistrationGroup.IsRequired ||
_obj.RegisterType == RegisterType.Registration;
}
В примере свойство Группа регистрации должно быть обязательным для заполнения, если установлен признак обязательности свойства или если в свойстве Тип журнала указано значение «Регистрация». Данные вычисления должны сработать при изменении свойства Тип журнала, а также при обновлении формы, например, чтобы при отмене изменений корректно отрабатывалась смена доступности, обязательности и видимости свойств.
Пример 2. Событие «Изменение значение свойства» свойства RegisterType (Тип журнала) справочника DocumentRegister
public virtual void RegisterTypeChanged(Sungero.Domain.Shared.EnumerationPropertyChangedEventArgs e)
{
. . .
Functions.DocumentRegister.SetRequiredProperties(_obj);
}
Пример 3. Событие «Обновление формы» справочника DocumentRegister
public override void Refresh(Sungero.Presentation.FormRefreshEventArgs e)
{
Functions.DocumentRegister.SetRequiredProperties(_obj);
. . .
}
Функции инициализации выполняются на сервере. Создаются только в редакторах модулей. Используются для заполнения справочников значениями по умолчанию, создания сущностей, для которых в редакторе типа сущности установлен флажок Создавать только программно, выдачи пользователям прав доступа на вычисляемые папки модуля, создания предопределенных групп пользователей и ролей и т.д.
Функции используются для преобразования данных при настройке вычисляемых выражений. Например, можно создать функцию, которая укажет ФИО сотрудника в винительном падеже или текущую дату сдвинет на заданное количество рабочих дней. Подробнее см. раздел «Создание функций вычисляемых выражений».
© Компания Directum, 2024 |