IntraVision

Клиентские правила автоматизации

В r_3.7.0 появилась возможность настраивать кастомные правила автоматизации для карточки заявки в виде скриптов. 
Такие скрипты позволяют реализовывать разные сценарии:
  • Показать/скрыть какое-то поле в зависимости от значения другого поля
  • Заполнить значение одного поля в зависимости от значения другого поля
  • Заполнить значение доп. поля заявки значением поля пользователя, клиента или сотрудника
  • Показать плашку об ошибке, если при сохранении заявки не соблюдено какое-то условие
  • Настроить переключатель вида комментария (публичный или внутренний) по умолчанию
  • И другие..

Порядок настройки скрипта
Скрипты настраиваются в разделе "Настройки -> Заявки -> Скрипты заявок". На карточке создания скрипта нужно:
  • Заполнить название
  • Указать тип заявки, для которого должен применяться этот скрипт
  • Нажать на кнопку "Открыть редактор" в поле "DSL"
  • Написать там (или вставить туда) код скрипта
  • Сохранить
  • !Переавторизоваться (для того, чтобы скрипт заработал)

Структура скрипта
В общем виде скрипт выглядит так:
script v1.0 {
rule {
name: "Example Rule 1" //Название скрипта
on { //Блок с событиями применения
taskEvent: save //Событие применения
}
action { //Блок с действиями
if (bool.true(task.statusid.value)) { //Условие
setCommentMode: public //Само действие
}
}
}
}

Готовые скрипты с комментариями и описаниями кейсов добавлены в приложенном к данной статье файле "Scripts_kpanch0_v1".
Они реализованы на площадке https://demo-script.intra5.ru/settings/tasktypescripts ( admin@intra5.ru / 111111 ). Проверить их работу можно при создании/изменении заявок в соответствующих сервисах на этой площадке.
Большая просьба не изменять скрипты и другие данные на этой площадке.


Ниже детальнее описаны основные блоки, их использование и синтаксис скриптов


1. События применения скрипта (блок "On")
//проверка по условию ИЛИ
on {
taskEvent: open-create-form //открытие формы создания заявки
taskEvent: open-edit-form //открытие формы созданной заявки
taskEvent: save //сохранение заявки
changeField: client //изменение поля "Клиент"
changeField: initiator //изменение поля "Заявитель"
changeField: executor //изменение поля "Исполнитель"
changeField: priority //изменение поля "Приоритет"
}

//также в changeField можно указать alias доп. поля заявки (поддерживаемые типы: Число, Число (дроб.), Строка, Текст, Вып. список)


2. Условия (блок "If")
//операции для строк: "==", "!="
if(string.bool(task.addfield_vyp_spisokSingleSelect.value == '1')) {
task.addfield_dop_textText.setValue('value 1')
}

//операции для чисел : "==", "!=", ">", ">=", "<", "<="
if(number.bool(task.serviceid.value == 1055)) {
task.addfield_dop_textText.setValue('service is 1055')
}
//доступна группировка по and и or
//как массив из bool условий

if(
bool.or
[
number.bool(task.statusid.value == 0)
bool.and
[
number.bool(task.statusid.value == 313)
string.bool(task.addfield_strokovoeString.value == '')
]
]
) {
user.load(task.initiatoruserid.value as initiatorUserData)
task.addfield_strokovoeString.setValue(user#initiatorUserData.defaultphone)
setAccess(edit){
addfield_strokovoeString
}


3. Получение значений полей заявки
task.serviceid.value            //id сервиса
task.tasktypeid.value //id типа заявки
task.statusid.value //id статуса
task.priorityid.value //id приоритета
task.clientid.value //id клиента
task.initiatoruserid.value //id пользователя-заявителя
task.initiatorgroupid.value //id клиента-заявителя
task.executoruserid.value //id сотрудника-исполнителя
task.executorgroupid.value //id группы-исполнителя
// доп поля заявки (поддерживаемые типы: Число, Число (дроб.), Строка, Текс, Вып. список)
//пример:
task.addfield_pole1Number.value


4. Получение значений данных пользователей
//загрузить пользователя в переменную 'initiatorUser'
//загруженный пользователь кешируется на 10 минут
user.load(task.initiatoruserid.value as initiatorUser)

//пример использования загруженного пользователя в переменную 'initiatorUser'
task.addfield_pole_textText.setValue(user#initiatorUser.fullname)
//Доступные функции для пользователя:

//полное ФИО
user#initiatorUser.fullname

//дефолтный телефон
user#initiatorUser.defaultphone

//все телефоны через запятую
user#initiatorUser.phones.toString()

//телефон по индексу в массиве, начиная с 0
user#initiatorUser.phones[2]

//основная почта
user#initiatorUser.email

//дополнительные почты через запятую
user#initiatorUser.additionalemails.toString()

//дополнительная почта по индексу в массиве, начиная с 0
user#initiatorUser.additionalemails[1]

//теги через запятую
user#initiatorUser.tags.toString()


5. Получение значений данных групп пользователей
//загрузить группу в переменную 'initiatorGroup'
//кешируется на 10 минут
usergroup.load(task.initiatorgroupid.value as initiatorGroup)

//пример использования
task.addfield_pole_textText.setValue(usergroup#initiatorGroup.name)
//Доступные функции для группы:

//название группы
usergroup#initiatorGroup.name

//дефолтный телефон
usergroup#initiatorGroup.defaultphone

//все телефоны через запятую
usergroup#initiatorGroup.phones.toString()

//телефон по индексу в массиве, начиная с 0
usergroup#initiatorGroup.phones[2]

//основная почта
usergroup#initiatorGroup.email

//дополнительные почты через запятую
usergroup#initiatorGroup.additionalemails.toString()

//дополнительная почта по индексу в массиве, начиная с 0
usergroup#initiatorGroup.additionalemails[1]

//теги через запятую
usergroup#initiatorGroup.tags.toString()

//id менеджера
usergroup#initiatorGroup.manager.id

//name менеджера
usergroup#initiatorGroup.manager.name

//email менеджера
usergroup#initiatorGroup.manager.email


6. Установка значений полей (setValue)
//пример использования загруженного пользователя в переменную 'initiatorUser'
task.addfield_olga_textText.setValue(user#initiatorUser.fullname)

//задать текст
task.addfield_olga_textText.setValue('тест строка')

//установить значение из другого поля заявки
task.addfield_olga_textText.setValue(task.addfield_testpoleText.value)


7. Настройка видимости полей (setVisibility)
setVisibility(hide) {    //скрыть поле
priority
}

setVisibility(show) { //показать поле
addfield_strokovoeString
}

setVisibility(default) { //отобразить в зависимости от настроек прав доступа
addfield_strokovoeString
}
*Перед применением видимости сначала проверяются права доступа. Это значит, что если поле недоступно по правам доступа, то оно не отобразится при использовании метода setVisibility(show). 


8. Изменение режима ввода комментария (setCommentMode)
//по умолчанию включено добавление публичныхкомментариев
setCommentMode: public

//по умолчанию включено добавление внутренних комментариев
//(применяется только для пользователей-сотрудников)
setCommentMode: private
СкриптНаЗаявке