Перейти к основному содержимому

Схемы поведения полей

Эта функция позволяет настраивать схемы поведения полей на основе условий, а также задавать определенные сценарии поведения поля.

Управление схемами осуществляется через настройки Workspace Global Settings и выбор пункта Field Behaviors в меню слева.

Страница представляет собой список всех схем поведения полей, имеющихся в тенанте.

Создание схемы

На главной странице настройки нажмите кнопку Add Field Configurations

В открывшемся окне заполните поля Field Behavior Name, Description и нажмите Confirm.

Новая схема появится в общем списке.

Настройка

  1. Нажмите на кнопку Config на интересующей схеме.

  1. Откроется окно конфигурации схемы. В разделе Mapped Issue Type кнопкой выберите те типы задач, на которые должна распространяться схема.

  1. В поле Field Name выберите из списка нужное поле и добавьте его в список кнопкой Add.

  1. В списке добавленных полей нажмите Config на интересующем поле. Откроется страница конфигурации поля.

  1. Здесь на вкладке Field Behavior можно указать поведение поля по-умолчанию в разделе Default Behavior, а так же с помощью кнопки Add behavior condition добавить условие поведения, которое будет иметь преимущество перед поведением по-умолчанию.
  2. На вкладке Server Side Script можно добавить поведенческий скрипт.
  3. Нажатие кнопки Save сохранить все настройки схемы.

Поведенческие скрипты

Введение

Содержимое ввода серверного скрипта - это содержимое кода.

async function (itemId, transition, user, itemTypeId, item, roles, workspace) {
// Code...
}

В соответствии с предоставленными параметрами, совместимыми с функциональными возможностями предоставляемыми системой, верните соответствующее поведение поля (required, readonly, hidden)

Базовый пример

  • Определить, является ли текущий пользователь кем-то
// если пользователь milo, onion, viktor, то требуется
const users = await apis.getUsers(['milo', 'onion', 'viktor']);
const isMatch = !!users.find(u => u.usename === user.usename );
return {
required: isMatch,
readonly: false,
hidden: false
}

  • Определить, есть ли у текущего пользователя какие-то роли
// если пользователь не QA, то только чтение
const roles = await apis.getRolesByUserId(user.objectId));
const notMatch = !roles.find(role => role.name === 'QA' );
return {
required: false,
readonly: notMatch,
hidden: false
}

  • Определение статуса рабочего процесса
// если имя рабочего процесса текущего элемента — «system default workflow», а statusName — «closed». Затем скрыто
const [workflow, item] = await Promise.all([
apis.getWorkflowIdByItemId(itemId)),
apis.getItem(itemId))
])
const isMatch = workflow?.name === 'system default workflow' && 'closed' === item?.statusName
return {
required: false,
readonly: false,
hidden: isMatch
}

  • Определение действий рабочего процесса
// когда текущий рабочий процесс элемента actionName имеет значение «default workflow» и переход в ['new', 'processing'], затем скрыт
const workflow = await apis.getWorkflowIdByItemId(itemId));
const isMatch = workflow?.name ==== 'default workflow' && ['new', 'processing'].includes (transition)
return {
required: false,
readonly: false,
hidden: isMatch
}

Описание параметров

В Code(Script) можно использовать 7 параметров: itemId, transition, user, itemTypeId, item, roles, workspace.

  • itemId - идентификатор элемента

  • transition - название действия процесса

  • user - информация о текущем пользователе

    • user.username - имя пользователя

    • user.objectId - идентификатор объекта пользователя

  • itemTypeId —— идентификатор itemType

  • item - Базовые данные о событии, конкретные значения см.getItem

  • roles - роли текущего пользователя

  • workspace - ID пространства, в котором находится папка

API

Вызов метода apis.[method]

Получить пользователей - getUsers

Принять один параметр usernameList, тип — массив, возвращать связанную информацию о пользователях, содержать имя пользователя и идентификатор.

Вызов:

// query 
const users = await apis.getUsers(['milo', 'viktor']);
console.log(users);
// return
// [
// {
// "users": 'milo',
// "id": 'ssss'
// },
// {
// "username": 'viktor',
// "id": 'ssss'
// }
// ]

Получить роли пользователей - getRolesByUserId

Принять один параметр userId, ввести строку идентификатора, вернуть идентификатор пользователя, соответствующие роли, содержащие имя роли и идентификатор.

