Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье представлена разбивка структуры определения для элементов Рефлектора. Используйте эту ссылку при создании или обновлении элементов Рефлектора программным способом с помощью API создания элемента, получения определенияэлементов или обновления определений элементов .
Замечание
Рефлектор также известен как активатор. Оба имени ссылаются на один и тот же тип элемента в этой статье.
Обзор
Элемент Reflex (активатор) отслеживает потоковые данные и активирует уведомления или действия при выполнении определенных условий. Определение описывает конвейер обработки, состоящий из взаимосвязанных сущностей:
- Контейнеры упорядочивают связанные компоненты в логические группы и предоставляют иерархическую структуру.
- Источники данных подключаются к потоковым данным (симуляторы, запросы KQL, Концентратор реального времени или потоки событий).
- События фильтруют и преобразуют необработанные данные из источников.
- Объекты представляют реальные сущности, которые вы отслеживаете (например, пакеты, датчики или пользователи).
- Атрибуты извлекают или вычисляют свойства из событий для каждого объекта.
- Правила определяют условия, которые активируют такие действия, как сообщения Teams, сообщения электронной почты или выполнение элементов Fabric.
Следующая иерархия иллюстрирует связь между этими сущностями:
Container
├── Data Source (simulator, KQL, Real-time Hub, or Eventstream)
├── Event View (selects/transforms events from the data source)
├── Object View (represents an entity, e.g., "Package")
│ ├── Attribute View (identity field, e.g., "PackageId")
│ ├── Attribute View (measured value, e.g., "Temperature")
│ └── Rule View (trigger + action, e.g., "Too hot → send Teams message")
└── Action (optional Fabric item reference, e.g., a Pipeline to invoke)
Сущности ссылаются друг на друга uniqueIdentifier, которые используются для передачи источников данных событиям, событиям объектов и объектам в правила.
Поддерживаемые форматы
Рефлекторные элементы поддерживают json формат.
Части определения
Определение элемента Рефлектора состоит из следующих частей:
| Путь к части определения | Тип | Обязательно | Description |
|---|---|---|---|
ReflexEntities.json |
ReflexEntities (JSON) | true | Содержит полную конфигурацию активатора, включая контейнеры, источники данных, объекты, атрибуты и правила. |
.platform |
Метаданные платформы (JSON) | false | Содержит сведения о метаданных платформы Fabric. |
Каждая часть определения создается следующим образом:
-
Путь: имя файла, например:
ReflexEntities.json - Тип полезных данных: InlineBase64
- Полезные данные: содержимое JSON в кодировке Base64. См. примеры декодированных полезных данных далее в этой статье.
Часть платформы
Часть .platform содержит метаданные об элементе.
- Создание элемента с определением учитывает файл платформы, если он указан (не является обязательным).
- Получение определения элементов всегда возвращает файл платформы.
-
Обновление определения элемента принимает файл платформы, если он указан, но только если задан параметр URL- адреса
updateMetadata=true.
Структура рефлекторности
Часть ReflexEntities.json содержит массив JSON объектов сущностей. Каждая сущность представляет компонент в конвейере потоковых данных. При декодировании из Base64 содержимое имеет следующую структуру верхнего уровня:
[
{ "uniqueIdentifier": "<guid>", "payload": { ... }, "type": "<entity-type>" },
{ "uniqueIdentifier": "<guid>", "payload": { ... }, "type": "<entity-type>" }
]
Типы сущностей
Поддерживаются следующие типы сущностей:
| Тип | Description |
|---|---|
container-v1 |
Контейнер верхнего уровня, который упорядочивает связанные компоненты. |
simulatorSource-v1 |
Имитированный источник данных для тестирования и демонстраций. |
kqlSource-v1 |
Источник данных на основе запросов KQL, подключенный к eventhouse. |
realTimeHubSource-v1 |
Источник данных Концентратора реального времени для событий рабочей области. |
eventstreamSource-v1 |
Источник данных eventstream, подключенный к потоку событий Fabric. |
fabricItemAction-v1 |
Действие элемента структуры, которое может вызывать правила. |
timeSeriesView-v1 |
Основной стандартный блок, определяющий события, объекты, атрибуты или правила. |
Общие свойства сущности
Все сущности совместно используют следующие свойства верхнего уровня:
| Недвижимость | Тип | Обязательно | Description |
|---|---|---|---|
uniqueIdentifier |
строка (GUID) | true | Уникальный идентификатор сущности. Другие сущности ссылались на это значение для установления связей. |
payload |
объект | true | Данные конфигурации для конкретной сущности. Структура зависит от типа сущности. |
type |
струна | true | Тип сущности (например, container-v1, timeSeriesView-v1). |
Родительские ссылки
Сущности ссылались на своих родителей с помощью двух свойств:
| Недвижимость | Тип | Description |
|---|---|---|
parentContainer.targetUniqueIdentifier |
строка (GUID) | Ссылается на container-v1 сущность. Присутствует во всех сущностях, кроме самого контейнера. |
parentObject.targetUniqueIdentifier |
строка (GUID) | Ссылается на представление временных Object рядов. Присутствует в представлениях атрибутов и правил для связывания их с объектом, к которому они относятся. |
Оба свойства используют uniqueIdentifier целевую сущность для установления связи.
Сущность контейнера (container-v1)
Контейнеры упорядочивают связанные компоненты в логические группы в определении Рефлектора и предоставляют иерархическую структуру. Каждая другая сущность ссылается на контейнер через его parentContainer свойство.
Свойства полезных данных:
| Недвижимость | Тип | Обязательно | Description |
|---|---|---|---|
name |
струна | true | Отображаемое имя контейнера. |
type |
струна | true | Классификация контейнеров. Примеры: samples, kqlQueries. |
Example:
{
"uniqueIdentifier": "00aa00aa-bb11-cc22-dd33-44ee44ee44ee",
"payload": {
"name": "Package delivery sample",
"type": "samples"
},
"type": "container-v1"
}
Сущности источника данных
Сущности источника данных определяют, где элемент Reflex получает данные потоковой передачи. Они определяют источники данных, к которым подключается элемент, и из которого он получает данные. Тип сущности определяет необходимую конфигурацию подключения. Поддерживаются следующие типы источников данных:
| Тип источника | Description |
|---|---|
Источник симулятора (simulatorSource-v1) |
Создает имитированные данные для тестирования. |
Источник KQL (kqlSource-v1) |
Запрашивает данные из базы данных KQL Eventhouse. |
Источник Центра реального времени (realTimeHubSource-v1) |
Отслеживает события рабочей области из Концентратора реального времени. |
Источник eventstream (eventstreamSource-v1) |
Потоковая передача событий из потока событий Fabric. |
Источник симулятора (simulatorSource-v1)
Создает имитированные потоковые данные для тестирования. Этот тип источника полезен для создания прототипов, не подключаясь к динамическому источнику данных.
В следующей таблице описываются свойства полезных simulatorSource-v1 данных:
| Недвижимость | Тип | Обязательно | Description |
|---|---|---|---|
name |
струна | true | Отображаемое имя источника данных. |
runSettings |
объект | false | Конфигурация выполнения. |
runSettings.startTime |
string (ISO 8601) | false | Когда начинается создание данных. |
runSettings.stopTime |
string (ISO 8601) | false | Когда следует прекратить создание данных. |
version |
струна | false | Идентификатор версии (например, V2_0). |
type |
струна | true | Тип имитированных данных (например, PackageShipment). |
parentContainer |
объект | true | Ссылка на родительский контейнер. |
parentContainer.targetUniqueIdentifier |
строка (GUID) | true |
uniqueIdentifier родительской сущности контейнера. |
В следующем примере показан источник симулятора, который создает события доставки пакетов в период с 21 октября 2025 г. по 4 ноября 2025 г.
{
"uniqueIdentifier": "11bb11bb-cc22-dd33-ee44-55ff55ff55ff",
"payload": {
"name": "Package delivery",
"runSettings": {
"startTime": "2025-10-21T12:03:31.9271568Z",
"stopTime": "2025-11-04T15:03:31.03Z"
},
"version": "V2_0",
"type": "PackageShipment",
"parentContainer": {
"targetUniqueIdentifier": "00aa00aa-bb11-cc22-dd33-44ee44ee44ee"
}
},
"type": "simulatorSource-v1"
}
Источник KQL (kqlSource-v1)
Подключается к базе данных KQL в хранилище событий, чтобы запрашивать потоковую передачу данных по повторяющимся интервалам.
В следующей таблице описываются свойства полезных kqlSource-v1 данных:
| Недвижимость | Тип | Обязательно | Description |
|---|---|---|---|
name |
струна | true | Отображаемое имя источника данных. |
runSettings |
объект | false | Параметры выполнения запроса. |
runSettings.executionIntervalInSeconds |
число/номер | false | Как часто выполнять запрос в секундах. |
query.queryString |
струна | true | Выполняемый запрос KQL. |
eventhouseItem |
объект | true | Ссылка на элемент Eventhouse. |
eventhouseItem.targetUniqueIdentifier |
строка (GUID) | true |
uniqueIdentifier элемента Eventhouse. |
parentContainer |
объект | true | Ссылка на родительский контейнер. |
parentContainer.targetUniqueIdentifier |
строка (GUID) | true |
uniqueIdentifier родительской сущности контейнера. |
В следующем примере показан источник KQL, который запрашивает eventhouse каждые 60 секунд для последних данных датчика:
{
"uniqueIdentifier": "cccccccc-2222-3333-4444-dddddddddddd",
"payload": {
"name": "Sensor telemetry query",
"runSettings": {
"executionIntervalInSeconds": 60
},
"query": {
"queryString": "SensorData | where Timestamp > ago(5m)"
},
"eventhouseItem": {
"targetUniqueIdentifier": "d3d3d3d3-eeee-ffff-aaaa-b4b4b4b4b4b4"
},
"parentContainer": {
"targetUniqueIdentifier": "00aa00aa-bb11-cc22-dd33-44ee44ee44ee"
}
},
"type": "kqlSource-v1"
}
Источник Центра реального времени (realTimeHubSource-v1)
Подключается к источнику данных Концентратора в режиме реального времени для мониторинга событий рабочей области, таких как создание элементов, обновление или удаление.
В следующей таблице описываются свойства полезных realTimeHubSource-v1 данных:
| Недвижимость | Тип | Обязательно | Description |
|---|---|---|---|
name |
струна | true | Отображаемое имя источника данных. |
connection |
объект | true | Конфигурация подключения Концентратора реального времени. |
connection.scope |
струна | true | Область событий (например, Workspace). |
connection.tenantId |
строка (GUID) | true | Azure идентификатор клиента. |
connection.workspaceId |
строка (GUID) | true | Идентификатор рабочей области Fabric. |
connection.eventGroupType |
струна | true | Тип группы событий (например, Microsoft.Fabric.WorkspaceEvents). |
filterSettings |
объект | true | Конфигурация фильтрации событий. |
filterSettings.eventTypes |
массив | true | Массив типов событий для мониторинга. |
filterSettings.eventTypes[].name |
струна | true | Имя типа события (например, Microsoft.Fabric.ItemCreateSucceeded). |
filterSettings.filters |
массив | false | Дополнительные фильтры для применения. |
parentContainer |
объект | true | Ссылка на родительский контейнер. |
parentContainer.targetUniqueIdentifier |
строка (GUID) | true |
uniqueIdentifier родительской сущности контейнера. |
В следующем примере показан источник Концентратора реального времени, который отслеживает события создания и обновления элементов в рабочей области:
{
"uniqueIdentifier": "dddddddd-3333-4444-5555-eeeeeeeeeeee",
"payload": {
"name": "Workspace event monitor",
"connection": {
"scope": "Workspace",
"tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
"workspaceId": "a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1",
"eventGroupType": "Microsoft.Fabric.WorkspaceEvents"
},
"filterSettings": {
"eventTypes": [
{ "name": "Microsoft.Fabric.ItemCreateSucceeded" },
{ "name": "Microsoft.Fabric.ItemUpdateSucceeded" }
],
"filters": []
},
"parentContainer": {
"targetUniqueIdentifier": "00aa00aa-bb11-cc22-dd33-44ee44ee44ee"
}
},
"type": "realTimeHubSource-v1"
}
Источник eventstream (eventstreamSource-v1)
Подключается к элементу Eventstream Fabric в качестве источника данных для потоковых событий.
В следующей таблице описываются свойства полезных eventstreamSource-v1 данных:
| Недвижимость | Тип | Обязательно | Description |
|---|---|---|---|
name |
струна | true | Отображаемое имя источника данных. |
metadata |
объект | true | Метаданные подключения eventstream. |
metadata.eventstreamArtifactId |
строка (GUID) | true | Идентификатор артефакта Eventstream Fabric. |
parentContainer |
объект | true | Ссылка на родительский контейнер. |
parentContainer.targetUniqueIdentifier |
строка (GUID) | true |
uniqueIdentifier родительской сущности контейнера. |
В следующем примере показан источник событий, подключенный к потоку событий Fabric:
{
"uniqueIdentifier": "eeeeeeee-4444-5555-6666-ffffffffffff",
"payload": {
"name": "IoT device stream",
"metadata": {
"eventstreamArtifactId": "c2c2c2c2-dddd-eeee-ffff-a3a3a3a3a3a3"
},
"parentContainer": {
"targetUniqueIdentifier": "00aa00aa-bb11-cc22-dd33-44ee44ee44ee"
}
},
"type": "eventstreamSource-v1"
}
Сущности действия
Действие элемента Структуры (fabricItemAction-v1)
Определяет элемент Fabric (например, конвейер или записную книжку), который может вызываться правилами в качестве действия. После определения сущности действия элемента Fabric правила могут ссылаться на его uniqueIdentifier выполнение при выполнении условий.
В следующей таблице описываются свойства полезных fabricItemAction-v1 данных:
| Недвижимость | Тип | Обязательно | Description |
|---|---|---|---|
name |
струна | true | Отображаемое имя действия. |
fabricItem |
объект | true | Ссылка на элемент Fabric для выполнения. |
fabricItem.itemId |
строка (GUID) | true | Идентификатор элемента Структуры. |
fabricItem.workspaceId |
строка (GUID) | true | Рабочая область, содержащая элемент. |
fabricItem.itemType |
струна | true | Тип элемента Fabric (например, Pipeline). |
jobType |
струна | true | Тип выполняемого задания (например, Pipeline). |
parentContainer |
объект | true | Ссылка на родительский контейнер. |
parentContainer.targetUniqueIdentifier |
строка (GUID) | true |
uniqueIdentifier родительской сущности контейнера. |
В следующем примере показано действие элемента Fabric, которое ссылается на конвейер для запуска при активации правила:
{
"uniqueIdentifier": "ffffffff-5555-6666-7777-aaaaaaaaaaaa",
"payload": {
"name": "Run alert pipeline",
"fabricItem": {
"itemId": "b1b1b1b1-cccc-dddd-eeee-f2f2f2f2f2f2",
"workspaceId": "a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1",
"itemType": "Pipeline"
},
"jobType": "Pipeline",
"parentContainer": {
"targetUniqueIdentifier": "00aa00aa-bb11-cc22-dd33-44ee44ee44ee"
}
},
"type": "fabricItemAction-v1"
}
Сущности представления временных рядов (timeSeriesView-v1)
Представления временных рядов — это основные стандартные блоки, определяющие, как данные передаются через конвейер Активатора. Представление временных рядов может представлять события, объекты, атрибуты или правила.
Общие свойства представления временных рядов
Все сущности представления временных рядов используют следующие свойства полезных данных:
| Недвижимость | Тип | Обязательно | Description |
|---|---|---|---|
name |
струна | true | Отображаемое имя представления. |
parentContainer |
объект | true | Ссылка на родительский контейнер. |
parentContainer.targetUniqueIdentifier |
строка (GUID) | true |
uniqueIdentifier родительской сущности контейнера. |
definition |
объект | true | Определяет поведение и логику представления. |
definition.type |
струна | true | Тип представления: Event, Object, Attributeили Rule. |
definition.instance |
струна | false | Строка, закодированная в формате JSON, содержащая конфигурацию, зависяющую от шаблона. См. примеры шаблонов. |
Представления событий
Просмотры событий фильтруют и преобразуют потоковую передачу данных из источника, чтобы создать новый поток событий. Они служат мостом между сущностью источника данных и остальной частью конвейера.
В следующей таблице описаны свойства, относящиеся к представлениям событий:
| Недвижимость | Тип | Обязательно | Description |
|---|---|---|---|
definition.type |
струна | true | Этот параметр должен содержать значение Event. |
definition.instance |
струна | true | Конфигурация в кодировке JSON для шаблонов обработки событий. |
В следующей таблице описаны распространенные шаблоны, используемые для представлений событий:
| Template | Description |
|---|---|
SourceEvent |
Выбирает события непосредственно из источника данных. |
SplitEvent |
Разделяет события по идентификатору объекта для обработки каждого объекта. |
В следующем примере показано представление событий, которое выбирает события из источника симулятора:
{
"uniqueIdentifier": "22cc22cc-dd33-ee44-ff55-66aa66aa66aa",
"payload": {
"name": "Package delivery events",
"parentContainer": {
"targetUniqueIdentifier": "00aa00aa-bb11-cc22-dd33-44ee44ee44ee"
},
"definition": {
"type": "Event",
"instance": "{\"templateId\":\"SourceEvent\",\"templateVersion\":\"1.1\",\"steps\":[{\"name\":\"SourceEventStep\",\"id\":\"aaaa0000-bb11-2222-33cc-444444dddddd\",\"rows\":[{\"name\":\"SourceSelector\",\"kind\":\"SourceReference\",\"arguments\":[{\"name\":\"entityId\",\"type\":\"string\",\"value\":\"11bb11bb-cc22-dd33-ee44-55ff55ff55ff\"}]}]}]}"
}
},
"type": "timeSeriesView-v1"
}
В свойстве instanceentityId значение 11bb11bb-... ссылается на uniqueIdentifier исходную сущность симулятора, подключив это представление события к этому источнику данных.
Представления объектов
Представления объектов определяют отслеживаемые сущности реального мира (например, пакеты, датчики или пользователи). Объекты служат родительским для атрибутов и правил.
В следующей таблице описаны свойства, относящиеся к представлениям объектов:
| Недвижимость | Тип | Обязательно | Description |
|---|---|---|---|
definition.type |
струна | true | Этот параметр должен содержать значение Object. |
В следующем примере показано представление объекта, представляющее пакет:
{
"uniqueIdentifier": "33dd33dd-ee44-ff55-aa66-77bb77bb77bb",
"payload": {
"name": "Package",
"parentContainer": {
"targetUniqueIdentifier": "00aa00aa-bb11-cc22-dd33-44ee44ee44ee"
},
"definition": {
"type": "Object"
}
},
"type": "timeSeriesView-v1"
}
Представления атрибутов
Представления атрибутов извлекают и вычисляют свойства из событий. Атрибуты определяют, какие данные следует отслеживать для каждого объекта. Каждый атрибут принадлежит родительскому объекту, на который ссылается.parentObject
В следующей таблице описаны свойства, относящиеся к представлениям атрибутов:
| Недвижимость | Тип | Обязательно | Description |
|---|---|---|---|
definition.type |
струна | true | Этот параметр должен содержать значение Attribute. |
definition.instance |
струна | true | Конфигурация, закодированная в формате JSON для извлечения атрибутов и вычислений. |
parentObject |
объект | true | Ссылка на родительский объект, к которому относится этот атрибут. |
parentObject.targetUniqueIdentifier |
строка (GUID) | true |
uniqueIdentifier объекта родительского объекта. |
В следующей таблице описаны распространенные шаблоны, используемые для представлений атрибутов:
| Template | Description |
|---|---|
IdentityPartAttribute |
Определяет часть удостоверения объекта (например, поле идентификатора пакета). |
IdentityTupleAttribute |
Объединяет несколько частей удостоверений в полный идентификатор объекта. |
BasicEventAttribute |
Извлекает простое значение из поля события (например, температура). |
В следующем примере показан атрибут удостоверения, извлекающий PackageId данные события:
{
"uniqueIdentifier": "44ee44ee-ff55-aa66-bb77-88cc88cc88cc",
"payload": {
"name": "PackageId",
"parentObject": {
"targetUniqueIdentifier": "33dd33dd-ee44-ff55-aa66-77bb77bb77bb"
},
"parentContainer": {
"targetUniqueIdentifier": "00aa00aa-bb11-cc22-dd33-44ee44ee44ee"
},
"definition": {
"type": "Attribute",
"instance": "{\"templateId\":\"IdentityPartAttribute\",\"templateVersion\":\"1.1\",\"steps\":[{\"name\":\"IdPartStep\",\"id\":\"bbbb1111-cc22-3333-44dd-555555eeeeee\",\"rows\":[{\"name\":\"TypeAssertion\",\"kind\":\"TypeAssertion\",\"arguments\":[{\"name\":\"op\",\"type\":\"string\",\"value\":\"Text\"},{\"name\":\"format\",\"type\":\"string\",\"value\":\"\"}]}]}]}"
}
},
"type": "timeSeriesView-v1"
}
В следующем примере показан базовый атрибут события, извлекающий Temperature поле:
{
"uniqueIdentifier": "55ff55ff-aa66-bb77-cc88-99dd99dd99dd",
"payload": {
"name": "Temperature (°C)",
"parentObject": {
"targetUniqueIdentifier": "33dd33dd-ee44-ff55-aa66-77bb77bb77bb"
},
"parentContainer": {
"targetUniqueIdentifier": "00aa00aa-bb11-cc22-dd33-44ee44ee44ee"
},
"definition": {
"type": "Attribute",
"instance": "{\"templateId\":\"BasicEventAttribute\",\"templateVersion\":\"1.1\",\"steps\":[{\"name\":\"EventSelectStep\",\"id\":\"cccc2222-dd33-4444-55ee-666666ffffff\",\"rows\":[{\"name\":\"EventSelector\",\"kind\":\"Event\",\"arguments\":[{\"kind\":\"EventReference\",\"type\":\"complex\",\"arguments\":[{\"name\":\"entityId\",\"type\":\"string\",\"value\":\"aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb\"}],\"name\":\"event\"}]},{\"name\":\"EventFieldSelector\",\"kind\":\"EventField\",\"arguments\":[{\"name\":\"fieldName\",\"type\":\"string\",\"value\":\"Temperature\"}]}]},{\"name\":\"EventComputeStep\",\"id\":\"dddd3333-ee44-5555-66ff-777777aaaaaa\",\"rows\":[{\"name\":\"TypeAssertion\",\"kind\":\"TypeAssertion\",\"arguments\":[{\"name\":\"op\",\"type\":\"string\",\"value\":\"Number\"},{\"name\":\"format\",\"type\":\"string\",\"value\":\"\"}]}]}]}"
}
},
"type": "timeSeriesView-v1"
}
Представления правил
Представления правил определяют условия (триггеры) и действия, выполняемые при выполнении этих условий. С помощью parentObjectправил можно задать область действия для определенного объекта.
Конкретные свойства:
| Недвижимость | Тип | Обязательно | Description |
|---|---|---|---|
definition.type |
струна | true | Этот параметр должен содержать значение Rule. |
definition.instance |
струна | true | Конфигурация в кодировке JSON для логики и действий триггеров. |
definition.settings |
объект | false | Параметры выполнения правила. |
definition.settings.shouldRun |
булевый | false | Указывает, является ли правило активным в данный момент. Установите для true включения. |
definition.settings.shouldApplyRuleOnUpdate |
булевый | false | Следует ли применять правило к историческим данным при обновлении. |
parentObject |
объект | false | Ссылка на родительский объект (для правил с областью объекта). |
parentObject.targetUniqueIdentifier |
строка (GUID) | false |
uniqueIdentifier объекта родительского объекта. |
Шаблоны правил
В следующей таблице описаны распространенные шаблоны, используемые для представлений правил:
| Template | Description |
|---|---|
EventTrigger |
Активирует всякий раз, когда происходит определенное событие. |
AttributeTrigger |
Активирует, когда значение атрибута соответствует условию (например, превышает пороговое значение). |
В следующем примере показано правило, которое отправляет уведомление Teams, когда средняя температура превышает 20°C:
{
"uniqueIdentifier": "66aa66aa-bb77-cc88-dd99-00ee00ee00ee",
"payload": {
"name": "Too hot for medicine",
"parentObject": {
"targetUniqueIdentifier": "33dd33dd-ee44-ff55-aa66-77bb77bb77bb"
},
"parentContainer": {
"targetUniqueIdentifier": "00aa00aa-bb11-cc22-dd33-44ee44ee44ee"
},
"definition": {
"type": "Rule",
"instance": "{\"templateId\":\"AttributeTrigger\",\"templateVersion\":\"1.1\",\"steps\":[{\"name\":\"ScalarSelectStep\",\"id\":\"eeee4444-ff55-6666-77aa-888888bbbbbb\",\"rows\":[{\"name\":\"AttributeSelector\",\"kind\":\"Attribute\",\"arguments\":[{\"kind\":\"AttributeReference\",\"type\":\"complex\",\"arguments\":[{\"name\":\"entityId\",\"type\":\"string\",\"value\":\"55ff55ff-aa66-bb77-cc88-99dd99dd99dd\"}],\"name\":\"attribute\"}]},{\"name\":\"NumberSummary\",\"kind\":\"NumberSummary\",\"arguments\":[{\"name\":\"op\",\"type\":\"string\",\"value\":\"Average\"},{\"kind\":\"TimeDrivenWindowSpec\",\"type\":\"complex\",\"arguments\":[{\"name\":\"width\",\"type\":\"timeSpan\",\"value\":600000.0},{\"name\":\"hop\",\"type\":\"timeSpan\",\"value\":600000.0}],\"name\":\"window\"}]}]},{\"name\":\"ScalarDetectStep\",\"id\":\"ffff5555-aa66-7777-88bb-999999cccccc\",\"rows\":[{\"name\":\"NumberBecomes\",\"kind\":\"NumberBecomes\",\"arguments\":[{\"name\":\"op\",\"type\":\"string\",\"value\":\"BecomesGreaterThan\"},{\"name\":\"value\",\"type\":\"number\",\"value\":20.0}]},{\"name\":\"OccurrenceOption\",\"kind\":\"EachTime\",\"arguments\":[]}]},{\"name\":\"DimensionalFilterStep\",\"id\":\"aaaa6666-bb77-8888-99cc-000000dddddd\",\"rows\":[{\"name\":\"AttributeSelector\",\"kind\":\"Attribute\",\"arguments\":[{\"kind\":\"AttributeReference\",\"type\":\"complex\",\"arguments\":[{\"name\":\"entityId\",\"type\":\"string\",\"value\":\"bbbbbbbb-1111-2222-3333-cccccccccccc\"}],\"name\":\"attribute\"}]},{\"name\":\"TextValueCondition\",\"kind\":\"TextValueCondition\",\"arguments\":[{\"name\":\"op\",\"type\":\"string\",\"value\":\"IsEqualTo\"},{\"name\":\"value\",\"type\":\"string\",\"value\":\"Medicine\"}]}]},{\"name\":\"ActStep\",\"id\":\"0000aaaa-11bb-cccc-dd22-eeeeee333333\",\"rows\":[{\"name\":\"TeamsBinding\",\"kind\":\"TeamsMessage\",\"arguments\":[{\"name\":\"messageLocale\",\"type\":\"string\",\"value\":\"\"},{\"name\":\"recipients\",\"type\":\"array\",\"values\":[{\"type\":\"string\",\"value\":\"user@example.com\"}]},{\"name\":\"headline\",\"type\":\"array\",\"values\":[{\"type\":\"string\",\"value\":\"Package too hot for medicine\"}]},{\"name\":\"optionalMessage\",\"type\":\"array\",\"values\":[{\"type\":\"string\",\"value\":\"This temperature-sensitive package containing medicine has exceeded the allowed threshold.\"}]},{\"name\":\"additionalInformation\",\"type\":\"array\",\"values\":[]}]}]}]}",
"settings": {
"shouldRun": false,
"shouldApplyRuleOnUpdate": false
}
}
},
"type": "timeSeriesView-v1"
}
В этом примере JSON правила instance определяет четыре шага:
-
ScalarSelectStep выбирает атрибут (по
entityId) и вычисляетTemperature (°C)10-минутный скользящий средний. - ScalarDetectStep активируется, когда среднее значение становится больше 20.
-
DimensionalFilterStep фильтрует пакеты, в которых равен
Medicineтип элемента. -
ActStep отправляет сообщение
user@example.comTeams с заголовком "Пакет слишком горячий для медицины".
Типы действий правил
Правила могут выполнять различные типы действий при активации:
| Тип действия | Description |
|---|---|
TeamsMessage |
Отправляет уведомление через Microsoft Teams. |
EmailMessage |
Отправляет уведомление по электронной почте. |
FabricItemInvocation |
Выполняет элемент Fabric (например, Pipeline, Notebook) с необязательными параметрами. Правило ссылается на fabricItemAction-v1 сущность по своей uniqueIdentifierсущности. |
Свойства действия TeamsMessage
Действие уведомления Teams имеет следующие свойства конфигурации:
| Недвижимость | Тип | Description |
|---|---|---|
messageLocale |
струна | Язык и языковой стандарт для сообщения. |
recipients |
массив | Массив адресов электронной почты получателя или пользователей Teams. |
headline |
массив | Название основного сообщения или тема. |
optionalMessage |
массив | Дополнительное содержимое сообщения. |
additionalInformation |
массив | Дополнительные контекстные сведения. |
Свойства действия EmailMessage
Действие уведомления по электронной почте имеет следующие свойства конфигурации:
| Недвижимость | Тип | Description |
|---|---|---|
messageLocale |
струна | Язык и языковой стандарт для электронной почты (например, en-us). |
sentTo |
массив | Массив адресов электронной почты основного получателя. |
copyTo |
массив | Массив адресов электронной почты получателя CC. |
bCCTo |
массив | Массив адресов электронной почты получателя BCC. |
subject |
струна | Строка темы электронной почты. |
headline |
струна | Основное содержимое сообщения. |
optionalMessage |
струна | Дополнительное содержимое текста сообщения. |
additionalInformation |
струна | Дополнительные контекстные сведения. |
Экземпляры шаблонов
Сущности представления временных рядов используют шаблоны для определения логики обработки. Свойство definition.instance сохраняет конфигурацию шаблона как строку в кодировке JSON (не вложенный объект JSON). Эту строку необходимо экранировать при включении в ReflexEntities.json файл.
При декодировании каждый экземпляр шаблона следует этой общей структуре:
{
"templateId": "<template-name>",
"templateVersion": "1.1",
"steps": [
{
"name": "<step-name>",
"id": "<step-guid>",
"rows": [
{
"name": "<row-name>",
"kind": "<row-kind>",
"arguments": [
{ "name": "<arg-name>", "type": "<arg-type>", "value": "<arg-value>" }
]
}
]
}
]
}
Ключевые поля:
| Поле | Description |
|---|---|
templateId |
Определяет тип шаблона: SourceEvent, SplitEvent, IdentityPartAttribute, IdentityTupleAttribute, BasicEventAttribute, EventTriggerили AttributeTrigger. |
templateVersion |
Версия схемы шаблона (например, 1.1). |
steps |
Упорядоченный массив шагов обработки. Каждый шаг содержит строки, определяющие операции. |
steps[].rows[].kind |
Тип операции на шаге (например, SourceReference, Event, EventField, , TypeAssertion, NumberBecomes, ). TeamsMessage |
steps[].rows[].arguments |
Аргументы, которые настраивают операцию. Они часто включают entityId ссылки на другие сущности по их uniqueIdentifierсущностям. |
Подсказка
Самый простой способ получить допустимый экземпляр шаблона — настроить элемент Reflex в пользовательском интерфейсе Fabric, а затем использовать API get Item Definition для получения определения. Затем можно изменить извлеченные экземпляры шаблона по мере необходимости.
Примеры для каждого типа сущности
В этом разделе показаны примеры отдельных сущностей. Полный пример объединения всех типов сущностей см. в разделе "Полный ReflexEntities.json".
Пример контейнера
{
"uniqueIdentifier": "00aa00aa-bb11-cc22-dd33-44ee44ee44ee",
"payload": {
"name": "Package delivery sample",
"type": "samples"
},
"type": "container-v1"
}
Пример источника симулятора
{
"uniqueIdentifier": "11bb11bb-cc22-dd33-ee44-55ff55ff55ff",
"payload": {
"name": "Package delivery",
"runSettings": {
"startTime": "2025-10-21T12:03:31.9271568Z",
"stopTime": "2025-11-04T15:03:31.03Z"
},
"version": "V2_0",
"type": "PackageShipment",
"parentContainer": {
"targetUniqueIdentifier": "00aa00aa-bb11-cc22-dd33-44ee44ee44ee"
}
},
"type": "simulatorSource-v1"
}
Пример представления событий
{
"uniqueIdentifier": "22cc22cc-dd33-ee44-ff55-66aa66aa66aa",
"payload": {
"name": "Package delivery events",
"parentContainer": {
"targetUniqueIdentifier": "00aa00aa-bb11-cc22-dd33-44ee44ee44ee"
},
"definition": {
"type": "Event",
"instance": "{\"templateId\":\"SourceEvent\",\"templateVersion\":\"1.1\",\"steps\":[{\"name\":\"SourceEventStep\",\"id\":\"aaaa0000-bb11-2222-33cc-444444dddddd\",\"rows\":[{\"name\":\"SourceSelector\",\"kind\":\"SourceReference\",\"arguments\":[{\"name\":\"entityId\",\"type\":\"string\",\"value\":\"11bb11bb-cc22-dd33-ee44-55ff55ff55ff\"}]}]}]}"
}
},
"type": "timeSeriesView-v1"
}
Пример представления объектов
{
"uniqueIdentifier": "33dd33dd-ee44-ff55-aa66-77bb77bb77bb",
"payload": {
"name": "Package",
"parentContainer": {
"targetUniqueIdentifier": "00aa00aa-bb11-cc22-dd33-44ee44ee44ee"
},
"definition": {
"type": "Object"
}
},
"type": "timeSeriesView-v1"
}
Пример представления атрибутов (удостоверение)
{
"uniqueIdentifier": "44ee44ee-ff55-aa66-bb77-88cc88cc88cc",
"payload": {
"name": "PackageId",
"parentObject": {
"targetUniqueIdentifier": "33dd33dd-ee44-ff55-aa66-77bb77bb77bb"
},
"parentContainer": {
"targetUniqueIdentifier": "00aa00aa-bb11-cc22-dd33-44ee44ee44ee"
},
"definition": {
"type": "Attribute",
"instance": "{\"templateId\":\"IdentityPartAttribute\",\"templateVersion\":\"1.1\",\"steps\":[{\"name\":\"IdPartStep\",\"id\":\"bbbb1111-cc22-3333-44dd-555555eeeeee\",\"rows\":[{\"name\":\"TypeAssertion\",\"kind\":\"TypeAssertion\",\"arguments\":[{\"name\":\"op\",\"type\":\"string\",\"value\":\"Text\"},{\"name\":\"format\",\"type\":\"string\",\"value\":\"\"}]}]}]}"
}
},
"type": "timeSeriesView-v1"
}
Полный пример ReflexEntities.json
В этом примере показана полная система мониторинга доставки пакетов , декодированная из Base64. Система использует источник данных симулятора, отслеживает пакеты по идентификатору, отслеживает температуру и отправляет уведомление Teams, когда температура превышает пороговое значение для пакетов медицины.
[
{
"uniqueIdentifier": "00aa00aa-bb11-cc22-dd33-44ee44ee44ee",
"payload": {
"name": "Package delivery sample",
"type": "samples"
},
"type": "container-v1"
},
{
"uniqueIdentifier": "11bb11bb-cc22-dd33-ee44-55ff55ff55ff",
"payload": {
"name": "Package delivery",
"runSettings": {
"startTime": "2025-10-21T12:03:31.9271568Z",
"stopTime": "2025-11-04T15:03:31.03Z"
},
"version": "V2_0",
"type": "PackageShipment",
"parentContainer": {
"targetUniqueIdentifier": "00aa00aa-bb11-cc22-dd33-44ee44ee44ee"
}
},
"type": "simulatorSource-v1"
},
{
"uniqueIdentifier": "22cc22cc-dd33-ee44-ff55-66aa66aa66aa",
"payload": {
"name": "Package delivery events",
"parentContainer": {
"targetUniqueIdentifier": "00aa00aa-bb11-cc22-dd33-44ee44ee44ee"
},
"definition": {
"type": "Event",
"instance": "{\"templateId\":\"SourceEvent\",\"templateVersion\":\"1.1\",\"steps\":[{\"name\":\"SourceEventStep\",\"id\":\"aaaa0000-bb11-2222-33cc-444444dddddd\",\"rows\":[{\"name\":\"SourceSelector\",\"kind\":\"SourceReference\",\"arguments\":[{\"name\":\"entityId\",\"type\":\"string\",\"value\":\"11bb11bb-cc22-dd33-ee44-55ff55ff55ff\"}]}]}]}"
}
},
"type": "timeSeriesView-v1"
},
{
"uniqueIdentifier": "33dd33dd-ee44-ff55-aa66-77bb77bb77bb",
"payload": {
"name": "Package",
"parentContainer": {
"targetUniqueIdentifier": "00aa00aa-bb11-cc22-dd33-44ee44ee44ee"
},
"definition": {
"type": "Object"
}
},
"type": "timeSeriesView-v1"
},
{
"uniqueIdentifier": "44ee44ee-ff55-aa66-bb77-88cc88cc88cc",
"payload": {
"name": "PackageId",
"parentObject": {
"targetUniqueIdentifier": "33dd33dd-ee44-ff55-aa66-77bb77bb77bb"
},
"parentContainer": {
"targetUniqueIdentifier": "00aa00aa-bb11-cc22-dd33-44ee44ee44ee"
},
"definition": {
"type": "Attribute",
"instance": "{\"templateId\":\"IdentityPartAttribute\",\"templateVersion\":\"1.1\",\"steps\":[{\"name\":\"IdPartStep\",\"id\":\"bbbb1111-cc22-3333-44dd-555555eeeeee\",\"rows\":[{\"name\":\"TypeAssertion\",\"kind\":\"TypeAssertion\",\"arguments\":[{\"name\":\"op\",\"type\":\"string\",\"value\":\"Text\"},{\"name\":\"format\",\"type\":\"string\",\"value\":\"\"}]}]}]}"
}
},
"type": "timeSeriesView-v1"
},
{
"uniqueIdentifier": "55ff55ff-aa66-bb77-cc88-99dd99dd99dd",
"payload": {
"name": "Temperature (°C)",
"parentObject": {
"targetUniqueIdentifier": "33dd33dd-ee44-ff55-aa66-77bb77bb77bb"
},
"parentContainer": {
"targetUniqueIdentifier": "00aa00aa-bb11-cc22-dd33-44ee44ee44ee"
},
"definition": {
"type": "Attribute",
"instance": "{\"templateId\":\"BasicEventAttribute\",\"templateVersion\":\"1.1\",\"steps\":[{\"name\":\"EventSelectStep\",\"id\":\"cccc2222-dd33-4444-55ee-666666ffffff\",\"rows\":[{\"name\":\"EventSelector\",\"kind\":\"Event\",\"arguments\":[{\"kind\":\"EventReference\",\"type\":\"complex\",\"arguments\":[{\"name\":\"entityId\",\"type\":\"string\",\"value\":\"aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb\"}],\"name\":\"event\"}]},{\"name\":\"EventFieldSelector\",\"kind\":\"EventField\",\"arguments\":[{\"name\":\"fieldName\",\"type\":\"string\",\"value\":\"Temperature\"}]}]},{\"name\":\"EventComputeStep\",\"id\":\"dddd3333-ee44-5555-66ff-777777aaaaaa\",\"rows\":[{\"name\":\"TypeAssertion\",\"kind\":\"TypeAssertion\",\"arguments\":[{\"name\":\"op\",\"type\":\"string\",\"value\":\"Number\"},{\"name\":\"format\",\"type\":\"string\",\"value\":\"\"}]}]}]}"
}
},
"type": "timeSeriesView-v1"
},
{
"uniqueIdentifier": "66aa66aa-bb77-cc88-dd99-00ee00ee00ee",
"payload": {
"name": "Too hot for medicine",
"parentObject": {
"targetUniqueIdentifier": "33dd33dd-ee44-ff55-aa66-77bb77bb77bb"
},
"parentContainer": {
"targetUniqueIdentifier": "00aa00aa-bb11-cc22-dd33-44ee44ee44ee"
},
"definition": {
"type": "Rule",
"instance": "{\"templateId\":\"AttributeTrigger\",\"templateVersion\":\"1.1\",\"steps\":[{\"name\":\"ScalarSelectStep\",\"id\":\"eeee4444-ff55-6666-77aa-888888bbbbbb\",\"rows\":[{\"name\":\"AttributeSelector\",\"kind\":\"Attribute\",\"arguments\":[{\"kind\":\"AttributeReference\",\"type\":\"complex\",\"arguments\":[{\"name\":\"entityId\",\"type\":\"string\",\"value\":\"55ff55ff-aa66-bb77-cc88-99dd99dd99dd\"}],\"name\":\"attribute\"}]},{\"name\":\"NumberSummary\",\"kind\":\"NumberSummary\",\"arguments\":[{\"name\":\"op\",\"type\":\"string\",\"value\":\"Average\"},{\"kind\":\"TimeDrivenWindowSpec\",\"type\":\"complex\",\"arguments\":[{\"name\":\"width\",\"type\":\"timeSpan\",\"value\":600000.0},{\"name\":\"hop\",\"type\":\"timeSpan\",\"value\":600000.0}],\"name\":\"window\"}]}]},{\"name\":\"ScalarDetectStep\",\"id\":\"ffff5555-aa66-7777-88bb-999999cccccc\",\"rows\":[{\"name\":\"NumberBecomes\",\"kind\":\"NumberBecomes\",\"arguments\":[{\"name\":\"op\",\"type\":\"string\",\"value\":\"BecomesGreaterThan\"},{\"name\":\"value\",\"type\":\"number\",\"value\":20.0}]},{\"name\":\"OccurrenceOption\",\"kind\":\"EachTime\",\"arguments\":[]}]},{\"name\":\"DimensionalFilterStep\",\"id\":\"aaaa6666-bb77-8888-99cc-000000dddddd\",\"rows\":[{\"name\":\"AttributeSelector\",\"kind\":\"Attribute\",\"arguments\":[{\"kind\":\"AttributeReference\",\"type\":\"complex\",\"arguments\":[{\"name\":\"entityId\",\"type\":\"string\",\"value\":\"bbbbbbbb-1111-2222-3333-cccccccccccc\"}],\"name\":\"attribute\"}]},{\"name\":\"TextValueCondition\",\"kind\":\"TextValueCondition\",\"arguments\":[{\"name\":\"op\",\"type\":\"string\",\"value\":\"IsEqualTo\"},{\"name\":\"value\",\"type\":\"string\",\"value\":\"Medicine\"}]}]},{\"name\":\"ActStep\",\"id\":\"0000aaaa-11bb-cccc-dd22-eeeeee333333\",\"rows\":[{\"name\":\"TeamsBinding\",\"kind\":\"TeamsMessage\",\"arguments\":[{\"name\":\"messageLocale\",\"type\":\"string\",\"value\":\"\"},{\"name\":\"recipients\",\"type\":\"array\",\"values\":[{\"type\":\"string\",\"value\":\"user@example.com\"}]},{\"name\":\"headline\",\"type\":\"array\",\"values\":[{\"type\":\"string\",\"value\":\"Package too hot for medicine\"}]},{\"name\":\"optionalMessage\",\"type\":\"array\",\"values\":[{\"type\":\"string\",\"value\":\"This temperature-sensitive package containing medicine has exceeded the allowed threshold.\"}]},{\"name\":\"additionalInformation\",\"type\":\"array\",\"values\":[]}]}]}]}",
"settings": {
"shouldRun": false,
"shouldApplyRuleOnUpdate": false
}
}
},
"type": "timeSeriesView-v1"
}
]
Пример полезных данных определения
В этом примере показана полная структура текста запроса API для создания элемента Reflex с помощью API создания элементов . Значения payload содержат содержимое в кодировке Base64 соответствующих файлов.
{
"format": "json",
"parts": [
{
"path": "ReflexEntities.json",
"payload": "W3sKICAidW5pcXVlSWRlbnRpZmllciI6ICIwMGFhMDBhYS1iYjExLWNjMjItZGQzMy00NGVlNDRlZTQ0ZWUiLAogICJwYXlsb2FkIjogewogICAgIm5hbWUiOiAiUGFja2FnZSBkZWxpdmVyeSBzYW1wbGUiLAogICAgInR5cGUiOiAic2FtcGxlcyIKICB9LAogICJ0eXBlIjogImNvbnRhaW5lci12MSIKfV0=",
"payloadType": "InlineBase64"
},
{
"path": ".platform",
"payload": "ZG90UGxhdGZvcm1CYXNlNjRTdHJpbmc=",
"payloadType": "InlineBase64"
}
]
}