Механизм возврата документа из файлового хранилища главного сервера на вторичном сервере

6 0

В компании существует большое количество вторичных серверов. Документы с них попадают на главный сервер, и это сказывается на размерах базы данных главного сервера. На главном сервере решили развернуть файловое хранилище, в которое перенесли старые и давно не используемые документы. Возникла проблема: тексты документов, находящиеся в ФХ стали недоступны на вторичных серверах.

Для решения данной проблемы можно разработать механизм возврата документа из файлового хранилища главного сервера на вторичном сервере, работающий по такой схеме.

На карточку электронного документа необходимо добавить кнопку Получить из ФХ, вызывающую функцию GetDocumentFromStorage(), которая содержит следующий код:

  BUTTON_GET = 'Продолжить'
  BUTTON_CANCEL = 'Отменить'
  QUESTION_BUTTONS = Format("%s|%s"; ArrayOf(BUTTON_GET; BUTTON_CANCEL))
  MsgBoxResult = MessageBoxEx(CONFIRMATION_CAPTION;
    'Будет отправлена задача с запросом на возврат документа из файлового хранилища. Продолжить?';;  
    QUESTION_BUTTONS;;;; cbsDefault;
    BUTTON_GET)
  if MsgBoxResult == BUTTON_GET
    // Создать задачу
    Task = Tasks.CreateNew() 
    // Вложить в нее документ
    DocInfo = Object.Info
    Attachments = Task.GetAttachments(FALSE)
    Attachments.Add(DocInfo)
    // Запустить по ТМ "Получение документа"
    Task.LoadStandardRoute(Конст('GetDocRouteCode'))
    Task.RunStandardRoute()
    Task.Start()  
    ShowMessage('Запрос на получение документа отправлен!')
  endif

При нажатии на кнопку создается задача по типовому маршруту «Запрос возврата документа из ФХ», в нее вкладывается карточка необходимого пользователю документа. Задача отправляется, пользователь вторичного сервера получает сообщение о том, что запрос на получение электронного документа из ФХ на вторичном сервере отправлен.

Схема типового маршрута, по которому создается задача, должна выглядеть следующим образом:

 

В качестве исполнителя первого блока типового маршрута нужно указать служебного пользователя главного сервера с правами администратора. Разработан прикладной блок, на событии «Завершение» которого вызывается код, переносящий документ в хранилище главного сервера. 

  // Перенести документ из ФХ в хранилище SQL-сервера
  Attachments = Object.GetAttachments(True)
  DocumentInfo = Attachments.Values(0).ObjectInfo
  Document = DocumentInfo.Document
  SQLStrgRef = References.EDS.GetObjectByCode(Конст('SQLServerStorageCode'))
  SQLStrg = EDocuments.GetStorageByID(SQLStrgRef.Requisites('ИД').Value)
  Document.MoveToStorage(SQLStrg)

Для автоматического выполнения заданий можно реализовать сценарий «Выполнение заданий на перенос документа», который ищет невыполненные задания по задачам, созданным по ТМ «Запрос возврата документа из ФХ» и выполняет их на главном сервере.

Сценарий может выполняться как вручную, так и при помощи назначенных заданий Windows по расписанию от имени служебного пользователя или любого другого пользователя с правами администратора. Код следующий:

  Search = Searches.Load("JOB_SEARCH")  
  Criterion = Search.SearchCriteria.Add("StandardRoute")
  Criterion.Add(Конст('GetDocRouteCode'))
  Criterion = Search.SearchCriteria.Add("JobState")
  Criterion.Add("В работе")
  SearchJob = Search.Execute 
  foreach JobInfo in SearchJob
    Job = Jobs.GetObjectByID(JobInfo.ID)
    Job.Perform
  endforeach 

После переноса документа инициатор задачи получает уведомление: документ получен, с ним можно работать.

Для настройки переноса документа реализован специальный сценарий, при помощи которого можно задать значения констант:

  • код ТМ "Запрос возврата документа из ФХ";
  • код файлового хранилища SQL-сервера.

В архиве:

  • Блок DocExecuteJob;
  • Константы GetDocRouteCode и SQLServerStorageCode;
  • Сценарии ExecutionOfDocumentTransferJobs и ExtractDocSettings;
  • Функция GetDocumentFromStorage;
  • Типовой маршрут GetDoc. 

Механизм возврата документа из файлового хранилища главного сервера на вторичном сервере.rar (16,15 Кб)

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

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