Вызов:

const roles = await apis.getRolesByUserId(user.objectId);
console.log(roles);
// return
// [
// {
// "name": 'Developer',
// "id": 'xxxx'
// },
// ]

Получить рабочий процесс - getWorkflow

Принять один параметр name, тип — строка, возвратить информацию о рабочем процессе, содержащую имя рабочего процесса, действие и статус.

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

Вызов:

const workflows = await apis.getWorkflow('default workflow');
console.log(workflows);
// return
[
{
"name": "default workflow",
"transitions": [
{
"name": "start",
"sourceId": "ibPGqGQ4Bn-default-node"
},
{
"name": "new",
"sourceId": "U7gr7oo34p-default-node"
},
{
"name": "processing",
"sourceId": "ibPGqGQ4Bn-default-node"
},
{
"name": "solved",
"sourceId": "ibPGqGQ4Bn-default-node"
},
{
"name": "closed",
"sourceId": "ibPGqGQ4Bn-default-node"
},
],
"nodes": [
{
"key": "start",
"name": "start",
"type": "Status",
"nodeType": "Start",
"statusId": "start_node"
},
{
"key": "Start",
"name": "new",
"type": "Status",
"nodeType": "Task",
"statusId": "ibPGqGQ4Bn"
},
{
"key": "InProgress",
"name": "processing",
"type": "Status",
"nodeType": "Task",
"statusId": "U7gr7oo34p"
},
{
"key": "InProgress",
"name": "solved",
"type": "Status",
"nodeType": "Task",
"statusId": "PZSKl8F9IF"
},
{
"key": "InProgress",
"name": "cloed",
"type": "Status",
"nodeType": "Task",
"statusId": "hfrwOrXaR1"
}
]
}
]

Рабочий процесс получения элемента - getWorkflowIdByItemId

Принять один параметр itemId, возвратить информацию о рабочем процессе элемента, содержащую имя, действие и статус .

Обратите внимание: результат только один.

Вызов:

const currentWorkflow = await apis.getWorkflowIdByItemId(itemId);
console.log(currentWorkflow);
// return
{
"name": "someone",
"transitions": [
{
"name": "start",
"sourceId": "ibPGqGQ4Bn-default-node"
},
{
"name": "new",
"sourceId": "U7gr7oo34p-default-node"
},
{
"name": "processing",
"sourceId": "ibPGqGQ4Bn-default-node"
},
{
"name": "solved",
"sourceId": "ibPGqGQ4Bn-default-node"
},
{
"name": "closed",
"sourceId": "ibPGqGQ4Bn-default-node"
},
],
"nodes": [
{
"key": "start",
"name": "start",
"type": "Status",
"nodeType": "Start",
"statusId": "start_node"
},
{
"key": "Start",
"name": "new",
"type": "Status",
"nodeType": "Task",
"statusId": "ibPGqGQ4Bn"
},
{
"key": "InProgress",
"name": "processing",
"type": "Status",
"nodeType": "Task",
"statusId": "U7gr7oo34p"
},
{
"key": "InProgress",
"name": "solved",
"type": "Status",
"nodeType": "Task",
"statusId": "PZSKl8F9IF"
},
{
"key": "InProgress",
"name": "closed",
"type": "Status",
"nodeType": "Task",
"statusId": "hfrwOrXaR1"
}
]
}

Получить информацию об элементе - getItem

Принять один параметр itemId, вернуть информацию об элементе.

Вызов:


// получить текущий элемент
const currentItem = await apis.getItem(itemId);
// получить какой-то элемент
const targetItem = await apis.getItem('someoneId');
console.log(targetItem);

// вернуться
{
"NB_YWCLYJ": [
"agree"
],
"NB_YWRLYS": 3,
"NB_KJBJLSPSJ": 1622045284783,
"COMMON_CONTEXT": [
{
"type": "paragraph",
"children": [
{
"text": "sdsdds"
}
]
}
],
"business_team_workload_man_day": 1,
"id": "34udKom2iv",
"name": "081201",
"workspace": "ZvmaaCalNB",
"itemType": "uBLIrv9hHs",
"status": "eMQzlbwmsw"
}

Результат скрипта

Нужно вернуть required, readonly, hidden. Есть поведение поля эффекта.

return {
// required
required: false,
// readonly
readonly: false,
// hidden
hidden: true
}