<< Click to Display Table of Contents >> Разработка > Примеры разработки > Документы Как настроить склонение имени в шаблонах документов |
Ситуация
В Directum RX сотрудники работают с шаблонами документов с автозаполняемыми полями. При создании документа из такого шаблона часть содержимого автоматически заполняется данными из системы. В том числе в документ подставляются фамилии, имена и отчества в необходимых падежах. Например, в «шапке» заявления – Александрову Александру Александровичу от Петрова Петра Петровича.
Возникают ситуации, когда у сотрудника есть только имя и фамилия. В этом случае стандартный механизм склонения, который использует библиотеку Visis с определением рода по отчеству, не работает. Тогда нужно программно настраивать склонение имени в шаблоне документа.
Решение
1.В своем решении перекройте тип шаблона документа. В качестве базового типа выберите «Шаблон документа» (Sungero.Docflow.DocumentTemplate).
2.В редакторе решения добавьте зависимость от модуля Sungero.Docflow.
3.Добавьте ресурс для каждого из падежей имени и фамилии в шаблоне документа. Для этого в дереве решений в контекстном меню перекрытого шаблона документа выберите пункт Открыть ресурсы. Далее в контекстном меню табличной части выберите пункт Добавить строку. Заполните поля, как на картинке:
4.Чтобы просклонять имя и фамилию в родительном падеже, в шаблоне документа добавьте серверную функцию NameAndSurnameGenitiveCase() с атрибутом Converter и привязкой к добавленному ресурсу:
// Получить имя и фамилию в родительном падеже.
// <param name="employee">Сотрудник.</param>
// <returns>Имя и фамилия в родительном падеже.</returns>
[Converter("NameAndSurnameGenitiveCase")]
public static string NameAndSurnameGenitiveCase(Sungero.Company.IEmployee employee)
{
// Задать персону и род.
var person = employee.Person;
var gender = CaseConverter.DefineGender(person.MiddleName);
// Если отчество персоны не заполнено, определить род персоны
// и получить персональные данные в родительном падеже.
if (string.IsNullOrEmpty(person.MiddleName))
{
if (person.Sex == Sungero.Parties.Person.Sex.Male)
gender = Gender.Masculine;
if (person.Sex == Sungero.Parties.Person.Sex.Female)
gender = Gender.Feminine;
}
return CaseConverter.ConvertPersonFullNameToTargetDeclension(person.LastName, person.FirstName, person.MiddleName, DeclensionCase.Genitive, gender);
}
5.Чтобы просклонять имя и фамилию в дательном падеже, также добавьте серверную функцию NameAndSurnameDativeCase() с атрибутом Converter и привязкой к добавленному ресурсу:
// Получить имя и фамилию в дательном падеже.
// <param name="employee">Сотрудник.</param>
// <returns>Имя и фамилия в родительном падеже.</returns>
[Converter("NameAndSurnameDativeCase")]
public static string NameAndSurnameDativeCase(Sungero.Company.IEmployee employee)
{
// Задать персону и род.
var person = employee.Person;
var gender = CaseConverter.DefineGender(person.MiddleName);
// Если отчество персоны не заполнено, определить род персоны
// и получить персональные данные в дательном падеже.
if (string.IsNullOrEmpty(person.MiddleName))
{
if (person.Sex == Sungero.Parties.Person.Sex.Male)
gender = Gender.Masculine;
if (person.Sex == Sungero.Parties.Person.Sex.Female)
gender = Gender.Feminine;
}
return CaseConverter.ConvertPersonFullNameToTargetDeclension(person.LastName, person.FirstName, person.MiddleName, DeclensionCase.Dative, gender);
}
6.Напишите серверные «функции-конвертеры» для остальных падежей по аналогии с шагами 4 и 5.
7.Сохраните изменения и опубликуйте разработку.
В результате в Directum RX в шаблоне документа фамилия и имя сотрудника без отчества будут склоняться корректно.
© Компания Directum, 2024 |