Скрипты на пользовательские события (кнопка-скрипт)

В скрипте действия по событию используется переменная result, с помощью которой устанавливается действие, производимое после события.

Методы переменной result используются только для синхронных действий по событию.

В переменной result доступны следующие методы.

Для веб-приложения

  • downloadFile(file)

    downloadFile(file, title)

    Инициировать скачивание файла браузером.

    Параметры метода:

    • file — объект класса "Файл" или uuid объекта класса "Файл";
    • title — название файла, которое будет установлено скачанному файлу
  • executeJavaScript(js)

    Выполнение javascript на клиенте.

    Параметр метода:

    • js — код на javascript. String

    Пример: Асинхронная передача данных со стороны браузера на сервер (функция callback). Пользователю показывается popup-окно с полем ввода и кнопкой. После заполнения поля и нажатия кнопки, в системе создается одноименный отдел.

    Первое действие по событию (на которое настроена кнопка-скрипт):

    Copy
    def js='''newWindow = window.open("", null, "height=70,width=200,status=yes,toolbar=no,menubar=no,location=no");
    newWindow.document.write("<input id='id1' type='text'/><br/><input id='id2' type='button' value='Создать отдел'/>");
    newWindow.document.getElementById('id2').onclick = function () {
    result.ouTitle=newWindow.document.getElementById('id1').value;
    result.nextEventUuid='eventAction$2';
    callback(result);
    newWindow.close()
    }'''
    result.executeJavaScript(js);

    Второе действие по событию:

    utils.create('ou$ou', ['title':clientData.ouTitle])

  • goToUrl(url)

    goToUrl(url, newTab)

    Переход по ссылке. Переход на любую страницу, даже на страницу SMP, будет выглядеть как редирект и страница загружается с нуля.

    Если открывается форма с необходимостью заполнения некоторых параметров, и на форме нажимается кнопка "Отмена", то происходит редирект на главную страницу SMP.

    Параметры метода:

    • url — ссылка. String

    • newTab:

      • true — в браузере откроется новая вкладка или окно в зависимости от браузера;
      • false или параметр не определен — новая вкладка не открывается

    Для полной перезагрузки карточки объекта можно использовать:

    result.goToUrl(api.web.open(subject))

    Примеры некорректной настройки:

    • Бизнес-логика игнорирует попытки перехода на ту же ссылку, что открыта в текущий момент. При таком вызове ничего не произойдет

      result.goToUrl(api.web.baseUrl + '#uuid:'+subject.UUID)

    • Вот такой вызов будет неправильным,

      result.goToUrl("www.google.com")

      путь нужно указать полностью:

      result.goToUrl("https://www.google.com/")

    Примечания:

    • Чтобы в пользовательском событии использовать goToUrl и api.web.getPlace, нужно перед результатом api.web.getPlace добавить #. Без # сгенерируется некорректная ссылка с uuid.
    • При использовании метода для перехода на вручную сформированные ссылки (например, при добавлении в URL !{"fast":"true"}) необходимо последнюю часть передавать в формате RFC Compability. Таким образом вручную сформированная ссылка должна иметь вид подобный следующему:

      //http://any-stand.ru/sd/operator/#add:serviceCall$request::request!%21%7B%22fast%22%3A%22true%22%7D

      т.е. часть !{"fast":"true"} следует передавать в url-encoded виде.

      При использовании в связке с методом api.web.add() дополнительных действий не требуется

  • reload(needReload)

    Отключение обновления значений атрибута на карточке после выполнения пользовательских действий.

    Параметр needReload:

    • true — после выполнения пользовательских действий карточка объекта обновляется. Происходит обновление данных и частичную перерисовку интерфейса (если это необходимо), без полной перезагрузки страницы. Обновление не затрагивает контенты типа "Встроенное приложение";
    • false — карточка не обновляется.
  • showMessage(message)

    showMessage(title, message)

    Показать сообщение.

    Параметры метода:

    • title — заголовок сообщения. String.

      Если параметр не определен, то сообщение показывается с пустым заголовком;

    • message — текст сообщения, возможно форматирование через прямое указание тегов.

      Использовать можно только теги и их атрибуты, которые перечислены в файле "белый лист" (параметр ru.naumen.security.sanitizeHtml конфигурационного файла dbaccess.properties, см. Безопасность).

    Пример. Показать сообщение с заголовком:

    result.showMessage("Alert!", "Сообщение")

  • setErrorMessage(message)

    Установить сообщение об ошибке.

    Параметр метода:

    • message — текст сообщения. String.

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

