Показатель на согласовании

Материал из 3v-wiki
Перейти к навигации Перейти к поиску

Возможности работы с показателями во многом схожи с возможностями по работе со справочниками на стороннем API
Только для работы с показателями, при получении данных, не учитываются orderFields и limit, а фильтры всегда будут передаваться с условием Default.
Методы сохранения данных и получения структуры идентичны.
Примером данной реализации является контроллер WorkflowDataSourceView сервиса Workflow.

Настройка показателя на стороннем API на примере Workflow (Согласования)

Ниже будут описаны шаги по настройке показателя на основе объекта согласования. JSON согласования, на основе которого будет строиться показатель указан ниже.

JSON согласования
  1 {
  2   "template": {
  3     "schema": {
  4       "states": [
  5         {
  6           "icon": {
  7             "type": "svg",
  8             "data": "<svg width='10' height='10' viewBox='0 0 10 10' fill='none' xmlns='http://www.w3.org/2000/svg'><path d='M0 10L1.19249e-07 0L10 1.19249e-07L6 5L10 10L0 10Z' fill='#F08513'/></svg>"
  9           },
 10           "id": 1,
 11           "dataAvailabilitySettings": null,
 12           "name": "Черновик"
 13         },
 14         {
 15           "icon": {
 16             "type": "svg",
 17             "data": "<svg width='10' height='10' viewBox='0 0 10 10' fill='none' xmlns='http://www.w3.org/2000/svg'><path d='M0 10L1.19249e-07 0L10 1.19249e-07L6 5L10 10L0 10Z' fill='#0066DD'/></svg>"
 18           },
 19           "id": 2,
 20           "dataAvailabilitySettings": {
 21             "disableEdit": true
 22           },
 23           "name": "На согласовании"
 24         },
 25         {
 26           "icon": {
 27             "type": "svg",
 28             "data": "<svg width='10' height='10' viewBox='0 0 10 10' fill='none' xmlns='http://www.w3.org/2000/svg'><path d='M0 10L1.19249e-07 0L10 1.19249e-07L6 5L10 10L0 10Z' fill='#05C19F'/></svg>"
 29           },
 30           "id": 3,
 31           "dataAvailabilitySettings": {
 32             "disableEdit": true
 33           },
 34           "name": "Согласовано"
 35         },
 36         {
 37           "icon": {
 38             "type": "svg",
 39             "data": "<svg width='10' height='10' viewBox='0 0 10 10' fill='none' xmlns='http://www.w3.org/2000/svg'><path d='M0 10L1.19249e-07 0L10 1.19249e-07L6 5L10 10L0 10Z' fill='#8053DF'/></svg>"
 40           },
 41           "id": 4,
 42           "dataAvailabilitySettings": null,
 43           "name": "На доработке"
 44         }
 45       ],
 46       "steps": [
 47         {
 48           "fromStateId": 1,
 49           "toStateId": 2,
 50           "id": 1,
 51           "name": "Отправить на согласование"
 52         },
 53         {
 54           "fromStateId": 2,
 55           "toStateId": 3,
 56           "id": 2,
 57           "name": "Согласовать"
 58         },
 59         {
 60           "fromStateId": 2,
 61           "toStateId": 4,
 62           "id": 3,
 63           "name": "Отклонить"
 64         },
 65         {
 66           "fromStateId": 4,
 67           "toStateId": 2,
 68           "id": 4,
 69           "name": "Вернуть на согласование"
 70         },
 71         {
 72           "fromStateId": 3,
 73           "toStateId": 1,
 74           "id": 5,
 75           "name": "Вернуть на Черновик"
 76         }
 77       ],
 78       "startStateId": 1
 79     },
 80     "permissions": [
 81       {
 82         "stepId": 1,
 83         "subjectId": "USERS",
 84         "type": "Allow"
 85       },
 86       {
 87         "stepId": 2,
 88         "subjectId": "APPROVERS",
 89         "type": "Allow"
 90       },
 91       {
 92         "stepId": 3,
 93         "subjectId": "APPROVERS",
 94         "type": "Allow"
 95       },
 96       {
 97         "stepId": 4,
 98         "subjectId": "USERS",
 99         "type": "Allow"
100       },
101       {
102         "stepId": 5,
103         "subjectId": "APPROVERS",
104         "type": "Allow"
105       }
106     ],
107     "parameters": {
108       "definitions": [
109         {
110           "id": 2,
111           "name": "Сотрудники",
112           "dictionaryId": 16,
113           "discriminator": "DictionaryParameterModel"
114         }
115       ],
116       "defaultValues": [
117         {
118           "parameterId": 2,
119           "value": 2
120         }
121       ]
122     },
123     "notifications": null
124   },
125   "forceWorkflowNotificationTemplate": false
126 }

Создание соединения с источником

Создаем объект "Соединение с источником". Подробнее о создании данного объекта можно узнать в статье Соединение с источником. Затем в JSON необходимо добавить:

1 {
2   "dbType": "Web",
3   "connectionString": "http://workflow/api/WorkflowDataSourceView/"
4 }

Создание справочника фактов

Создаем справочник, где будут храниться все необходимые атрибуты согласования. Подробнее о создании справочника можно узнать в статье Создание нового справочника. Например, вынесем в справочник "Факты_согласование" Идентификатор состояния, Статус и Комментарий:

Факты согласование.png







Создание показателя

Создаем показатель, в котором измерениями будут являться все справочники, указанные в согласовании в качестве параметров. В данном случае в согласовании указан один параметр со справочником "Сотрудники", он и будет являться измерением показателя. Справочником фактов будет служить справочник "Факты_согласование", созданный на предыдущем шаге. В справочнике "Факты_согласование" выбираем все элементы. Для элемента "Идентификатор состояния" задаем числовой тип данных, для элементов "Статус" и "Комментарий" - текстовый:

Конструктор показателя согласования.png












Далее донастраиваем показатель в JSON:
1. В поле "virtualTable": {"name": } указываем идентификатор согласования ("215").
2. В поле "virtualTable": {"connectionId": } указываем идентификатор объекта "Соединение с источником", созданного на первом шаге (Создание соединения с источником) ("233").
3. В поле "virtualTable": {"columns": []} находим колонку с измерением, которое является параметром в согласовании. В поле "virtualTable": {"columns": [{"name"}]} указываем идентификатор этого параметра в согласовании ("2").
4. В поле "virtualTable": {"columns": []} находим колонки с фактами (элементами справочника "Факты_согласование"). В поле "virtualTable": {"columns": [{"name"}]} указываем "StateId", "StateName", "StateComment" соответственно для трех элементов справочника, также есть возможность указать "StateChangedDate".

JSON показателя согласования.png






















Результат:

Показатель согласования.png