Примеры Обработка входящего Договора В веб дизайнере ELMA4 (в ELMA3 обычном дизайнере) реализуем Глобальный модуль, где определяем нужную точку расширения, например, ReceivableContract . Реализация: using System; using EleWise.ELMA.ComponentModel; using EleWise.ELMA.Documents.Contracts.Models; using EleWise.ELMA.Model.Services; using ITino.ELMA.Documents.Diadoc.Components; using ITino.ELMA.Documents.Diadoc.Models; namespace HMS.Configuration.Diadoc { /// [Component] public class ReceivableContract : ReceivableDiadocDocument { /// public override bool Enabled { // Точка расширения включена и обрабатывается get { return true; } } /// public override DiadocDocumentType DocumentType { // Какой тип документа Диадока обрабатываем get { return DiadocDocumentType.Contract; } } /// public override Guid TypeUid { // К какому типу документа в ELMA привязываем get { return InterfaceActivator.UID(); } } } } Атрибут [Component] обязателен. Обработка исходящего Договора с физ. лицом В веб дизайнере ELMA4 (в ELMA3 обычном дизайнере) реализуем Глобальный модуль, где определяем нужную точку расширения, например, SendableRNMOutContractInd . Реализация: using System; using EleWise.ELMA.ComponentModel; using EleWise.ELMA.ConfigurationModel; using EleWise.ELMA.Documents.Models; using EleWise.ELMA.CRM.Models; using EleWise.ELMA.Model.Services; using EleWise.ELMA.Services; using ITino.ELMA.Documents.Diadoc.Components; using ITino.ELMA.Documents.Diadoc.Exceptions; using ITino.ELMA.Documents.Diadoc.Managers; using ITino.ELMA.Documents.Diadoc.Models; using ITino.ELMA.Documents.Diadoc.Services; namespace HMS.Configuration { /// [Component] public class SendableRNMOutContractInd : SendableDiadocDocument { /// public override bool Enabled { // Точка расширения включена и обрабатывается get { return true; } } /// public override DiadocDocumentType DocumentType { // Какой тип документа Диадока обрабатываем get { return DiadocDocumentType.Contract; } } /// public override Guid TypeUid { // К какому типу документа в ELMA привязываем get { return InterfaceActivator.UID(); } } public override IContractor GetSender(IDocument doc) { // Получить отправителя документа var contract = doc as RNMOutContractInd; return contract != null ? contract.Contractor : null; } /// public override EODiadocCanSendStatus CanSendDocument(IDocument doc) { // Проверить, можно ли отправить документ в Диадок if (doc == null) return EODiadocCanSendStatus.DocIsNull; var service = Locator.GetServiceNotNull(); var contract = doc as RNMOutContractInd; if (contract != null) return service.CanSendDocument(contract.Contractor, contract.Executor); return base.CanSendDocument(doc); } /// public override ICODiadocDocument Send(IDocument doc, Guid? departmentId, Guid? userId, string comment = null) { // Отправить документв Диадок на подписание нами var contract = doc as RNMOutContractInd; if (contract == null) throw new DiadocException("Договор не может быть null"); var edata = DiadocDocumentManager.Instance.CheckContractors(contract.Contractor, contract.Executor, null, null); var result = edata.Service.SendContract(edata.FormBoxId, edata.ToBoxId, doc, contract.Number, contract.ContractDate.Value, "ГПХ/Физ.лицо/Самозанятый", null, departmentId, userId, comment); return DiadocDocumentManager.Instance.SendDocHistory(result, doc, contract.Contractor, contract.Executor, contract.Number, contract.ContractDate); } } } Атрибут [Component] обязателен. Отправка документа сценарием на подписание в Диадок TODO Добавление скан-копии В веб дизайнере ELMA4 (в ELMA3 обычном дизайнере) реализуем Глобальный модуль, где определяем нужную точку расширения, например, DiadocIntegration . Реализация: using EleWise.ELMA.ComponentModel; using EleWise.ELMA.Documents.Models; using EleWise.ELMA.Files; using ITino.ELMA.Documents.Diadoc.Extensions; using ITino.ELMA.Documents.Models; using ITino.ELMA.Documents.Managers; namespace HMS.Configuration.Diadoc { [Component] public class DiadocIntegration : BaseDiadocIntegration { public override void AddScanCopy(IDocument document, BinaryFile file, string comment = null) { // Реализация собственной логики добавления скан-копии к кокументу, например: DocumentExtManager.Instance.AddScanCopy(document as IDODocument, file, checkUseScanCopy: false); } } } Атрибут [Component] обязателен. Автоматический переход в процессной задаче Начиная с 4.0.28 и 3.15.48 При обработке документов Диадока в процессе может потребоваться отслеживать состояние подписания (как для входящих, так и исходящих). Чтобы задача автоматически выполнилась по нужному переходу при наступлении события по документу в Диадоке, необходимо реализовать в сценарии процесса следующий код: using ITino.ELMA.Diadoc.Helpers; public override void OnTaskCreate(ITaskBase task, Context context) { // Где, // 13b27a4a-b94f-4bc9-9390-d7ff4fcb58bd - идентификатор задачи на диаграмме процесса // 309f52b9-087d-4971-9fc0-9cbffc61c737 - идентификатор перехода в случае, если документ Подписан task.LinkDiadocEvents(new Guid("13b27a4a-b94f-4bc9-9390-d7ff4fcb58bd"), context.DiadocDocument, new Guid("309f52b9-087d-4971-9fc0-9cbffc61c737")); } Указанный пример обрабатывает событие Подписан . При необходимости можно указать переходы для событий Отклонен и Удален .