Определение рефлекса

В этой статье представлена разбивка структуры определения для элементов Рефлектора. Используйте эту ссылку при создании или обновлении элементов Рефлектора программным способом с помощью API создания элемента, получения определенияэлементов или обновления определений элементов .

Замечание

Рефлектор также известен как активатор. Оба имени ссылаются на один и тот же тип элемента в этой статье.

Обзор

Элемент Reflex (активатор) отслеживает потоковые данные и активирует уведомления или действия при выполнении определенных условий. Определение описывает конвейер обработки, состоящий из взаимосвязанных сущностей:

  1. Контейнеры упорядочивают связанные компоненты в логические группы и предоставляют иерархическую структуру.
  2. Источники данных подключаются к потоковым данным (симуляторы, запросы KQL, Концентратор реального времени или потоки событий).
  3. События фильтруют и преобразуют необработанные данные из источников.
  4. Объекты представляют реальные сущности, которые вы отслеживаете (например, пакеты, датчики или пользователи).
  5. Атрибуты извлекают или вычисляют свойства из событий для каждого объекта.
  6. Правила определяют условия, которые активируют такие действия, как сообщения 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.

Каждая часть определения создается следующим образом:

Часть платформы

Часть .platform содержит метаданные об элементе.

Структура рефлекторности

Часть 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 определяет четыре шага:

  1. ScalarSelectStep выбирает атрибут (поentityId) и вычисляет Temperature (°C) 10-минутный скользящий средний.
  2. ScalarDetectStep активируется, когда среднее значение становится больше 20.
  3. DimensionalFilterStep фильтрует пакеты, в которых равен Medicineтип элемента.
  4. ActStep отправляет сообщение user@example.com Teams с заголовком "Пакет слишком горячий для медицины".

Типы действий правил

Правила могут выполнять различные типы действий при активации:

Тип действия 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"
        }
    ]
}