反射定义

本文详细介绍了 Reflex 项的定义结构。

注释

反射也称为激活器。

概述

Reflex(激活器)项定义一组流式处理数据规则。 它监视事件流,并在满足特定条件时生成通知或作。 定义结构描述构成处理流事件的管道的数据源、对象模型、属性和规则。

支持的格式

反射项支持格式 json

定义部件

Reflex 项的定义包含以下部分:

定义部件路径 类型 必选 Description
ReflexEntities.json 反射实体 (JSON) 包含完整的激活器配置,包括容器、数据源、对象、属性和规则
.platform 平台元数据 包含 Fabric 平台元数据信息

反射实体结构

部件 ReflexEntities.json 包含定义完整激活器配置的实体对象的数组。 每个实体表示流式处理数据管道中的组件。

实体类型

反射定义支持以下实体类型:

类型 Description
container-v1 组织相关组件的顶级容器
simulatorSource-v1 用于测试和演示的模拟数据源
kqlSource-v1 基于 KQL 查询的数据源连接到 Eventhouse
realTimeHubSource-v1 工作区事件的实时中心数据源
eventstreamSource-v1 连接到 Fabric 事件流的事件流数据源
fabricItemAction-v1 可由规则调用的构造项作
timeSeriesView-v1 定义事件、对象、属性或规则的核心构建基块

通用实体属性

所有实体共享这些通用属性:

