<< Click to Display Table of Contents >> Разработка > Примеры разработки > Разработка модуля и типа документа Шаг 5. Инициализация модуля |
Чтобы пользователь смог работать с модулем, необходимо создать предопределенные данные. В данном случае необходимо:
•создать виды закупок по умолчанию
•создать виды документов для договоров закупки
•выдать права на создание договоров закупки и просмотр справочников
Для этого используйте функции инициализации.
Создание видов закупок по умолчанию
Чтобы создать записи в справочнике Виды закупок:
1.Откройте редактор модуля «Закупки».
2.В узле «Модуль», в группе «События» установите флажок рядом с событием Инициализация.
3.Добавьте функцию инициализации модуля «Закупки». Для этого в группе «Функции» перейдите по ссылке Добавить рядом с функциями инициализации. В открывшемся редакторе измените имя Function1() на CreateDefaultPurchaseKind() и напишите код создания вида закупки. Добавьте функцию CreateDefaultPurchaseKinds() и вызовите в ней ранее созданную функцию с необходимыми именами видов закупки. После этого вызовите созданную функцию CreateDefaultPurchaseKinds() в обработчике события Initializing():
/// <summary>
/// Обработчик события инициализации.
/// </summary>
public override void Initializing(Sungero.Domain.ModuleInitializingEventArgs e)
{
CreateDefaultPurchaseKinds();
}
/// <summary>
/// Создание видов закупок по умолчанию.
/// </summary>
public static void CreateDefaultPurchaseKinds()
{
InitializationLogger.Debug("Init: Create default purchase kinds.");
CreatePurchaseKind("Закупка у единственного поставщика");
CreatePurchaseKind("Закупка по прямому договору");
CreatePurchaseKind("Закупка по конкурентным переговорам");
}
/// <summary>
/// Создание вида закупки.
/// </summary>
/// <param name="name">Наименование вида закупки.</param>
public static void CreatePurchaseKind(string name)
{
// Функция выводит на экран создаваемый тип закупки.
InitializationLogger.DebugFormat("Init: Create purchase kind {0}", name);
var purchaseKind = PurchaseKinds.GetAll().Where(p => Equals(p.Name, name)).FirstOrDefault();
// Проверка, есть ли такой вид в системе.
if (purchaseKind == null)
{
purchaseKind = PurchaseKinds.Create();
purchaseKind.Name = name;
purchaseKind.Save();
}
}
При повторном запуске инициализации копии записей справочника не создадутся.
Создание видов документов для договора закупки
Для классификации документов в системе создаются виды документов. Для разработанного типа документа «Договор закупки» нужно создать три вида документа по умолчанию: договор закупки расходных материалов, договор закупки оборудования, договор прочих закупок.
Перед созданием видов договоров закупки необходимо создать тип документа «Договор закупки» в служебном справочнике «Типы документов». Запись справочника понадобится при создании видов документа. Запись в служебном справочнике можно создать только программно, поэтому необходимо использовать функции инициализации. Для этого:
1.В редакторе модуля «Закупки» перейдите по ссылке Добавить рядом с функциями инициализации. Измените имя Function1() на CreateDocumentTypes() и вызовите функцию CreateDocumentType() из модуля Sungero.Docflow базового решения Directum RX:
/// <summary>
/// Создание типа документа "Договор закупки" в служебном справочнике "Типы документов".
/// </summary>
public static void CreateDocumentTypes()
{
Sungero.Docflow.PublicInitializationFunctions.Module.CreateDocumentType("Договор закупки", PurchaseContract.ClassTypeGuid, Sungero.Docflow.DocumentType.DocumentFlow.Contracts, true);
}
Примечание. Так как в программном коде используется функция модуля Sungero.Docflow, добавьте данный модуль в список зависимостей вашего модуля. Если зависимости не указаны, то при публикации могут возникнуть ошибки.
2.В узле «Модуль», в группе «События» перейдите по ссылке Инициализация. В редакторе программного кода вызовите функцию CreateDocumentTypes() в обработчике события Initializing():
/// <summary>
/// Обработчик события инициализации.
/// </summary>
public override void Initializing(Sungero.Domain.ModuleInitializingEventArgs e)
{
CreateDefaultPurchaseKinds();
CreateDocumentTypes();
}
Чтобы создать виды документов для договора закупки:
1.Создайте константы в модуле «Закупки», они будут использоваться в функции CreateDocumentKind(). Значения констант сгенерируйте случайным образом. Они должны быть уникальными.
public static readonly Guid PurchaseOfConsumablesKind = Guid.Parse("2B45D377-62A8-4F5F-8710-0D55068F5FF6");
public static readonly Guid PurchaseOfEquipmentKind = Guid.Parse("0D307CCF-F948-4B0F-B2A8-A273BB130AE5");
public static readonly Guid OtherPurchaseKind = Guid.Parse("51630A97-B502-415F-BF0E-07DF3AE1C316");
2.Добавьте функцию инициализации модуля «Закупки» (CreateDocumentKinds()) и вызовите в ней функцию CreateDocumentKind() из модуля Sungero.Docflow базового решения Directum RX:
/// <summary>
/// Создание видов документов для договора закупки.
/// </summary>
public static void CreateDocumentKinds()
{
Sungero.Docflow.PublicInitializationFunctions.Module.CreateDocumentKind("Договор закупки расходных материалов", " Договор закупки расходных материалов",
Sungero.Docflow.DocumentKind.NumberingType.Registrable,
Sungero.Docflow.DocumentType.DocumentFlow.Contracts,
true, false, PurchaseContract.ClassTypeGuid,
new Sungero.Domain.Shared.IActionInfo[] { Sungero.Docflow.OfficialDocuments.Info.Actions.SendForApproval },
Constants.Module.PurchaseOfConsumablesKind);
Sungero.Docflow.PublicInitializationFunctions.Module.CreateDocumentKind("Договор закупки оборудования", "Договор закупки оборудования",
Sungero.Docflow.DocumentKind.NumberingType.Registrable,
Sungero.Docflow.DocumentType.DocumentFlow.Contracts,
true, false, PurchaseContract.ClassTypeGuid,
new Sungero.Domain.Shared.IActionInfo[] { Sungero.Docflow.OfficialDocuments.Info.Actions.SendForApproval },
Constants.Module.PurchaseOfEquipmentKind);
Sungero.Docflow.PublicInitializationFunctions.Module.CreateDocumentKind("Договор прочих закупок"," Договор прочих закупок",
Sungero.Docflow.DocumentKind.NumberingType.Registrable,
Sungero.Docflow.DocumentType.DocumentFlow.Contracts,
true, false, PurchaseContract.ClassTypeGuid,
new Sungero.Domain.Shared.IActionInfo[] { Sungero.Docflow.OfficialDocuments.Info.Actions.SendForApproval },
Constants.Module.OtherPurchaseKind);
InitializationLogger.Debug("Созданы виды документов для договоров закупки по умолчанию");
}
3.Вызовите добавленную функцию в обработчике события Initializing() модуля «Закупки»:
/// <summary>
/// Обработчик события инициализации.
/// </summary>
public override void Initializing(Sungero.Domain.ModuleInitializingEventArgs e)
{
CreateDefaultPurchaseKinds();
CreateDocumentTypes();
CreateDocumentKinds();
}
Важно. Вызывайте функции в том порядке, в котором они должны выполняться.
Выдача прав на создание договора и просмотр справочников
Чтобы сразу после установки системы ответственные за договоры смогли создавать договоры закупки, выдайте им права на создание. Для этого:
1.Создайте функцию инициализации модуля «Закупки» (GrantCreateRightsOnPurchaseContract()). Напишите программный код, в котором будут выдаваться права на создание договора закупки для группы «Ответственные за договоры»:
/// <summary>
/// Выдача прав на создание договора закупки.
/// </summary>
public static void GrantCreateRightsOnPurchaseContract()
{
var contractsResponsible = Roles.GetAll().Where(n => n.Sid == Sungero.Docflow.Constants.Module.RoleGuid.ContractsResponsible).FirstOrDefault();
// Проверка наличия роли.
if (contractsResponsible != null)
{
// Если роль есть, то выдать права на создание договора закупки.
PurchaseContracts.AccessRights.Grant(contractsResponsible, DefaultAccessRightsTypes.Create);
PurchaseContracts.AccessRights.Save();
InitializationLogger.Debug("Выданы права на создание договоров закупки");
}
}
2.Создайте функцию инициализации GrantAccessRightsForDatabook(), в которой будут выдаваться права на справочники Закупки и Виды закупок:
public void GrantAccessRightsForDatabook()
{
var allUsers = Roles.AllUsers;
PurchaseKinds.AccessRights.Grant(allUsers, DefaultAccessRightsTypes.Read);
PurchaseKinds.AccessRights.Save();
var contractsResponsible = Roles.GetAll().Where(n => n.Sid == Sungero.Docflow.Constants.Module.RoleGuid.ContractsResponsible).FirstOrDefault();
// Проверка наличия роли.
if (contractsResponsible != null)
{
Purchases.AccessRights.Grant(contractsResponsible, DefaultAccessRightsTypes.Create);
Purchases.AccessRights.Grant(contractsResponsible, DefaultAccessRightsTypes.Change);
Purchases.AccessRights.Save();
}
}
3.Вызовите добавленные функции в обработчике события Initializing() модуля «Закупки»:
/// <summary>
/// Обработчик события инициализации.
/// </summary>
public override void Initializing(Sungero.Domain.ModuleInitializingEventArgs e)
{
CreateDefaultPurchaseKinds();
CreateDocumentTypes();
CreateDocumentKinds();
GrantCreateRightsOnPurchaseContract();
GrantAccessRightsForDatabook();
}
Создание функций инициализации Как создать модуль для планирования, согласования и исполнения закупок |
© Компания Directum, 2024 |