В стандартной поставке DIRECTUM 5.6 управляемые папки с действиями настроены в модуле «Финансовый архив». Подробнее о них можно прочитать в статье о новинках версии 5.6.
О разработке управляемых папок с действиями в десктоп-клиенте можно почитать в предыдущей статье. В этой статье мы рассмотрим особенности разработки управляемых папок с действиями в веб-клиенте.
При разработке управляемых папок с действиями следует учитывать, как эти действия выполняются в веб-клиенте DIRECTUM. Основной особенностью является асинхронность показа диалогов. Чтобы управлять показом окон, можно использовать специальные команды. С их помощью можно реализовывать следующие действия в веб-клиенте:
Для взаимодействия веб-клиента с разработкой в десктоп-клиенте подготовлен формат определения этих команд, а также реализован механизм перезапуска действия с результатом выполнения команды. Все команды выполняются на клиенте.
Чтобы действие отображалось в управляемой папке веб-клиента, необходимо в свойстве действия Видимость в веб-клиенте указать значение Да.
CmdParams = CreateList()
ParamValue = "Value"
CmdParams.SetVar("ParamName"; ParamValue )
Cmd = ArrayOf(1; "COMMAND_NAME"; CmdParams)
Object.Params.SetVar("__COMMANDS"; ArrayOf(Cmd))
Команда на ISBL представляет собой массив из трех элементов:
Параметры задаются в виде списка, в котором указываются имя параметра команды и его значение. Для каждого типа команд есть свои параметры с предопределенными именами.
Чтобы веб-клиент выполнил команды, массив из команд помещается в 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
Для команды задается два параметра:
Чтобы запустить команду в веб-клиенте, в функцию-обертку AddWebParam передается:
Представим, что у нас есть диалог 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), а также очистить параметры с результатом выполнения команд, чтобы они не повлияли на следующий запуск действия.
Авторизуйтесь, чтобы написать комментарий