Для занесения захваченных и упакованных документов в систему DIRECTUM предназначен модуль отправки в систему DIRECTUM.
Отправка документов в систему DIRECTUM зависит от принятых в организации схем обработки документов. При отправке документов в систему DIRECTUM можно реализовать свою схему обработки документов. Для этого следует создать собственный сценарий и указать его в конфигурационном файле ввода DctsCaptureService.exe.config. Подробнее см. раздел «Настройки модуля отправки в систему DIRECTUM».
Для организации преобразования документа в PDF-формат следует использовать прикладной блок Преобразование документа в PDF.
Для увеличения производительности сервиса ввода имеется есть возможность параллельной отправки пакетов с нескольких линий. Подробнее см. раздел «Настройки модуля отправки в систему DIRECTUM».
Первоначально настройки модуля отправки в систему DIRECTUM задаются при его установке с помощью сценария Установки служб ввода документов DIRECTUM.
Настройки модуля отправки в систему DIRECTUM хранятся в конфигурационном файле настроек служб ввода DctsCaptureService.exe.config.
Отправка документов в систему DIRECTUM представлена на схеме:
Алгоритм работы модуля отправки в систему DIRECTUM
Для каждого документа, полученного от служб ввода, сценарий Обработка документа службами ввода выполняет действия:
Сценарий Обработка документа службами ввода импортирует документ в систему DIRECTUM. При импорте может быть выполнен ряд действий:
Доступные действия определяются параметрами сценария. |
Постановка задачи: В организации выделен специальный сетевой каталог для хранения документов, предназначенных для ввода в систему. У каждого сотрудника есть свой подкаталог. Название подкаталогов совпадает с логинами сотрудников. Необходимо организовать автоматический ввод документов из такого сетевого каталога в систему DIRECTUM. Решение: Нужно создать собственный сценарий занесения документов в систему DIRECTUM. В данном случае устройством, поставляющим документы, будет файловая система. Сценарий будет вызываться службами ввода при поступлении очередного документа в каталог какого-либо сотрудника. Сценарий будет импортировать документ в систему DIRECTUM, задавать тип карточки, вид документа и отправлять задачу сотруднику, ответственному за подкаталог. Сценарию необходимо передавать параметры:
Код вида документа и имя типа карточки удобнее задавать через справочник Параметры запуска компонент. Чтобы передать параметры сценарию:
Путь к подкаталогу сотрудника необходимо указать в настройках служб ввода. При запуске сценария службы ввода автоматически передают путь в командную строку вызова сценария. Подробнее о передаче параметров в сценарий см. раздел «Дополнительные параметры вариантов запуска».
// Имя служебного файла, содержащего имена файлов для занесения // в систему DIRECTUM. INPUT_FILES_PARAM_NAME = "InputFiles.xml" // Метаинформация о документе, заносимом в систему. INSTANCE_INFO_PARAM_NAME = "InstanceInfos.xml" // Получить параметры сценария из справочника Параметры запуска компонент. ListParams = GetComponentLaunchParams() EDocKind = ListParams.ValueByName('EDocKind') EDocCardType = ListParams.ValueByName('EDocCardType') // Получить путь к подпапке сотрудника. ScriptParams = Object.Params FilePath = ScriptParams.ValueByName('FilePath') FilePath = IncludeTrailingPathDelimiter(FilePath) // Получить имена файлов для занесения в систему. InputFilesXml = CreateObject("MSXML.DOMDocument") InputFilesXml.Load(FilePath & INPUT_FILES_PARAM_NAME) InputFilesElements = InputFilesXml.selectNodes("//Files/FileInfo") // Получить имена файлов для занесения в систему. InstanceInfoXml = CreateObject("MSXML.DOMDocument") InstanceInfoXml.Load(FilePath & INSTANCE_INFO_PARAM_NAME) InstanceInfoXmlElements = InstanceInfoXml.selectNodes("//Files/FileInfo") // Проверить наличие файлов для обработки. InputFilesElementCount = InputFilesElements.length if InputFilesElementCount == 0 // "Не найдены файлы для занесения в систему". ExceptMessage = LoadString("DIR826B95C6_6B05_42F5_88F3_39D67AFF16D1"; "COMMON") Raise(CreateException("EDIRFileNotFound"; ExceptMessage; ecException)) endif // Обработать полученные файлы. InputFilesElementIndex = 0 while InputFilesElementIndex < InputFilesElementCount InputFilesElement = InputFilesElements.item(InputFilesElementIndex) CapturedFileName = InputFilesElement.selectSingleNode("FileName").text // Получить имя пользователя из InstanceInfos.xml. InstanceInfoXmlElement = InstanceInfoXmlElements.item(InputFilesElementIndex) OriginalFileName = InstanceInfoXmlElement.selectSingleNode("FileName").text // Определить параметры создания нового документа в DIRECTUM. CapturedFileExt = ExtractFileDriveDirNameExt(CapturedFileName; "E") EditorCode = GetEditorCodeByExtension(CapturedFileExt) // Создать новый документ из файла. EDocument = EDocuments.CreateNewFromFile(EDocCardType; EDocKind; EditorCode; FilePath & CapturedFileName) // В имя документа записать имя файла. EDocument.SYSREQ_EDOC_NAME = ExtractFileDriveDirNameExt(OriginalFileName; "N") EDocument.Save // Изменить примечание "Импортировано из файла %s". NewNote = LoadStringFmt("DIRA7FF8238_7096_4D7F_AE61_376884A4455E"; "COMMON"; ExtractFileDriveDirNameExt(OriginalFileName; "N")) EDocument.Versions.Values(EDocument.Versions.Count - 1).Note = NewNote // Получить имя пользователя, совпадающее с именем папки // из полного пути к файлу. UserName = SubString(OriginalFileName; '\'; SubStringCount(OriginalFileName; '\') - 1) try User = ServiceFactory.GetUserByName(UserName) except // Уведомление системному пользователю, если имя папки не совпадает // ни с одним именем пользователя в системе. Role = ServiceFactory.GetRoleByName("ОтветственныйЗаИмпортИзDCTSCapture") RoleMembers = ServiceFactory.GetRoleMembers(Role; nil) if RoleMembers.Count > 0 User = RoleMembers.Value else // Если в роли нет исполнителей. User = ServiceFactory.GetUserByName("Administrator") endif TaskForNotice = Tasks.CreateNew() // Заполнить этап маршрута. TaskForNoticeRouteStep = Tasks.CreateRouteStep(1; User; jkJob; Today(); ""; "") TaskForNotice.Route.Add(TaskForNoticeRouteStep) TaskForNotice.Subject = "DCTS: при обработке файла '" & CapturedFileName & "' не удалось получить пользователя по имени '" & UserName & "'." AttachList = TaskForNotice.GetAttachments(TRUE) AttachList.Add(EDocument.Info) TaskForNotice.Start endexcept // Если пользователь не определен, то не создавать задачу. if not ExceptionExists() // Отправить документ вложением в задачу сотруднику, // ответственному за подпапку. TaskForEDocProcess = Tasks.CreateNew() // Добавить во вложения задачи захваченный документ. AttachmentList = TaskForEDocProcess.GetAttachments(TRUE) AttachmentList.Add(EDocument.Info) // Заполнить этап маршрута. FinalDate = ChangeDate("D"; Today(); 1) RouteStep = Tasks.CreateRouteStep(1; User; jkJob; FinalDate; ""; "") TaskForEDocProcess.Route.Add(RouteStep) TaskForEDocProcess.Subject = "Из папки пользователя '" & UserName & "' в систему занесен новый файл '" & ExtractFileDriveDirNameExt(OriginalFileName; "N") & "'." TaskForEDocProcess.Start() endif // Выдать полные права на документ исполнителю задания. AccessRights = EDocument.AccessRights DocWriters = AccessRights.Writers DocReaders = AccessRights.Readers DocManagers = AccessRights.Managers if not AccessRights.IsManager(User) IsWriter = AccessRights.IsWriter(User) if IsWriter DocWriters.Delete(User) endif IsReader = AccessRights.IsReader(User) if IsReader DocReaders.Delete(User) endif DocManagers.Add(User) endif if EDocument.Modified EDocument.Save endif InputFilesElementIndex = InputFilesElementIndex + 1 endwhile |
© Компания DIRECTUM, 2018 | Сообщество пользователей DIRECTUM |