资产 类型 必选 Description
uniqueIdentifier 字符串 实体的唯一标识符
payload 对象 特定于实体的配置数据
type 字符串 实体类型(例如, container-v1timeSeriesView-v1

容器实体 (container-v1

容器组织相关组件并提供分层结构。

资产 类型 必选 Description
name 字符串 容器的显示名称
type 字符串 容器类型(例如, sampleskqlQueries

数据源实体

数据源实体定义项连接到的数据源,以及从中接收其数据的数据源。

模拟器源 (simulatorSource-v1

生成用于测试的模拟流数据。

资产 类型 必选 Description
name 字符串 数据源的显示名称
runSettings 对象 执行配置
runSettings.startTime 字符串 (ISO 8601) 何时开始生成数据
runSettings.stopTime 字符串 (ISO 8601) 何时停止生成数据
version 字符串 版本标识符(例如) V2_0
type 字符串 模拟数据的类型(例如 PackageShipment
parentContainer 对象 对父容器的引用
parentContainer.targetUniqueIdentifier 字符串 父容器实体的唯一标识符

KQL 源 (kqlSource-v1

连接到 KQL 数据库以查询流数据。

资产 类型 必选 Description
name 字符串 数据源的显示名称
runSettings 对象 查询执行设置
runSettings.executionIntervalInSeconds 数字 执行查询的频率
query.queryString 字符串 要执行的 KQL 查询
eventhouseItem 对象 对 Eventhouse 项的引用
eventhouseItem.targetUniqueIdentifier 字符串 Eventhouse 项的唯一标识符
parentContainer 对象 对父容器的引用
parentContainer.targetUniqueIdentifier 字符串 父容器实体的唯一标识符

实时中心源 (realTimeHubSource-v1

连接到用于监视工作区事件的实时中心数据源。

资产 类型 必选 Description
name 字符串 数据源的显示名称
connection 对象 实时中心连接配置
connection.scope 字符串 事件范围(例如 Workspace
connection.tenantId 字符串 Azure 租户标识符
connection.workspaceId 字符串 Fabric 工作区标识符
connection.eventGroupType 字符串 事件组的类型(例如 Microsoft.Fabric.WorkspaceEvents
filterSettings 对象 事件筛选配置
filterSettings.eventTypes 数组 要监视的事件类型的数组
filterSettings.eventTypes[].name 字符串 事件类型名称(例如) Microsoft.Fabric.ItemCreateSucceeded
filterSettings.filters 数组 要应用的其他筛选器
parentContainer 对象 对父容器的引用
parentContainer.targetUniqueIdentifier 字符串 父容器实体的唯一标识符

事件流源 (eventstreamSource-v1

连接到用于流式处理事件的 Fabric Eventstream 数据源。

资产 类型 必选 Description
name 字符串 数据源的显示名称
metadata 对象 事件流连接元数据
metadata.eventstreamArtifactId 字符串 Fabric 事件流项目的标识符

作实体

构造项作 (fabricItemAction-v1

定义可按规则调用为作的 Fabric 项。

资产 类型 必选 Description
name 字符串 作的显示名称
fabricItem 对象 对要执行的 Fabric 项的引用
fabricItem.itemId 字符串 结构项标识符
fabricItem.workspaceId 字符串 包含项的工作区
fabricItem.itemType 字符串 Fabric 项的类型(例如 Pipeline
jobType 字符串 要执行的作业类型(例如 Pipeline
parentContainer 对象 对父容器的引用
parentContainer.targetUniqueIdentifier 字符串 父容器实体的唯一标识符

时序视图实体 (timeSeriesView-v1

时序视图是定义数据流经激活器管道的核心构建基块。 它们可以表示 事件对象属性规则

常见时序视图属性

资产 类型 必选 Description
name 字符串 视图的显示名称
parentContainer 对象 对父容器的引用
parentContainer.targetUniqueIdentifier 字符串 父容器实体的唯一标识符
definition 对象 定义视图的行为和逻辑
definition.type 字符串 视图类型:Event、、ObjectAttributeRule
definition.instance 字符串 包含特定于模板的配置的 JSON 字符串

事件视图

事件视图筛选和转换流数据以创建新的事件流。

资产 类型 必选 Description
definition.type 字符串 必须是 Event
definition.instance 字符串 事件处理模板的 JSON 配置

常见事件模板:

  • SourceEvent:从数据源中选择事件
  • SplitEvent:按对象标识拆分每个对象处理的事件

对象视图

对象视图定义要监视的实体(例如包、传感器、用户)。

资产 类型 必选 Description
definition.type 字符串 必须是 Object

属性视图

属性视图从事件中提取和计算属性,定义要监视的数据。

资产 类型 必选 Description
definition.type 字符串 必须是 Attribute
definition.instance 字符串 属性提取和计算的 JSON 配置
parentObject 对象 对此属性所属的父对象的引用
parentObject.targetUniqueIdentifier 字符串 父对象实体的唯一标识符

常见属性模板:

  • IdentityPartAttribute:定义对象的标识的一部分
  • IdentityTupleAttribute:将标识部件合并为完整的对象标识符
  • BasicEventAttribute:从事件中提取简单值

规则视图

规则视图定义满足条件时执行的触发器和作。

资产 类型 必选 Description
definition.type 字符串 必须是 Rule
definition.instance 字符串 触发器逻辑和作的 JSON 配置
definition.settings 对象 规则执行设置
definition.settings.shouldRun 布尔 规则当前是否处于活动状态
definition.settings.shouldApplyRuleOnUpdate 布尔 是否将规则应用于历史数据
parentObject 对象 对父对象的引用(对于对象范围规则)
parentObject.targetUniqueIdentifier 字符串 父对象实体的唯一标识符

常见规则模板:

  • EventTrigger:特定事件的触发器
  • AttributeTrigger:基于属性值或更改的触发器

规则作类型

触发时,规则可以执行不同类型的作:

  • TeamsMessage:通过 Microsoft Teams 发送通知
  • EmailMessage:发送电子邮件通知
  • FabricItemInvocation:使用可选参数执行 Fabric 项(例如管道、Notebook)
通知作配置

Teams 和电子邮件通知作共享类似的配置参数:

TeamsMessage 配置:

  • messageLocale:邮件的语言/区域设置
  • recipients:收件人电子邮件地址或 Teams 用户的数组
  • headline:主邮件标题/主题
  • optionalMessage:其他消息内容
  • additionalInformation:额外的上下文信息

EmailMessage 配置:

  • messageLocale:电子邮件的语言/区域设置(例如 en-us
  • sentTo:主要收件人电子邮件地址数组
  • copyTo:抄送收件人电子邮件地址数组
  • bCCTo:密件抄送收件人电子邮件地址的数组
  • subject:电子邮件主题行
  • headline:主消息内容
  • optionalMessage:其他消息正文内容
  • additionalInformation:额外的上下文信息

父引用

实体使用以下结构引用其父级:

资产 类型 Description
parentContainer.targetUniqueIdentifier 字符串 引用容器实体
parentObject.targetUniqueIdentifier 字符串 引用对象实体

模板实例

instance 属性包含 JSON 编码的模板配置。 这些模板定义用于处理事件、提取属性或触发作的特定逻辑。 常见模板类型包括:

  • 事件模板SourceEventSplitEvent
  • 属性模板IdentityPartAttribute、、 IdentityTupleAttributeBasicEventAttribute
  • 规则模板EventTriggerAttributeTrigger

每个模板都有自己的特定架构,用于配置步骤、参数和处理逻辑。 规则可以引用 fabricItemAction-v1FabricItemInvocation 作中的实体,以使用派生自触发事件的参数执行 Fabric 项。

从 Base64 解码 ReflexEntities.json 内容的示例

此示例显示了包含各种触发器和通知的包传递监视系统:

[
  {
    "uniqueIdentifier": "c845c472-8d8e-498d-bdf4-9e12ab456668",
    "payload": {
      "name": "Package delivery sample",
      "type": "samples"
    },
    "type": "container-v1"
  },
  {
    "uniqueIdentifier": "85693be9-e8ed-49b3-b792-9dcb6750a49a",
    "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": "c845c472-8d8e-498d-bdf4-9e12ab456668"
      }
    },
    "type": "simulatorSource-v1"
  },
  {
    "uniqueIdentifier": "c4a451a0-6b1e-4cc7-b5b8-93d58816a85b",
    "payload": {
      "name": "Package delivery events",
      "parentContainer": {
        "targetUniqueIdentifier": "c845c472-8d8e-498d-bdf4-9e12ab456668"
      },
      "definition": {
        "type": "Event",
        "instance": "{\"templateId\":\"SourceEvent\",\"templateVersion\":\"1.1\",\"steps\":[{\"name\":\"SourceEventStep\",\"id\":\"c5b4fdfd-559a-4bf7-912f-705617cd1d86\",\"rows\":[{\"name\":\"SourceSelector\",\"kind\":\"SourceReference\",\"arguments\":[{\"name\":\"entityId\",\"type\":\"string\",\"value\":\"85693be9-e8ed-49b3-b792-9dcb6750a49a\"}]}]}]}"
      }
    },
    "type": "timeSeriesView-v1"
  },
  {
    "uniqueIdentifier": "a18d312c-c855-4e76-bb75-ce473ae59e8c",
    "payload": {
      "name": "Package",
      "parentContainer": {
        "targetUniqueIdentifier": "c845c472-8d8e-498d-bdf4-9e12ab456668"
      },
      "definition": {
        "type": "Object"
      }
    },
    "type": "timeSeriesView-v1"
  },
  {
    "uniqueIdentifier": "47f2a2ab-e2e9-4dc1-88f7-953f3b5cfd37",
    "payload": {
      "name": "PackageId",
      "parentObject": {
        "targetUniqueIdentifier": "a18d312c-c855-4e76-bb75-ce473ae59e8c"
      },
      "parentContainer": {
        "targetUniqueIdentifier": "c845c472-8d8e-498d-bdf4-9e12ab456668"
      },
      "definition": {
        "type": "Attribute",
        "instance": "{\"templateId\":\"IdentityPartAttribute\",\"templateVersion\":\"1.1\",\"steps\":[{\"name\":\"IdPartStep\",\"id\":\"ce6358bf-e1e4-4f16-8453-181b58ec0a4d\",\"rows\":[{\"name\":\"TypeAssertion\",\"kind\":\"TypeAssertion\",\"arguments\":[{\"name\":\"op\",\"type\":\"string\",\"value\":\"Text\"},{\"name\":\"format\",\"type\":\"string\",\"value\":\"\"}]}]}]}"
      }
    },
    "type": "timeSeriesView-v1"
  },
  {
    "uniqueIdentifier": "07564441-30f5-4a67-8df2-4f13ba85a2da",
    "payload": {
      "name": "Temperature (°C)",
      "parentObject": {
        "targetUniqueIdentifier": "a18d312c-c855-4e76-bb75-ce473ae59e8c"
      },
      "parentContainer": {
        "targetUniqueIdentifier": "c845c472-8d8e-498d-bdf4-9e12ab456668"
      },
      "definition": {
        "type": "Attribute",
        "instance": "{\"templateId\":\"BasicEventAttribute\",\"templateVersion\":\"1.1\",\"steps\":[{\"name\":\"EventSelectStep\",\"id\":\"f986dac6-a843-43c4-9335-e5950148d41e\",\"rows\":[{\"name\":\"EventSelector\",\"kind\":\"Event\",\"arguments\":[{\"kind\":\"EventReference\",\"type\":\"complex\",\"arguments\":[{\"name\":\"entityId\",\"type\":\"string\",\"value\":\"f9c9e86e-0389-4128-bcd8-65cbe2352d75\"}],\"name\":\"event\"}]},{\"name\":\"EventFieldSelector\",\"kind\":\"EventField\",\"arguments\":[{\"name\":\"fieldName\",\"type\":\"string\",\"value\":\"Temperature\"}]}]},{\"name\":\"EventComputeStep\",\"id\":\"10553199-f8bc-4275-80a8-7996a255f6a3\",\"rows\":[{\"name\":\"TypeAssertion\",\"kind\":\"TypeAssertion\",\"arguments\":[{\"name\":\"op\",\"type\":\"string\",\"value\":\"Number\"},{\"name\":\"format\",\"type\":\"string\",\"value\":\"\"}]}]}]}"
      }
    },
    "type": "timeSeriesView-v1"
  },
  {
    "uniqueIdentifier": "2b587dc3-5dfc-4838-ad4c-35e1586c58d5",
    "payload": {
      "name": "Too hot for medicine",
      "parentObject": {
        "targetUniqueIdentifier": "a18d312c-c855-4e76-bb75-ce473ae59e8c"
      },
      "parentContainer": {
        "targetUniqueIdentifier": "c845c472-8d8e-498d-bdf4-9e12ab456668"
      },
      "definition": {
        "type": "Rule",
        "instance": "{\"templateId\":\"AttributeTrigger\",\"templateVersion\":\"1.1\",\"steps\":[{\"name\":\"ScalarSelectStep\",\"id\":\"a63dcd75-3149-452b-a49c-ab4973c3dd82\",\"rows\":[{\"name\":\"AttributeSelector\",\"kind\":\"Attribute\",\"arguments\":[{\"kind\":\"AttributeReference\",\"type\":\"complex\",\"arguments\":[{\"name\":\"entityId\",\"type\":\"string\",\"value\":\"07564441-30f5-4a67-8df2-4f13ba85a2da\"}],\"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\":\"a1bc1c0c-6651-46ac-976f-9a1fcb42a269\",\"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\":\"9445c334-ebd3-47b7-b958-198f7e53f53e\",\"rows\":[{\"name\":\"AttributeSelector\",\"kind\":\"Attribute\",\"arguments\":[{\"kind\":\"AttributeReference\",\"type\":\"complex\",\"arguments\":[{\"name\":\"entityId\",\"type\":\"string\",\"value\":\"25079a06-01f7-4dd9-a72c-761684ce0d37\"}],\"name\":\"attribute\"}]},{\"name\":\"TextValueCondition\",\"kind\":\"TextValueCondition\",\"arguments\":[{\"name\":\"op\",\"type\":\"string\",\"value\":\"IsEqualTo\"},{\"name\":\"value\",\"type\":\"string\",\"value\":\"Medicine\"}]}]},{\"name\":\"ActStep\",\"id\":\"3dec7f63-ab86-411d-b35c-cce1db9f124e\",\"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"
  }
]

定义示例

{
    "format": "json",
    "parts": [
        {
            "path": "ReflexEntities.json",
            "payload": "W3sKICAidW5pcXVlSWRlbnRpZmllciI6ICJjODQ1YzQ3Mi04ZDhlLTQ5OGQtYmRmNC05ZTEyYWI0NTY2NjgiLAogICJwYXlsb2FkIjogewogICAgIm5hbWUiOiAiUGFja2FnZSBkZWxpdmVyeSBzYW1wbGUiLAogICAgInR5cGUiOiAic2FtcGxlcyIKICB9LAogICJ0eXBlIjogImNvbnRhaW5lci12MSIKfV0=",
            "payloadType": "InlineBase64"
        },
        {
            "path": ".platform",
            "payload": "ZG90UGxhdGZvcm1CYXNlNjRTdHJpbmc=",
            "payloadType": "InlineBase64"
        }
    ]
}