DIRECTUM 5.6.1. Особенности разработки действий в управляемых папках в веб-клиенте

9 0

В стандартной поставке DIRECTUM 5.6 управляемые папки с действиями настроены в модуле «Финансовый архив». Подробнее о них можно прочитать в статье о новинках версии 5.6.

О разработке управляемых папок с действиями в десктоп-клиенте можно почитать в предыдущей статье. В этой статье мы рассмотрим особенности разработки управляемых папок с действиями в веб-клиенте.

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

  • открытие результата поиска;
  • открытие диалога;
  • запуск js-функции;
  • показ всплывающего уведомления;
  • показ сообщения в модальном окне с кнопками;
  • прерывание выполнения действия.

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

Отображение действий

Чтобы действие отображалось в управляемой папке веб-клиента, необходимо в свойстве действия Видимость в веб-клиенте указать значение Да.

Синтаксис команд

CmdParams = CreateList()
ParamValue = "Value"
CmdParams.SetVar("ParamName"; ParamValue )
Cmd = ArrayOf(1; "COMMAND_NAME"; CmdParams)
Object.Params.SetVar("__COMMANDS"; ArrayOf(Cmd))

Команда на ISBL представляет собой массив из трех элементов:

  • порядковый номер команды;
  • имя команды. Определяет поведение команды на клиенте (в справке по функции AddWebParam можно посмотреть список всех возможных команд);
  • параметры команды.

Параметры задаются в виде списка, в котором указываются имя параметра команды и его значение. Для каждого типа команд есть свои параметры с предопределенными именами.

Чтобы веб-клиент выполнил команды, массив из команд помещается в Params с именем "__COMMANDS".

Перезапуск действия

Если у действия в Params заполнен параметр "__COMMANDS", то оно будет циклически перезапускаться до тех пор, пока не встретит команду END (завершающая команда) или пока параметр "__COMMANDS" не станет пустым.

Функция-обертка для команд

Для упрощения работы с командами в веб-клиенте разработана функция-обертка AddWebParam. В функцию передается объект Folder, имя команды, признак завершающей команды, параметры команды, признак обновления папки и индекс команды. Более подробное описание можно посмотреть в справке к функции.

Примеры работы с функцией-оберткой:

ParamsForWeb = CreateList()
// Добавить сообщение, которое необходимо отобразить в веб-клиенте
ParamsForWeb.Add("Message"; "Hello World!")
AddWebParam(Object; "SHOW_NOTIFICATION"; TRUE; ParamsForWeb; TRUE)
// Обновить папку без выполнения команды
AddWebParam(Object;; TRUE;; TRUE)

Примеры реализации действий в управляемых папках

Открытие карточки задания по документу

Для открытия карточки задания необходимо вызвать JS-функцию, которая откроет задание в новой вкладке.

Реализация JS-функции:

/**
* Функция для открытия объекта в новой вкладке.
* @method BaseWebAccess.openObjectInNewTab
* @param {number} objectId ИД объекта
* @param {number} objectType Значение типа объекта системы (см. в справке OBJECT_TYPE)
*/

BaseWebAccess.openObjectInNewTab = function (objectId, objectType) {
  var objectUrl = new WA.Link(objectId, objectType).toURL();
  objectUrl.open();
}

Вызов JS-функции из действия управляемой папки:

AuthorID = Object.Requisites("Author").ValueID
DocInfo = SelectedContents.Value
DocID = CreateStringList()
DocID.Add(DocInfo.ID)
JobIDs = ManagedFolderSearchJob(DocID; AuthorID; CorrespondenceStandardRouteAndBlocks)
if Assigned(JobIDs)
  JobID = SubString(JobIDs; "|"; 1)
  if not IsWebRuntimeContext()
    Job.Form.Show
  else
    // Запустить js-функцию для открытия карточки объекта в веб-клиенте
    // Тип объекта задания равен 3 (см. в справке OBJECT_TYPE)
    ObjectType = 3
    CmdParams = CreateList()
    CmdParams.SetVar("JsActionName"; "BaseWebAccess.openObjectInNewTab")
    CmdParams.SetVar("JsActionArgs"; '[' & JobID & ', ' & ObjectType & ']')
    AddWebParam(Object; "EXECUTE_JS_ACTION"; TRUE; CmdParams)
  endif 
endif

Для команды задается два параметра:

  • JsActionName – имя JS-функции;
  • JsActionArgs – параметры, которые передаются в функцию.

Чтобы запустить команду в веб-клиенте, в функцию-обертку AddWebParam передается:

  • текущий объект папки;
  • имя команды (EXECUTE_JS_ACTION);
  • признак, что необходимо запустить завершающую команду и параметры JS-функции.

Вызов нескольких команд в одном действии

Представим, что у нас есть диалог PersonInfo с реквизитами Name и Age. Создадим команду, которая сначала покажет диалог, а затем в новом уведомлении отобразит реквизиты этого диалога.

if Object.Params.IndexOfName("__COMMAND_RESULT_1") = -1
  // Действие для показа диалога
  Dialog = Dialogs.PersonInfo.CreateNew()
  Cmd1Params = CreateList()
  Cmd1Params.SetVar("Dialog"; Dialog)
  AddWebParam(Object; "SHOW_DIALOG"; FALSE; CmdParams; FALSE; 1)
else
  Dialog=Object.Params.ValueByName("__COMMAND_RESULT_1").ValueByName("__RESULT_DIALOG")
  if Dialog.Result = mrOk
    NameRequisiteValue = Dialog.Name
    AgeRequisiteValue = Dialog.Age
    // Формируем уведомление со значениями реквизитов из диалога
    Cmd1Params = CreateList()
    Cmd1Params.SetVar("Message"; "Name: " & NameRequisiteValue & " Age: " & AgeRequisiteValue)
    //Команда для отображения уведомления с ответом
    AddWebParam(Object; "SHOW_NOTIFICATION"; TRUE; CmdParams; FALSE; 1)
  endif
  // Очищаем результат выполнения, чтобы он не повлиял на последующее выполнение действия
  Object.Params.PopVar("__COMMAND_RESULT_1")
endif

При запуске действия первая команда отображает диалог. Когда пользователь заполняет реквизиты диалога Name, Age и нажимает на кнопку ОК, выполнение первого действия завершается, и оно перезапускается.

При перезапуске срабатывает вторая команда: отображается уведомление для пользователя. Вторая команда уже использует результаты выполнения первой команды (значения реквизитов диалога).

Для получения объекта диалога с заполненными реквизитами используется параметр с именем __RESULT_DIALOG. По наличию параметра __COMMAND_RESULT_1 (где 1 – номер команды) можно проверить, выполнилась команда или нет:

  • если параметр есть, то команда выполнилась;
  • если параметра нет, значит команда не запускалась и ее нужно запустить.

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

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

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