<< Click to Display Table of Contents >> Разработка > Программный код > Функции Создание функций типов сущностей |
Предположим, что для входящего письма необходимо искать дубли документов и показывать их в списке. Для выполнения задачи необходимо:
•создать серверную функцию, которая будет искать дубли документа;
•в обработчике действия вызвать серверную функцию.
Для этого:
1.Откройте узел «Документ» в редакторе типа сущности «Входящее письмо».
2.В группе «Функции» перейдите по ссылке Добавить рядом с серверной функцией.
3.В открывшемся редакторе доработайте имя функции, добавьте комментарий с описанием и напишите ее код. При необходимости добавьте тип возвращаемого значения, входные параметры, атрибуты и модификаторы функции.
/// <summary>
/// Серверная функция для получения дублей входящего письма.
/// </summary>
/// <param name="letter">Письмо для проверки.</param>
/// <param name="documentKind">Вид письма.</param>
/// <param name="businessUnit">Наша организация.</param>
/// <param name="inNumber">Номер входящего документа.</param>
/// <param name="dated">Дата письма.</param>
/// <param name="correspondent">Корреспондент.</param>
/// <returns>Письма, дублирующие текущее.</returns>
[Remote(IsPure = true)]
public static IQueryable<IIncomingLetter> GetDuplicate(IIncomingLetter letter, Sungero.Docflow.IDocumentKind documentKind, Company.IBusinessUnit businessUnit, string inNumber,DateTime? dated, Parties.ICounterparty correspondent)
{
return IncomingLetters.GetAll()
.Where(l => documentKind == l.DocumentKind)
.Where(l => dated.HasValue && dated == l.Dated)
.Where(l => businessUnit != null && businessUnit == l.BusinessUnit)
.Where(l => inNumber != null && inNumber == l.InNumber)
.Where(l => correspondent != null && correspondent == l.Correspondent)
.Where(l => !Equals(letter, l));
}
4.Сохраните изменения.
5.Перейдите в узел «Действия» и выберите действие ShowDuplicates.
6.Для действия добавьте обработчик события Выполнение. Для этого в группе «Обработчики» установите флажок и перейдите по ссылке Выполнение.
7.В открывшемся редакторе добавьте комментарий с описанием и вызов серверной функции. В формат вызова перед именем функции добавьте атрибут Remote.
/// <summary>
/// Клиентская функция для формирования списка дублей входящего письма.
/// </summary>
public virtual void ShowDuplicates(Sungero.Domain.Client.ExecuteActionArgs e)
{
var duplicates = Functions.IncomingLetter.Remote.GetDuplicate(_obj, _obj.DocumentKind, _obj.BusinessUnit, _obj.InNumber, _obj.Dated, _obj.Correspondent);
if (duplicates.Any())
duplicates.Show();
else
Dialogs.NotifyMessage(IncomingLetters.Resources.DuplicateNotFound);
}
8.Сохраните изменения.
Формат вызова функций
Функции вызываются по формату Functions.<Имя типа сущности>.<Имя функции>(<параметры>). В формат вызова могут добавляться атрибуты:
•Remote, если в клиентском коде вызывается серверная функция. Формат вызова: Functions.<Имя типа сущности>.Remote.<Имя функции>(<Параметры>);
•Public, если функция вызывается в функции другого модуля. Формат вызова: PublicFunctions.<Имя типа сущности>.<Имя функции>(<Параметры>).
Формат вызова можно сократить, если функция вызывается:
•из другого типа сущности. Functions можно не указывать;
•из того же типа сущности, в котором она создана. Functions.<Имя типа сущности> можно не указывать.
© Компания Directum, 2024 |