Записная книжка разработчика. Экспорт документа из системы

4 0

Данный сценарий экспорта (отправки) документа является дополнительной функцией, добавляющей возможность отправки документа из системы 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, хотя можно было добавить условие проверки.  


 

Пока комментариев нет.

Авторизуйтесь, чтобы написать комментарий