Для мобильного приложения

  • showMessage(message)

    Показать toast сообщение.

    Параметр метода:

    • message — текст сообщения. String.

    Пример. Показать сообщение без заголовка в МК (toast):

    result.showMessage("Сообщение")

  • showMessage(title, message)

    Показать сообщение в диалоговом окне.

    Параметры метода:

    • title — заголовок сообщения. String.
    • message — текст сообщения. String.

    Пример. Показать сообщение с заголовком в МК (alert):

    result.showMessage("Alert!!", "Сообщение")

  • goToMobileAddForm(formCode, attributes)

    Переход на форму добавления объекта.

    Параметры метода:

    • formCode — код формы добавления объекта в мобильном приложении. String;
    • attributes — ассоциативный список атрибутов <Код : Значение>

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

    Чтобы точно была открыта определенная форма добавления, рекомендуется указывать тип объекта в параметре attributes.

    Пример. Выполнение переадресации пользователя на форму добавления объекта внутри мобильного приложения:

    Copy
    def attributes = [
    'intValue':1020434,
    'hLink' : api.types.newHyperlink('ссылка на ресурс', 'https://www.naumen.ru'),
    'Logic' : true,
    'DateNL' : new Date(),
    'DateTime' : new Date(),
    'catItem' : 'impact$2802'
    'dateTimeIntervalAttribute' : 1020434
    ];
    def subject = utils.get('userClassA$2902');
    //на форму добавления объекта с кодом "addClassAform"
    result.goToMobileAddForm("addClassAform", attributes);
  • goToMobileEditForm(subject, attributes)

    goToMobileEditForm(subject, formCode, attrs)

    Переход на форму редактирования объекта.

    Параметры метода:

    • subject — объект (UUIDIdentifiable) или UUID-объекта, для которого вызывается форма редактирования. Object;
    • formCode — код формы редактирования объекта в мобильном приложении. String;
    • attributes — ассоциативный список атрибутов <Код : Значение>

    Пример 1. Выполнение переадресации пользователя на форму редактирования объекта внутри мобильного приложения:

    def attributes = [
    'intValue':1020434,
    'hLink' : api.types.newHyperlink('ссылка на ресурс', 'https://www.naumen.ru'),
    'Logic' : true,
    'DateNL' : new Date(),
    'DateTime' : new Date(),
    'catItem' : 'impact$2802'
    'dateTimeIntervalAttribute' : 1020434
    ];
    def subject = utils.get('userClassA$2902');
    //на форму редактирования объекта
    result.goToMobileEditForm(subject, attributes);

    Пример 2. Выполнение переадресации пользователя на форму редактирования объекта с кодом "editClassAform" внутри мобильного приложения:

    def attributes = [
    'intValue':1020434,
    'hLink' : api.types.newHyperlink('ссылка на ресурс', 'https://www.naumen.ru'),
    'Logic' : true,
    'DateNL' : new Date(),
    'DateTime' : new Date(),
    'catItem' : 'impact$2802'
    'dateTimeIntervalAttribute' : 1020434
    ];
    def subject = utils.get('userClassA$2902');
    //на форму редактирования объекта с кодом "editClassAform"
    result.goToMobileEditForm(subject, "editClassAform", attributes);
  • goToMobileObjectCard(subject)

    Переход на карточку объекта.

    Параметр метода:

    • subject — объект (UUIDIdentifiable) или UUID-объекта, на карточку которого необходимо перейти. Object.

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

    def attributes = [
    'intValue':1020434,
    'hLink' : api.types.newHyperlink('ссылка на ресурс', 'https://www.naumen.ru'),
    'Logic' : true,
    'DateNL' : new Date(),
    'DateTime' : new Date(),
    'catItem' : 'impact$2802'
    'dateTimeIntervalAttribute' : 1020434
    ];
    def subject = utils.get('userClassA$2902');
    //на карточку объекта
    result.goToMobileObjectCard(subject);
    
  • goToExternal(url)

    goToExternal(url, attributes)

    Переадресация в стороннее приложение.

    Параметры метода:

    • url — ссылка на приложение. String
    • attributes — ассоциативный список параметров <Код : Значение>

    Пример. Выполнение переадресации пользователя в стороннее приложение:

    def url = "text:/coolreader";
    def attributes = [
    'intValue':1020434,
    'hLink' : api.types.newHyperlink('ссылка на ресурс', 'https://www.naumen.ru'),
    'Logic' : true,
    'DateNL' : new Date(),
    'DateTime' : new Date(),
    'catItem' : 'impact$2802'
    ];
    result.goToExternal(url, attributes);