ИЕРАРХИЧЕСКАЯ СТРУКТУРА РАБОТ (ИСР), АТРИБУТЫ И ЗНАЧЕНИЯ
Иерархическая структура работ
Таблица 1. Модель данных иерархической структуры работ
Поле | Тип | Описание |
---|---|---|
id | UUID v4 | Уникальный идентификатор ИСР |
parentId | UUID v4 | Уникальный идентификатор родительского узла |
code | string | Идентификатор работы |
type | string | Тип узла |
level | integer | Уровень вложенности узла |
indexNumber | integer | Индексный номер узла |
sortOrder | integer | Порядок сортировки узла |
values | Number | Идентификатор атрибута ИСР со значением |
criticalPath | boolean | Идентификатор критического пути узла |
materialPath | string | Путь материала узла |
curatorAccepted | boolean | Куратор принял маркер для узла |
Таблица 2. Типы записей в ИСР
Тип | Описание |
---|---|
work | Узел ИСР (Узел ИСР) – элемент структуры (суммарная задача), которая может содержать дочерние элементы (работы, вехи, драфты, узлы ИСР), определяющая иерархию и структуру графика. Старт, финиш, календарная длительность, прогресс определяется статусом, длительностью и последовательностью выполнения дочерних элементов. |
task | Работа - задача (операция), выполняемая в течение определенного времени, т.е. имеющая рабочую и календарную длительность выполнения, старт и финиш в качестве обязательных атрибутов. Прогресс работы может быть от 0 до 100, работа может принимать статусы «Не начата», «Выполняется», «Завершена». |
milestone_start | Веха старта – задача (операция), обладающая обязательным атрибутом старт (и не имеющая значение атрибута финиш), не имеющая рабочей и календарной длительности, означающая событие, предшествующее выполнению последующих работ или этапов. Прогресс вехи старта может быть 0 или 100, веха старта может принимать статусы «Не начата» и «Завершена». |
milestone_finish | Веха финиша – задача (операция), обладающая обязательным атрибутом финиш (и не имеющая значение атрибута старт), не имеющая рабочей и календарной длительности, означающая событие, завершающее выполнение предшествующих работ или этапов. Прогресс вехи старта может быть 0 или 100, веха старта может принимать статусы «Не начата» и «Завершена». |
draft | Драфт – задача (операция), не имеющая значений атрибутов старт и финиш. Атрибуты рабочей и календарной длительности могут быть как заполнены, так и отсутствовать для работы с данным типом. Драфт является «черновиком» работы, для которой пока не определены сроки ее выполнения. Прогресс драфта может быть только равен 0, возможный статус – «Не начата». |
sum | Суммарная работа – тип работ, предназначенный для объединения нескольких работ в одном или нескольких графиках. Суммарная задача может быть использована для представления графика 2 уровня, упрощения управления работами или для агрегации данных. |
Примеры использования
Пример: Получить список работ версии графика.
curl -X 'GET' \
'https://your-org.domain/public-api/wbs?epsId=bc1da5df-d644-461a-aa54-e60182195898' \
-H 'accept: application/json;odata.metadata=minimal;odata.streaming=true' \
-H 'x-version: 509' \
-H 'Authorization: your-api-key' \
-H 'x-tenant-id: 5db13376-ba5c-4fd5-ba7f-dc56347956ad'
Пример: Получить значения указанных атрибутов для работы с кодом A110.
Внимание! Не используйте одновременно attributeIds и select.
curl -X 'GET' \
'https://your-org.domain/public-api/wbs?epsId=bc1da5df-d644-461a-aa54-e60182195898 & \
attributesIds=513200c8-6f15-4628-8d6e-2768e14f2add & \
attributesIds=173be1d3-0afc-4156-8552-662a072b9980 & filter=code eq 'A110'' \
-H 'accept: application/json;odata.metadata=minimal;odata.streaming=true' \
-H 'x-version: 409' \
-H 'Authorization: your-api-key' \
-H 'x-tenant-id: 5db13376-ba5c-4fd5-ba7f-dc56347956ad'
Пример: Создать новую работу в версии графика.
curl -X 'POST' \
'https://your-org.domain/public-api/wbs' \
-H 'accept: application/json;odata.metadata=minimal;odata.streaming=true' \
-H 'x-version: 409' \
-H 'Authorization: your-api-key' \
-H 'x-tenant-id: 5db13376-ba5c-4fd5-ba7f-dc56347956ad' \
-H 'Content-Type: application/json;odata.metadata=minimal;odata.streaming=true' \
-d '{
"epsId": "bc1da5df-d644-461a-aa54-e60182195898",
"parentId": "2b73a1f8-833f-488c-9947-7fc1a4b76314",
"type": "task",
"name": "Заливка бетона",
"values": {
"eb3606f5-679c-4e4d-b9d1-072d5b988cfa": 27,
"481863c5-bd1d-44ac-b968-5ee5df7ea861": "Value of WBS attribute"
}
}'
javascript;
const epsPath = 'https://your-org.domain/public-api/wbs';
const baseHeaders = {
Authorization: 'your-api-key',
'x-tenant-id': '5db13376-ba5c-4fd5-ba7f-dc56347956ad',
'x-version': '409',
accept: 'application/json',
'Content-Type': 'application/json',
};
// Для создания работы (тип task) в корне структуры, в качестве родителя (parentId) установите идентификатор узла СПП (epsId)
// Если нужно вложить работу (тип task) в узел ИСР (тип work), то предварительно нужно получить список WBS через
// точку WBS-GET, скопировать идентификатор узла ИСР и вставить в parentId
/// При установке для создаваемой работы атрибутов и их значений,
/// получить доступные аттрибуты работ(точка входа WbsAttributes-GET) для версии графика
/// добавить в values нужный аттрибут и его значение
/// если аттрибут типа string - "Жёлтый"
/// если аттрибут типа date - значение даты в стандартизированном формате EPOCH Timestamp в миллисекундах (13 знаков)
/// если аттрибут типа number - число
const wbsCreateBody = {
epsId: '3cdd4b5d-f830-443e-9c49-2d4c6a356a85',
parentId: '50b44ff5-5b60-489b-acb8-5cf4bde12382',
code: 'Мой новый код',
type: 'task',
name: 'Моё имя для WBS',
values: {
'f76dad04-ab3a-4340-b80d-071cba968b60': 'Жёлтый',
'19c27ceb-8302-4a2c-8bf9-2f34c1aca508': 1728982800000,
'41054337-76cd-4393-99d0-ff90b5c79508': 16,
},
};
fetch(epsPath, { headers: baseHeaders, method: 'POST', body: JSON.stringify(wbsCreateBody) })
.then((response) => {
if (response.ok) {
return response.json();
} else {
throw new Error(`Ошибка: ${response.status}, ${response.statusText}`);
}
})
.then((wbs) => {
console.log(wbs);
})
.catch((error) => {
console.error(error.message);
});
Пример: Изменить существующую работу.
curl -X 'PUT' \
'https://your-org.domain/public-api/wbs/be69f9e6-5e81-4aec-959f-516bceb6e8b8' \
-H 'accept: application/json;odata.metadata=minimal;odata.streaming=true' \
-H 'x-version: 509' \
-H 'Authorization: your-api-key' \
-H 'x-tenant-id: 5db13376-ba5c-4fd5-ba7f-dc56347956ad' \
-H 'Content-Type: application/json;odata.metadata=minimal;odata.streaming=true' \
-d '{
"code":"Code001",
"name": "Заливка бетона"
"type":"milestone_start",
"parentId":"77b4a87b-21bf-40d7-bdf6-aad8c77d506e",
"values": {
"eb3606f5-679c-4e4d-b9d1-072d5b988cfa": "walls",
"481863c5-bd1d-44ac-b968-5ee5df7ea861": null
}
}'
Пример: Удалить запись из версии графика.
curl -X 'DELETE' \
'https://your-org.domain/public-api/wbs/be69f9e6-5e81-4aec-959f-516bceb6e8b8' \
-H 'accept: */*' \
-H 'x-version: 409' \
-H 'Authorization: your-api-key' \
-H 'x-tenant-id: 5db13376-ba5c-4fd5-ba7f-dc56347956ad'
Так же существует кастомная функция для поиска по идентификатору атрибута значения ИСР.
getById(values, 'Идентификатор атрибута ИСР')
Пример: В данном примере мы проверяем, что у ИСР должен быть атрибут идентификатор которого равен 624b6a37-f6a0-40a5-a2e1-4f2e6724167b и значение этого атрибута для ИСР эквивалентно значению Hotel building
curl -X 'GET' \
'https://your-org.domain/public-api/wbs?epsId=70d6cb44-00e9-4535-9949-2d5596f0988a&filter=getById(values, '624b6a37-f6a0-40a5-a2e1-4f2e6724167b') eq 'Hotel building'' \
-H 'accept: application/json;odata.metadata=minimal;odata.streaming=true' \
-H 'x-version: 507' \
-H 'Authorization: your-api-key' \
-H 'x-tenant-id: 5db13376-ba5c-4fd5-ba7f-dc56347956ad'
Пример: Существуют функции number('Строка') и boolean('Строка'), которые возвращают числовое и логическое значение соответственно.
curl -X 'GET' \
'https://your-org.domain/public-api/wbs?epsId=70d6cb44-00e9-4535-9949-2d5596f0988a&filter=number(getById(values, 'be69f9e6-5e81-4aec-959f-516bceb6e8b8')) gt 15' \
-H 'accept: application/json;odata.metadata=minimal;odata.streaming=true' \
-H 'x-version: 507' \
-H 'Authorization: your-api-key' \
-H 'x-tenant-id: 5db13376-ba5c-4fd5-ba7f-dc56347956ad'
Атрибуты
Таблица 3. Модель данных атрибута иерархической структуры работ
Поле | Тип | Описание |
---|---|---|
id | UUID v4 | Уникальный идентификатор атрибута |
epsId | UUID v4 | Идентификатор узла СПП |
label | string | Заголовок атрибута |
key | string | Уникальный строковый код атрибута |
type | string | Тип атрибута |
directoryId | UUID v4 | Идентификатор справочника |
directoryAttributeId | UUID v4 | Идентификатор атрибута в справочнике |
Таблица 4. Типы атрибутов ИСР
Тип | Описание |
---|---|
date | Дата в формате timestamp |
number | Число в формате float |
string | Строка |
money | Число в формате float |
boolean | Логический в формате 1 или 0 |
percentage | Процент |
indicator | Индикатор |
through | Сквозной |
Примеры использования
Пример: Получить список атрибутов работ для указанного узла СПП.
curl -X 'GET' \
'https://your-org.domain/public-api/wbs-attributes?epsId=5db13376-ba5c-4fd5-ba7f-dc56347956ad' \
-H 'accept: application/json;odata.metadata=minimal;odata.streaming=true' \
-H 'x-version: 409' \
-H 'Authorization: your-api-key' \
-H 'x-tenant-id: 5db13376-ba5c-4fd5-ba7f-dc56347956ad' \
-H 'Content-Type: application/json;odata.metadata=minimal;odata.streaming=true'
Пример: Получить список атрибутов работ типа date для указанного узла СПП с помощью протокола OData.
curl -X 'GET' \
''https://your-org.domain/public-api/wbs-attributes?epsId=5db13376-ba5c-4fd5-ba7f-dc56347956ad&filter=type eq 'date''' \
-H 'accept: application/json;odata.metadata=minimal;odata.streaming=true' \
-H 'x-version: 409' \
-H 'Authorization: your-api-key' \
-H 'x-tenant-id: 5db13376-ba5c-4fd5-ba7f-dc56347956ad' \
-H 'Content-Type: application/json;odata.metadata=minimal;odata.streaming=true'
Пример: Создать новый атрибут.
curl -X 'POST' \
'https://your-org.domain/public-api/wbs-attributes' \
-H 'accept: application/json;odata.metadata=minimal;odata.streaming=true' \
-H 'x-version: 409' \
-H 'Authorization: your-api-key' \
-H 'x-tenant-id: 5db13376-ba5c-4fd5-ba7f-dc56347956ad' \
-H 'Content-Type: application/json;odata.metadata=minimal;odata.streaming=true' \
-d '{
"epsId": "5db13376-ba5c-4fd5-ba7f-dc56347956ad",
"label": "Дата выпуска документации",
"type": "date",
}'
Пример: Изменить наименование существующего атрибута.
curl -X 'PUT' \
'https://your-org.domain/public-api/wbs-attributes/3fa85f64-5717-4562-b3fc-2c963f66afa6' \
-H 'accept: application/json;odata.metadata=minimal;odata.streaming=true' \
-H 'x-version: 409' \
-H 'Authorization: your-api-key' \
-H 'x-tenant-id: 5db13376-ba5c-4fd5-ba7f-dc56347956ad' \
-H 'Content-Type: application/json;odata.metadata=minimal;odata.streaming=true' \
-d '{
"label": "Дата выпуска документации",
}'
Пример: Удалить существующий пользовательский атрибут.
curl -X 'DELETE' \
'https://your-org.domain/public-api/wbs-attributes/3fa85f64-5717-4562-b3fc-2c963f66afa6' \
-H 'accept: */*' \
-H 'x-version: 409' \
-H 'Authorization: your-api-key' \
-H 'x-tenant-id: 5db13376-ba5c-4fd5-ba7f-dc56347956ad'
Связи
Таблица 5. Модель данных связей иерархической структуры работ
Поле | Тип | Описание |
---|---|---|
id | UUID v4 | Уникальный идентификатор связи |
versionId | UUID v4 | Идентификатор версии графика |
wbsId | UUID v4 | Идентификатор узла ИСР |
linkedWbsId | UUID v4 | Идентификатор узла ИСР, с которым устанавливается связь |
type | string | Тип связи |
lag | Число | Задержка между работами в часах |
Таблица 6. Типы связей
Тип | Описание |
---|---|
fs | Финиш-Старт - работа последователь начинается после завершения работы-предшественника |
ss | Старт-Старт - работа последователь начинается одновременно с работой-предшественником |
ff | Финиш-Финиш - работа последователь заканчивается одновременно с работой-предшественником |
sf | Старт-Финиш - работа последователь заканчивается до начала работы-предшественника |
Примеры использования
Пример: Получить список связей узла ИСР по его идентификатору.
curl -X 'GET' \
'https://your-org.domain/public-api/wbs-relations/5db13376-ba5c-4fd5-ba7f-dc56347956ad' \
-H 'accept: application/json;odata.metadata=minimal;odata.streaming=true' \
-H 'x-version: 503' \
-H 'Authorization: your-api-key' \
-H 'x-tenant-id: 5db13376-ba5c-4fd5-ba7f-dc56347956ad' \
-H 'Content-Type: application/json;odata.metadata=minimal;odata.streaming=true'
Пример: Получить список связей узлов ИСР типа fs для указанной версии графика.
curl -X 'GET' \
'https://your-org.domain/public-api/wbs-relations?filter=type eq 'fs' and versionId=1a986208-0500-43e4-a4cf-66611ca3fea5' \
-H 'accept: application/json;odata.metadata=minimal;odata.streaming=true' \
-H 'x-version: 409' \
-H 'Authorization: your-api-key' \
-H 'x-tenant-id: 5db13376-ba5c-4fd5-ba7f-dc56347956ad' \
-H 'Content-Type: application/json;odata.metadata=minimal;odata.streaming=true'
Пример: Создать новую связь между узлами ИСР.
curl -X 'POST' \
'https://your-org.domain/public-api/wbs-relations' \
-H 'accept: application/json;odata.metadata=minimal;odata.streaming=true' \
-H 'x-version: 503' \
-H 'Authorization: your-api-key' \
-H 'x-tenant-id: 5db13376-ba5c-4fd5-ba7f-dc56347956ad' \
-H 'Content-Type: application/json;odata.metadata=minimal;odata.streaming=true' \
-d '{
"versionId": "5db13376-ba5c-4fd5-ba7f-dc56347956ad",
"wbsId": "8276566e-0ec8-496f-ae18-7183e43ebd6d",
"linkedWbsId": "bdb66e70-0231-411f-a3de-68c8fc341676",
"type": "fs",
"lag": 0
}'
Пример: Изменить параметры связи между узлами ИСР.
curl -X 'PUT' \
'https://your-org.domain/public-api/wbs-relations/36b60d7c-fba9-4fb6-8d5a-a054f2043827' \
-H 'accept: application/json;odata.metadata=minimal;odata.streaming=true' \
-H 'x-version: 503' \
-H 'Authorization: your-api-key' \
-H 'x-tenant-id: 5db13376-ba5c-4fd5-ba7f-dc56347956ad' \
-H 'Content-Type: application/json;odata.metadata=minimal;odata.streaming=true' \
-d '{
"type": "ff",
"lag": 25
}'
Пример: Удалить связь между узлами ИСР.
curl -X 'DELETE' \
'https://your-org.domain/public-api/wbs-relations/36b60d7c-fba9-4fb6-8d5a-a054f2043827' \
-H 'accept: */*' \
-H 'x-version: 503' \
-H 'Authorization: your-api-key' \
-H 'x-tenant-id: 5db13376-ba5c-4fd5-ba7f-dc56347956ad'