Данный сценарий экспорта (отправки) документа является дополнительной функцией, добавляющей возможность отправки документа из системы Directum в дополнение к стандартному экспорту из карточки документа либо через контекстное меню, либо через панель инструментов. Сценарий позволяет отправить документ себе на почтовый адрес, либо отправить документ в сервисные системы, например OTRS или Kaiten для дальнейшей работы с ним.
В нашем случае этого вполне достаточно, но можно добавить и другие варианты экспорта, например, добавить возможность отправки документа, подписанного ЭП вместе с файлом открепленной подписи sig. Все зависит от целей обработки документа.
Практика использования показала, что для рядовых сотрудников опция отправки себе на почту оказалась достаточно удобной функцией, которой пользуются при работе в системе, а отправка в сервисные системы - это больше для административных задач с целью подкрепления пришедшей задачи в службе поддержки соответствующим документом.
Код упрощенного варианта сценария:
// Временная папка
TempFolder = GetTempFolder()
//Получить объект документа из карточки
EDoc = Object
// Определить номер экспортируемой версии
VersionNum = GetNumVersionEDoc(EDoc; EDOC_VERSION_ACTIVE_STAGE_CODE)
if VersionNum = -1
VersionNum = GetNumVersionEDoc(EDoc; EDOC_VERSION_DESIGN_STAGE_CODE)
if VersionNum = -1
VersionNum = GetNumVersionEDoc(EDoc; EDOC_VERSION_OBSOLETE_STAGE_CODE)
endif
endif
// Получить версию документа
EDocumentVersion = EDoc.Versions.ValueByName(VersionNum)
DocIDList = CreateStringList()
DocFileNameList = CreateStringList()
DocNameList = CreateStringList()
DocMailList = ""
// Определить расширение файла и перевести в нижний регистр
CheckExtension = LowerCase(EDoc.Info.Editor.Extension)
//Получение исходного имени файла и очистка от спецсимволов
NameOrig = ClearFileName(EDoc.SYSREQ_EDOC_NAME)
// Изменяем(уменьшаем) исходное имя файла до 100 символов через временное имя файла
// для системы OTRS во избежание блокировки OTRS(связано с багом)
NameTmp = NameOrig
If Length(NameTmp) > 100
NameTmp = Copy(NameTmp; 1; 100)
NameClear = NameTmp
else
NameClear = NameOrig
endif
//Формирование промежуточного имени файла для экспорта
FileNameTemp = NameClear & " " & Edoc.SYSREQ_ID & "." & CheckExtension
//Полное имя файла
FileName = GetTempFolder() & FileNameTemp
// Экспорт во временную папку
EDoc.Export(VersionNum; FileName; False)
// Добавить путь до документа в отдельный список для функции MailSend
DocFileNameList.Add(FileName)
DocNameList.Add(EDoc.Name)
// Получить наименования вложенных документов
DocString = ""
foreach Doc in DocNameList
DocString = DocString & Doc & CR
endforeach
// Задаем тему и текст письма
Subject = 'Документ из системы Directum: '& DocString
Text = 'Ознакомьтесь с документом:'
DocMailList = AddSubString(FileName; DocMailList; ';')
// Диалог выбора системы отправки документа: OTRS, Kaiten, Email и т.д.
Res = InputDialogEx('*Отправить документ:'; ; 'Pick:в Службу поддержки, на рабочую почту
сотрудника:C'; 'Отправка документа';;;;'ОК|Отмена';;'Отмена')
if CharPos('Отмена'; Res) > 0
ShowMessage('Не выбрана система отправки документа!')
Exit()
endif
DialogRes = SubString(Res; '|'; 1)
// Отправка письма в службу поддержки
if DialogRes == 'в Службу поддержки'
//Служебный почтовый адрес для системы OTRS, который обрабатывается самой системой для
//поступивших писем.
OTRS = 'support@support35.ru'
ПЧТОтправитьПисьмо(OTRS;;; Subject; Text;; DocMailList;)
ShowMessage("Документ обработан." & CR & "Письмо отправлено в службу поддержки")
endif
// Отправка письма на рабочую почту пользователя
if DialogRes == 'на рабочую почту сотрудника'
// Определить текущего пользователя
CurrentUser = EDocuments.CurrentUser
CurrentUserID = CurrentUser.ID
// Получить код работника по ИД пользователя
REC_NOT_EXIST = 0
FIRST_WORKER_INDEX = 0
EmployeeCodeList = GetEmployeesByUserID(CurrentUserID)
if EmployeeCodeList.Count > REC_NOT_EXIST
EmployeeCode = EmployeeCodeList.Values(FIRST_WORKER_INDEX)
EmployeesReference = CreateCachedReference("РАБ"; FALSE)
EmployeesReference.Open
if EmployeesReference.Locate(SYSREQ_CODE; EmployeeCode)
EmployeeCode = EmployeesReference.SYSREQ_CODE
endif
else
UsersReference = CreateCachedReference("ПОЛ"; FALSE)
UsersReference.Open
if UsersReference.Locate(SYSREQ_ID; CurrentUserID)
EmployeeCode = UsersReference.Код
endif
endif
// Получить e-mail и ФИО текущего пользователя
EmployeeReqList = GetRequisitesValues("РАБ"; EmployeeCode;
ArrayOf("Строка2";"Дополнение");ArrayOf("S"; "S"))
EmployeeName = EmployeeReqList[1]
EmployeeEmail = EmployeeReqList[0]
ПЧТОтправитьПисьмо(EmployeeEmail;;; Subject; Text;; DocMailList;)
ShowMessage("Документ обработан." & CR & "Письмо отправлено на почту сотрудника" & CR & "Адрес почты: " & EmployeeEmail)
endif
// Удаление файла из временной папки
if FileExists(FileName)
DeleteFile(FileName)
endif
Для настройки сценария необходимо добавить в справочник "Типы карточек документов" - "Действия и методы" в нужную карточку документа и указать доступность пункта через контекстное меню. Для версии 5.8 пример работы выглядит следующим образом: при выборе через контекстное меню добавлен пункт "Отправить в...".
при выборе которого выбираем цель отправки документа через диалог(пример из нашей системы):
Для того, чтобы была возможность отправки на рабочую почту сотрудника, необходимо заполнить в справочнике "Работники" в карточке работника поле "Рабочий email". После выбора и нажатия "Ок" будет выведено информационное сообщение(пример):
При выборе отправки письма себе на почту в настроенном почтовом клиенте получим письмо с вложенным файлом документа(если имя файла имеет длинное наименование, то оно будет обрезано до 100 символов и вложено в виде вложения, но по теме письма будет понятно, о чем документ). Всегда можно убрать опцию уменьшения имени файла в сценарии. У меня это сделано по практическим причинам работы с OTRS, хотя можно было добавить условие проверки.
Авторизуйтесь, чтобы написать комментарий