<< Click to Display Table of Contents >> Разработка > Примеры разработки > Документы Как подготовить новый тип документа к работе |
Ситуация
В модуле компании (МyCompany) создан новый тип документа «Информационно-справочные документы» (InfoDocument) на основе типа «Внутренний документ» (Sungero.Docflow.InternalDocumentBase). Необходимо, чтобы в Directum RX сотрудники могли создавать документы нового типа, выбирать его виды, а также регистрировать эти документы.
Решение
Чтобы сотрудники могли работать с документами нового типа, в инициализации модуля необходимо программно добавить новый тип документа в справочник Типы документов. Затем создать виды документов для этого типа, выдать права на создание документов всем сотрудникам и запустить инициализацию модулей:
1.В редакторе своего решения добавьте зависимость от модуля «Документооборот» (Sungero.Docflow). Это необходимо, так как для работы с новыми типами и видами документов используются функции модуля Docflow.
2.Добавьте новый тип документа InfoDocument в справочник Типы документов (Sungero.Docflow.DocumentType). Добавить новый тип в справочник можно только программно с помощью функций инициализации. Для этого в редакторе модуля компании (MyCompany) в группе «Функции» перейдите по ссылке Добавить рядом с функциями инициализации. В открывшемся редакторе измените имя функции Function1() на CreateDocumentTypes() и вызовите в ней базовую функцию CreateDocumentType() модуля Sungero.Docflow:
/// <summary>
/// Создание типа документа "Информационно-справочные документы"
/// в служебном справочнике "Типы документов".
/// </summary>
public static void CreateDocumentTypes()
{
Sungero.Docflow.PublicInitializationFunctions.Module.CreateDocumentType("Информационно-справочные документы", InfoDocument.ClassTypeGuid, Sungero.Docflow.DocumentType.DocumentFlow.Inner, true);
}
3.Создайте новые виды документов для типа «Информационно-справочные документы». Для этого в редакторе модуля создайте константы, в которых будут храниться уникальные идентификаторы для каждого вида документа. В дальнейшем константы используются в функции CreateDocumentKind(). Значение констант сгенерируйте случайным образом. Они должны быть уникальными:
// Уникальный идентификатор для вида «Объяснительная записка».
[Public]
public static readonly Guid ExplanLettersKind = Guid.Parse("40af4030-eb63-40c3-afef-7fcd26eeceb0");
// Уникальный идентификатор для вида «Заявление».
[Public]
public static readonly Guid StatementsKind = Guid.Parse("dde67eb5-3f84-4293-aaa0-76b33de60bc4");
4.Создайте функцию инициализации CreateDocumentKinds() и вызовите в ней базовую функцию CreateDocumentKind() модуля Sungero.Docflow. В коде базовой функции для каждого вида документа укажите свойство NumberingType.Registrable, чтобы документы этих видов были доступны для регистрации:
/// <summary>
/// Создание видов для информационно-справочных документов.
/// </summary>
public static void CreateDocumentKinds()
{
// Создание вида документа «Объяснительная записка».
// Чтобы документы можно было регистрировать, задается свойство Registrable.
// В качестве ИД вида документа используется константа ExplanLettersKind.
Sungero.Docflow.PublicInitializationFunctions.Module.CreateDocumentKind("Объяснительная записка", "Объяснительная записка",
Sungero.Docflow.DocumentKind.NumberingType.Registrable,
Sungero.Docflow.DocumentType.DocumentFlow.Inner, true, false,
InfoDocument.ClassTypeGuid,
new Sungero.Domain.Shared.IActionInfo[] { Sungero.Docflow.OfficialDocuments.Info.Actions.SendForApproval },
Constants.Module.ExplanLettersKind);
// Создание вида документа «Заявление».
// Чтобы документы можно было регистрировать, задается свойство Registrable.
// В качестве ИД вида документа используется константа StatementsKind.
Sungero.Docflow.PublicInitializationFunctions.Module.CreateDocumentKind("Заявление", "Заявление",
Sungero.Docflow.DocumentKind.NumberingType.Registrable,
Sungero.Docflow.DocumentType.DocumentFlow.Inner,
true, false, InfoDocument.ClassTypeGuid,
new Sungero.Domain.Shared.IActionInfo[] { Sungero.Docflow.OfficialDocuments.Info.Actions.SendForApproval },
Constants.Module.StatementsKind);
}
5.Выдайте всем сотрудникам компании права на создание документов нового типа «Информационно-справочные документы». Для этого в редакторе модуля создайте еще одну функцию инициализации GrantCreateRightsOnInfoDocument():
/// <summary>
/// Выдача прав на создание информационно-справочных документов.
/// </summary>
public static void GrantCreateRightsOnInfoDocument()
{
var allUsers = Roles.AllUsers;
MyCompany.InfoDocuments.AccessRights.Grant(allUsers, DefaultAccessRightsTypes.Create);
}
6.В группе «События» перейдите по ссылке Инициализация. В обработчике события Initializing() вызовите все добавленные ранее функции:
public override void Initializing(Sungero.Domain.ModuleInitializingEventArgs e)
{
CreateDocumentTypes();
CreateDocumentKinds();
GrantCreateRightsOnInfoDocument();
}
7.Запустите сборку решений, чтобы проверить ошибки в коде.
8.Сохраните изменения и опубликуйте разработку.
9.Запустите инициализацию модуля:
В результате новый тип документа станет доступен всем пользователям для создания:
В карточке документа станет доступен выбор нужных видов информационно-справочных документов и действие для регистрации:
© Компания Directum, 2024 |