Регистрация документа в сценарии
В данной статье рассмотрен сценарий для регистрации созданного ранее документа.
Предварительно необходимо в веб-части в разделе Администрирование – Документооборот – Варианты регистрации документов создать вариант регистрации, в котором необходимо указать его название, тип регистрируемого документа, документопоток, место регистрации и дело. Этот вариант регистрации будет использоваться в сценарии.
Пример сценария с использованием PublicAPI
context.Dokument – переменная типа Документ, который нужно зарегистрировать;
context.VariantRegistracii – переменная типа Вариант регистрации;
context.Delo – переменная типа Дело.
Пространство имен:
1 | using EleWise.ELMA.API; |
Текст сценария:
1 2 | PublicAPI.Docflow.Document.Register(context.Dokument, context.VariantRegistracii); PublicAPI.Docflow.Document.Register(context.Dokument, context.Delo , PublicAPI.Enums.Documents.DocumentFlowType.Incoming); //DocumentFlowType.Incoming - документопоток входящие |
Определить UID для DepositoryGroup можно с помощью следующего запроса в БД:
1 | select [GroupUid] from [DepositoryGroup] where [Name] = ’Наименование_дела’ |
Данный запрос можно выполнить в СУБД (например, в MS SQL Server Management Studio для версии ELMA Standart или в IBExpert для версии ELMA Express).
При невозможности использования СУБД, результат запроса можно посмотреть в самой ELMA. Для этого необходимо создать новый отчет и использовать в нем приведенный выше запрос. На макет отчета (в FastReport) следует переместить поле GroupUid и запустить отладку. На странице отчета Вы увидите искомый Uid.
Альтернативный способ определения GroupUid:
- зайти на страницу нужного дела в веб-части (Администрирование - Документооборот - Номенклатура), в котором следует регистрировать документ, и выяснить его id (поле в карточке);
- в отдельном сценарии написать строку Console.WriteLine(DepositoryManager.Instance.Load(4).GroupUid.ToString()). Вместо числа 4 следует указать выясненный ранее id дела.
Запустите эмуляцию этого сценария: на консоли на странице эмуляции Вы увидите нужный Uid, скопируйте его в сценарий регистрации документа.
Пример сценария без использования PublicAPI
Используемые контекстные переменные:
context.Dok – хранит документ, подлежащий регистрации.
Для его корректной работы необходимо подключить сборки:
Пространства имен:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | using EleWise.ELMA.Documents.Managers; using EleWise.ELMA.Documents.Models; using EleWise.ELMA.Documents.Models.Nomenclature; using EleWise.ELMA.Extensions; using EleWise.ELMA.Model.Common; using EleWise.ELMA.Model.Entities; using EleWise.ELMA.Model.Entities.EntityReferences; using EleWise.ELMA.Model.Entities.ProcessContext; using EleWise.ELMA.Model.Managers; using EleWise.ELMA.Model.Metadata; using EleWise.ELMA.Model.Services; using EleWise.ELMA.Model.Types.Settings; using EleWise.ELMA.Services; using EleWise.ELMA.Documents.Contracts.Models; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | //определим тип сущности на основе типа документа. //Вместо "DocType" необходимо ввести имя класса Вашего документа. Обратите внимание что в конструкции используется его интерфейс var docType = new ReferenceOnEntityType { TypeUid = InterfaceActivator.UID<IDokType>( false ) }; //найдем вариант регистрации var reg_variant = RegistrationVariantManager.Instance .Find( new InstanceOf<IRegistrationVariantFilter>(){New = { //укажем тип документопотока "Входящие" Docflow = DocumentFlowType.Incoming, //зададим тип документа DocumentType = docType, //укажем UID для DepositoryGroup. Как определить его значение описано ниже DepositoryGroupUid = new Guid( "64AEC71A-D9F3-488E-8E4F-1AD47E31D373" ), //зададим имя варианта регистрации Query = "Name = ’Вариант1’" }}.New, new FetchOptions(0, 1)) .FirstOrDefault(); //если вариант регистрации не найден - выход из сценария if (reg_variant == null ) { Console.Write( "Variant not found" ); return ; } //найдем дело var depository = (IDepository)DepositoryGroupManager.Instance.GetByGroupUid(reg_variant.DepositoryGroupUid, true ) .CastAsRealType(); //если дело не найдено - выход из сценария if (depository == null ) { Console.Write( "Depository not found" ); return ; } //поиск типа РКК в опубликованной номенклатуре var filter = InterfaceActivator.Create<INomenclatureCacheFilter>(); filter.Depository = depository; filter.DocumentType = docType; filter.Flow = reg_variant.Docflow; filter.RegistrationPlace = reg_variant.RegistrationPlace; //если в опубликованной номенклатуре тип РКК не найден - выход из сценария var cacheItem = NomenclatureCacheManager.Instance.Find(filter, FetchOptions.All).FirstOrDefault(); if (cacheItem == null ) { Console.Write( "Cache item not found" ); return ; } //создадим РКК найденного типа var rkk = (IRegistrationCard)InterfaceActivator.Create(cacheItem.RegistrationCard.EntityType); //запишем в нее регистрируемый документ rkk.Document = context.Dok; //укажем дело, в котором регистрируется документ rkk.Depository = depository; //укажем документопоток, в котором регистрируется документ (в данном случае "Входящие") rkk.Flow = reg_variant.Docflow; //укажем место регистрации rkk.RegistrationPlace = reg_variant.RegistrationPlace; //и укажем в РКК тип регистрируемого документа: rkk.DocumentType = docType; context.Dok.RegistrationCard.Add((RegistrationCard)rkk); rkk.Save(); //Сама регистрация. Внутри сгенерируется номер RegistrationCardManager.Instance.Register(rkk, false , null ); |