managing-cdc-enablement

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Managing Change Data Capture Enablement

管理Change Data Capture启用配置

Generate the metadata that subscribes Salesforce objects to Change Data Capture:
PlatformEventChannelMember
files for the default
ChangeEvents
channel or a custom channel, and
PlatformEventChannel
files for new custom channels. Covers enrichment fields, filter expressions, and the canonical naming and value formats that the Metadata API actually accepts (which differ from values that appear in many internal test fixtures and code-search hits).
生成用于将Salesforce对象订阅到Change Data Capture的元数据:针对默认
ChangeEvents
通道或自定义通道的
PlatformEventChannelMember
文件,以及针对新自定义通道的
PlatformEventChannel
文件。涵盖enrichment fields、过滤表达式,以及Metadata API实际接受的标准命名和值格式(这些格式与许多内部测试 fixture 和代码搜索结果中的值不同)。

Scope

范围

  • In scope: Generating
    PlatformEventChannelMember
    and
    PlatformEventChannel
    metadata for CDC. Subscribing standard objects, custom objects, or both. Configuring enrichment fields. Configuring filter expressions. Defining custom data channels.
  • Out of scope: Publishing custom platform events (PE) — that's a different metadata type (
    PlatformEvent
    ). Pub/Sub API or external Kafka/Bayeux configuration. Pricing/limits guidance — refer the user to the CDC Developer Guide. Programmatic event-bus subscribers in Apex.

  • 包含范围:为CDC生成
    PlatformEventChannelMember
    PlatformEventChannel
    元数据。订阅标准对象、自定义对象或两者。配置enrichment fields。配置过滤表达式。定义自定义数据通道。
  • 排除范围:发布自定义平台事件(PE)——这是不同的元数据类型(
    PlatformEvent
    )。Pub/Sub API或外部Kafka/Bayeux配置。定价/限制指南——请引导用户查看CDC开发者指南。Apex中的程序化事件总线订阅者。

Clarifying Questions

澄清问题

Before generating, confirm with the user if not already clear:
  • Which entity (or entities) need CDC enablement? Standard, custom, or both?
  • Default channel (
    ChangeEvents
    ) or a custom channel? If custom, what's the channel label?
  • Any enrichment fields needed? (Lookup IDs that the consumer needs even when they didn't change.)
  • Any filter expression needed? (A SOQL-WHERE-clause body that gates which change events emit.)

在生成之前,如果信息不明确,请与用户确认:
  • 哪些实体需要启用CDC?标准对象、自定义对象还是两者都需要?
  • 使用默认通道(
    ChangeEvents
    )还是自定义通道?如果是自定义通道,通道标签是什么?
  • 是否需要enrichment fields?(即使未发生变更,消费者仍需的查找ID。)
  • 是否需要过滤表达式?(用于控制哪些变更事件会触发的SOQL WHERE子句主体。)

Required Inputs

必填输入

Gather or infer before proceeding:
  • Source entity API name(s) — e.g.
    Account
    ,
    Lead
    ,
    Order__c
    . The skill internally translates this to the ChangeEvent entity name (see Workflow step 2).
  • Channel — either
    ChangeEvents
    (default) or the developer name of a custom channel ending in
    __chn
    .
  • Enrichment fields (optional) — list of field API names on the source object whose values should be included in every change event.
  • Filter expression (optional) — a predicate over fields on the change event payload (e.g.
    Status__c != null
    ).
Defaults unless specified:
  • Channel:
    ChangeEvents
    (the default CDC channel — no path prefix).
  • Enrichment fields: none.
  • Filter expression: none.
If the user provides a clear, complete request, generate immediately without unnecessary back-and-forth.

在继续之前,收集或推断以下信息:
  • 源实体API名称——例如
    Account
    Lead
    Order__c
    。此技能会在内部将其转换为ChangeEvent实体名称(请参阅工作流步骤2)。
  • 通道——
    ChangeEvents
    (默认)或以
    __chn
    结尾的自定义通道的开发者名称。
  • Enrichment fields(可选)——源对象上的字段API名称列表,其值应包含在每个变更事件中。
  • 过滤表达式(可选)——变更事件负载上的谓词(例如
    Status__c != null
    )。
除非另有指定,否则默认值:
  • 通道:
    ChangeEvents
    (默认CDC通道——无前缀路径)。
  • Enrichment fields:无。
  • 过滤表达式:无。
如果用户提供清晰、完整的请求,请立即生成,无需不必要的来回沟通。

Workflow

工作流

All steps are sequential. Do not skip or reorder.
Before generating anything, know the only valid CDC metadata types: CDC is expressed entirely through
PlatformEventChannelMember
(one per subscribed entity) and
PlatformEventChannel
(only for custom channels). Do NOT use
<ChangeDataCapture>
,
.changeDataCapture-meta.xml
,
changeDataCapture/
directories,
EnableChangeDataCapture
, or
ManagedEventSubscription
— these are not in scope for CDC. If you find yourself writing any of them, stop and use a
PlatformEventChannelMember
file instead.
  1. Identify the channel — if the user names a custom channel, you'll generate a
    PlatformEventChannel
    file (see step 4). Otherwise use the literal value
    ChangeEvents
    for the default channel.
  2. Translate source entity to ChangeEvent entity name
    <selectedEntity>
    is the ChangeEvent type, NOT the source object:
    Source object
    <selectedEntity>
    value
    Account
    AccountChangeEvent
    Lead
    LeadChangeEvent
    Contact
    ContactChangeEvent
    Order__c
    (custom)
    Order__ChangeEvent
    MyThing__c
    (custom)
    MyThing__ChangeEvent
    For standard objects: append
    ChangeEvent
    . For custom objects: replace the trailing
    __c
    with
    __ChangeEvent
    (the double-underscore is preserved).
  3. Generate the channel-member file — one file per
    (entity, channel)
    pair. The filename and fullName always use a SINGLE underscore between the entity stem and
    ChangeEvent
    — this is independent of how
    selectedEntity
    is formatted in the XML body. For custom objects, drop the
    __c
    from the source name when forming the filename:
    Source objectFilename (and fullName)
    <selectedEntity>
    (in XML)
    Account
    Account_ChangeEvent.platformEventChannelMember-meta.xml
    AccountChangeEvent
    Lead
    Lead_ChangeEvent.platformEventChannelMember-meta.xml
    LeadChangeEvent
    Order__c
    Order_ChangeEvent.platformEventChannelMember-meta.xml
    (NOT
    Order__ChangeEvent
    )
    Order__ChangeEvent
    MyThing__c
    MyThing_ChangeEvent.platformEventChannelMember-meta.xml
    (NOT
    MyThing__ChangeEvent
    )
    MyThing__ChangeEvent
    The custom-object case is the easiest place to slip — the filename uses single underscore, the
    selectedEntity
    keeps its double underscore. Read
    assets/PlatformEventChannelMember-template.xml
    as the structural template.
  4. For a custom channel, generate a
    PlatformEventChannel
    file — required if any member references a non-default channel. Derive a DeveloperName from the user's label: strip spaces and non-alphanumeric characters, convert to CamelCase, then always append the literal suffix
    __chn
    . The filename and the channel's
    <eventChannel>
    reference must use this exact form, otherwise the deploy fails with
    Invalid channel name
    :
    User saysDeveloperNameFilename
    Partner Sync
    PartnerSync__chn
    PartnerSync__chn.platformEventChannel-meta.xml
    (NOT
    Partner_Sync...
    or
    PartnerSync...
    )
    Order Updates
    OrderUpdates__chn
    OrderUpdates__chn.platformEventChannel-meta.xml
    data sync
    DataSync__chn
    DataSync__chn.platformEventChannel-meta.xml
    Members on this channel reference it by the same DeveloperName:
    <eventChannel>PartnerSync__chn</eventChannel>
    . Read
    assets/PlatformEventChannel-template.xml
    .
  5. Add enrichment fields if requested — repeat the
    <enrichedFields><name>FIELD_API_NAME</name></enrichedFields>
    block for each field. The name must be a single-hop API name on the source entity — verified working with: standard lookup IDs (
    OwnerId
    ,
    ParentId
    ), custom lookup fields (
    MyLookup__c
    ), and custom non-relationship fields (
    Region__c
    ,
    Status__c
    ). Relationship traversals like
    Owner.Name
    or
    Parent.Account.Industry
    are rejected by deploy with "The selected field, X.Y, isn't valid".
  6. Add a filter expression if requested — wrap the predicate in
    <filterExpression>...</filterExpression>
    . The body is a WHERE-clause body without the
    WHERE
    keyword (e.g.
    Status__c != null
    , not
    WHERE Status__c != null
    ). For supported operators, field types, and pitfalls, read
    references/filter-expressions.md
    .

所有步骤按顺序执行,请勿跳过或重新排序。
在生成任何内容之前,请了解唯一有效的CDC元数据类型:CDC完全通过
PlatformEventChannelMember
(每个订阅实体一个)和
PlatformEventChannel
(仅适用于自定义通道)来表示。请勿使用
<ChangeDataCapture>
.changeDataCapture-meta.xml
changeDataCapture/
目录、
EnableChangeDataCapture
ManagedEventSubscription
——这些不在CDC的范围内。如果发现自己正在编写这些内容,请停止并改用
PlatformEventChannelMember
文件。
  1. 确定通道——如果用户指定了自定义通道,您需要生成
    PlatformEventChannel
    文件(请参阅步骤4)。否则,对默认通道使用字面量值
    ChangeEvents
  2. 将源实体转换为ChangeEvent实体名称——
    <selectedEntity>
    ChangeEvent类型,而非源对象:
    源对象
    <selectedEntity>
    Account
    AccountChangeEvent
    Lead
    LeadChangeEvent
    Contact
    ContactChangeEvent
    Order__c
    (自定义)
    Order__ChangeEvent
    MyThing__c
    (自定义)
    MyThing__ChangeEvent
    对于标准对象:追加
    ChangeEvent
    。对于自定义对象:将末尾的
    __c
    替换为
    __ChangeEvent
    (保留双下划线)。
  3. 生成通道成员文件——每个
    (实体, 通道)
    对对应一个文件。文件名和fullName始终在实体主干和
    ChangeEvent
    之间使用单个下划线
    ——这与XML主体中
    <selectedEntity>
    的格式无关。对于自定义对象,在形成文件名时去掉源名称中的
    __c
    源对象文件名(和fullName)
    <selectedEntity>
    (XML中)
    Account
    Account_ChangeEvent.platformEventChannelMember-meta.xml
    AccountChangeEvent
    Lead
    Lead_ChangeEvent.platformEventChannelMember-meta.xml
    LeadChangeEvent
    Order__c
    Order_ChangeEvent.platformEventChannelMember-meta.xml
    (不是
    Order__ChangeEvent
    Order__ChangeEvent
    MyThing__c
    MyThing_ChangeEvent.platformEventChannelMember-meta.xml
    (不是
    MyThing__ChangeEvent
    MyThing__ChangeEvent
    自定义对象的情况最容易出错——文件名使用单个下划线,
    selectedEntity
    保留双下划线。请阅读
    assets/PlatformEventChannelMember-template.xml
    作为结构模板。
  4. 对于自定义通道,生成
    PlatformEventChannel
    文件——如果任何成员引用非默认通道,则需要此文件。从用户提供的标签派生DeveloperName:去除空格和非字母数字字符,转换为驼峰式,然后始终追加字面量后缀
    __chn
    。文件名和通道的
    <eventChannel>
    引用必须使用此确切形式,否则部署会失败并提示
    Invalid channel name
    用户表述DeveloperName文件名
    Partner Sync
    PartnerSync__chn
    PartnerSync__chn.platformEventChannel-meta.xml
    (不是
    Partner_Sync...
    PartnerSync...
    Order Updates
    OrderUpdates__chn
    OrderUpdates__chn.platformEventChannel-meta.xml
    data sync
    DataSync__chn
    DataSync__chn.platformEventChannel-meta.xml
    此通道上的成员通过相同的DeveloperName引用它:
    <eventChannel>PartnerSync__chn</eventChannel>
    。请阅读
    assets/PlatformEventChannel-template.xml
  5. 如果需要,添加enrichment fields——为每个字段重复
    <enrichedFields><name>FIELD_API_NAME</name></enrichedFields>
    块。名称必须是源实体上的单跳API名称——已验证可用于:标准查找ID(
    OwnerId
    ParentId
    )、自定义查找字段(
    MyLookup__c
    )和自定义非关系字段(
    Region__c
    Status__c
    )。像
    Owner.Name
    Parent.Account.Industry
    这样的关系遍历会在部署时被拒绝,提示“The selected field, X.Y, isn't valid”。
  6. 如果需要,添加过滤表达式——将谓词包裹在
    <filterExpression>...</filterExpression>
    中。主体是不带
    WHERE
    关键字的WHERE子句主体(例如
    Status__c != null
    ,而非
    WHERE Status__c != null
    )。有关支持的运算符、字段类型和注意事项,请阅读
    references/filter-expressions.md

Rules / Constraints

规则/约束

ConstraintRationale
<selectedEntity>
is the ChangeEvent type name, not the source object name
The Metadata API binds the member to a ChangeEvent entity — passing
Account
directly fails with "invalid event in selectedEntity".
Member fullName uses single underscore:
Account_ChangeEvent
The double-underscore form (
Account__ChangeEvent
) is parsed as
<namespace>__<name>
and rejected: "Cannot create a new component with the namespace: Account".
Default channel value is exactly
ChangeEvents
— no path prefix
Older fixtures and some docs show
data/ChangeEvents
; the deploy returns "Unable to find the specified channel" for that value.
Enrichment field names are single-hop API names on the source entityStandard (
OwnerId
), custom lookup (
MyLookup__c
), and custom non-relationship (
Region__c
) all validate. Traversals like
Owner.Name
are rejected: "The selected field, X.Y, isn't valid".
<filterExpression>
body has no
WHERE
keyword
Deploy returns "filter expression has syntax errors: unexpected token: 'WHERE'".
Filter cannot reference
IsDeleted
or do relationship traversal (
Owner.Username
)
Deploy rejects with "field is invalid".
DateTime fields support only equality in filters (
=
,
!=
) — not
<
/
>
Deploy returns "Only equality operators are supported for this field type or value". Use a named date literal:
LastModifiedDate = TODAY
.
Filter RHS must be a literal — no field-to-field comparison
BillingCity = ShippingCity
returns "unexpected token: 'ShippingCity'".
Compound fields (e.g.
BillingAddress
) require dotted component access in filter
BillingAddress.City = 'X'
deploys; flat
BillingCity
is rejected as "field is invalid"; raw
BillingAddress
is rejected as "has to be used with a component field". Note this is the OPPOSITE of
<enrichedFields>
, which uses flat names.
Custom channel filename ends with
__chn
before the meta-xml suffix
Salesforce's MDAPI naming convention; mismatch causes deploy ambiguity.
Custom channel XML must include
<channelType>data</channelType>
Without
data
, the channel is rejected for CDC (other types exist for streaming/event channels).
Source custom objects must already exist (or be deployed in the same transaction)The ChangeEvent entity for
Foo__c
doesn't exist until
Foo__c
does; member deploy fails otherwise.
Never generate a
PlatformEventChannel
file for the default
ChangeEvents
channel
The default channel is system-provided. Reference it via
<eventChannel>ChangeEvents</eventChannel>
on members, but only custom (
__chn
) channels need a channel-meta file.
PlatformEventChannelMember
accepts ONLY four elements:
<enrichedFields>
,
<eventChannel>
,
<filterExpression>
,
<selectedEntity>
Adding
<description>
,
<isActive>
,
<masterLabel>
, or any other element fails XML schema validation: "Element {...} invalid at this location". Stick to the four documented elements.
PlatformEventChannel
accepts ONLY two elements:
<channelType>
and
<label>
Adding
<masterLabel>
,
<description>
, etc. produces "Element {...}masterLabel invalid at this location in type PlatformEventChannel". Use
<label>
, not
<masterLabel>
.
Generated metadata files only — never run
sf project deploy start
from this skill
This skill produces artifacts; deployment is a separate lifecycle concern.

约束理由
<selectedEntity>
是ChangeEvent类型名称,而非源对象名称
Metadata API将成员绑定到ChangeEvent实体——直接传递
Account
会失败并提示“invalid event in selectedEntity”。
成员fullName使用单个下划线:
Account_ChangeEvent
双下划线形式(
Account__ChangeEvent
)会被解析为
<namespace>__<name>
并被拒绝:“Cannot create a new component with the namespace: Account”。
默认通道值恰好是
ChangeEvents
——无前缀路径
旧的fixture和一些文档显示
data/ChangeEvents
;使用该值部署会返回“Unable to find the specified channel”。
Enrichment字段名称是源实体上的单跳API名称标准字段(
OwnerId
)、自定义查找字段(
MyLookup__c
)和自定义非关系字段(
Region__c
)都能通过验证。像
Owner.Name
这样的遍历会被拒绝:“The selected field, X.Y, isn't valid”。
<filterExpression>
主体没有
WHERE
关键字
部署会返回“filter expression has syntax errors: unexpected token: 'WHERE'”。
过滤器不能引用
IsDeleted
或进行关系遍历(
Owner.Username
部署会拒绝并提示“field is invalid”。
DateTime字段在过滤器中仅支持相等性
=
!=
)——不支持
<
/
>
部署会返回“Only equality operators are supported for this field type or value”。使用命名日期字面量:
LastModifiedDate = TODAY
过滤器右侧必须是字面量——不支持字段间比较
BillingCity = ShippingCity
会返回“unexpected token: 'ShippingCity'”。
复合字段(例如
BillingAddress
)在过滤器中需要使用点分组件访问
BillingAddress.City = 'X'
可以部署;扁平的
BillingCity
会被拒绝为“field is invalid”;原始的
BillingAddress
会被拒绝为“has to be used with a component field”。请注意,这与
<enrichedFields>
相反,后者使用扁平名称。
自定义通道文件名在meta-xml后缀之前以
__chn
结尾
Salesforce的MDAPI命名约定;不匹配会导致部署歧义。
自定义通道XML必须包含
<channelType>data</channelType>
如果没有
data
,该通道会被CDC拒绝(其他类型适用于流/事件通道)。
源自定义对象必须已存在(或在同一事务中部署)
Foo__c
的ChangeEvent实体在
Foo__c
存在之前不存在;否则成员部署会失败。
永远不要为默认
ChangeEvents
通道生成
PlatformEventChannel
文件
默认通道是系统提供的。在成员上通过
<eventChannel>ChangeEvents</eventChannel>
引用它,但只有自定义(
__chn
)通道需要channel-meta文件。
PlatformEventChannelMember
仅接受四个元素:
<enrichedFields>
<eventChannel>
<filterExpression>
<selectedEntity>
添加
<description>
<isActive>
<masterLabel>
或任何其他元素会导致XML模式验证失败:“Element {...} invalid at this location”。请仅使用这四个已文档化的元素。
PlatformEventChannel
仅接受两个元素:
<channelType>
<label>
添加
<masterLabel>
<description>
等会产生“Element {...}masterLabel invalid at this location in type PlatformEventChannel”。请使用
<label>
,而非
<masterLabel>
仅生成元数据文件——切勿从此技能运行
sf project deploy start
此技能生成工件;部署是单独的生命周期问题。

Gotchas

常见问题

IssueResolution
Unable to find the specified channel
Set
<eventChannel>ChangeEvents</eventChannel>
(no
data/
prefix).
The PlatformEventChannelMember can't be created because it references an invalid event in the "selectedEntity" field
Use the ChangeEvent name, not the source object:
AccountChangeEvent
, not
Account
.
Cannot create a new component with the namespace: <Object>
Rename the file to use a single underscore:
Account_ChangeEvent...
, not
Account__ChangeEvent...
.
The selected field, X.Y, isn't valid
(in
<enrichedFields>
)
Replace
Owner.Name
with
OwnerId
. CDC enriches the lookup automatically; only single-hop field API names validate.
filter expression has syntax errors: unexpected token: 'WHERE'
Remove the
WHERE
keyword. The body is the predicate only.
The BillingCity field in the filter expression is invalid
(or any flat Address component)
Use the compound dotted form:
BillingAddress.City
, not
BillingCity
. See
references/filter-expressions.md
for the full compound-field matrix.
Custom-object member fails with "ChangeEvent doesn't exist"The source object isn't deployed yet. Ensure the
Foo__c
object metadata is in the same deploy or already in the org.
DUPLICATE_VALUE
on second deploy
The member is already subscribed. Either delete first or skip — CDC doesn't support upsert on members directly.
sf infra error (TypeInferenceError, DeployMetadata): Could not infer a metadata type
for a
.changeDataCapture-meta.xml
file
That file extension and metadata type don't exist. Replace the
changeDataCapture/<Entity>.changeDataCapture-meta.xml
file with a
platformEventChannelMembers/<Entity>_ChangeEvent.platformEventChannelMember-meta.xml
file.
User says "subscribe Order__c" but means standard
Order
Confirm —
OrderChangeEvent
(standard) and
Order__ChangeEvent
(custom) are different entities.

问题解决方案
Unable to find the specified channel
设置
<eventChannel>ChangeEvents</eventChannel>
(不带
data/
前缀)。
The PlatformEventChannelMember can't be created because it references an invalid event in the "selectedEntity" field
使用ChangeEvent名称,而非源对象:
AccountChangeEvent
,而非
Account
Cannot create a new component with the namespace: <Object>
将文件重命名为使用单个下划线:
Account_ChangeEvent...
,而非
Account__ChangeEvent...
The selected field, X.Y, isn't valid
(在
<enrichedFields>
中)
Owner.Name
替换为
OwnerId
。CDC会自动丰富查找字段;只有单跳字段API名称能通过验证。
filter expression has syntax errors: unexpected token: 'WHERE'
删除
WHERE
关键字。主体仅包含谓词。
The BillingCity field in the filter expression is invalid
(或任何扁平地址组件)
使用复合点分形式:
BillingAddress.City
,而非
BillingCity
。有关完整的复合字段矩阵,请参阅
references/filter-expressions.md
自定义对象成员部署失败并提示“ChangeEvent doesn't exist”源对象尚未部署。确保
Foo__c
对象元数据在同一部署中或已存在于组织中。
第二次部署时出现
DUPLICATE_VALUE
成员已订阅。要么先删除,要么跳过——CDC不支持对成员直接进行upsert。
针对
.changeDataCapture-meta.xml
文件出现
sf infra error (TypeInferenceError, DeployMetadata): Could not infer a metadata type
该文件扩展名和元数据类型不存在。将
changeDataCapture/<Entity>.changeDataCapture-meta.xml
文件替换为
platformEventChannelMembers/<Entity>_ChangeEvent.platformEventChannelMember-meta.xml
文件。
用户说“subscribe Order__c”但实际指标准
Order
确认——
OrderChangeEvent
(标准)和
Order__ChangeEvent
(自定义)是不同的实体。

Output Expectations

输出预期

Deliverables:
  • One
    force-app/.../platformEventChannelMembers/<Entity>_ChangeEvent.platformEventChannelMember-meta.xml
    per subscribed entity.
  • One
    force-app/.../platformEventChannels/<DevName>__chn.platformEventChannel-meta.xml
    per custom channel (if any).
File structure follows the templates in
assets/
.
After receiving the generated files, the user can verify them with
sf project deploy start --dry-run -d <path> --target-org <alias>
before deploying. If a dry-run surfaces an unfamiliar error,
references/deploy-troubleshooting.md
maps the common deploy errors to their metadata-side fixes.

交付物:
  • 每个订阅实体对应一个
    force-app/.../platformEventChannelMembers/<Entity>_ChangeEvent.platformEventChannelMember-meta.xml
    文件。
  • 每个自定义通道对应一个
    force-app/.../platformEventChannels/<DevName>__chn.platformEventChannel-meta.xml
    文件(如果有)。
文件结构遵循
assets/
中的模板。
收到生成的文件后,用户可以在部署前使用
sf project deploy start --dry-run -d <path> --target-org <alias>
验证它们。如果试运行出现不熟悉的错误,
references/deploy-troubleshooting.md
会将常见部署错误映射到元数据端的修复方法。

Cross-Skill Integration

跨技能集成

NeedDelegate to
Generate the source custom object
generating-custom-object
skill
Generate custom fields referenced by enrichment or filter
generating-custom-field
skill
Build a permission set for users who consume change events
generating-permission-set
skill

需求委托给
生成源自定义对象
generating-custom-object
技能
生成enrichment或过滤器引用的自定义字段
generating-custom-field
技能
为消费变更事件的用户生成权限集
generating-permission-set
技能

Reference File Index

参考文件索引

FileWhen to read
assets/PlatformEventChannelMember-template.xml
Step 3 — starting structure for a channel member
assets/PlatformEventChannel-template.xml
Step 4 — starting structure for a custom channel
references/filter-expressions.md
Step 6 — for the supported operators and field-type matrix when writing a filter expression
references/deploy-troubleshooting.md
When a user reports a dry-run deploy error and asks for help diagnosing it
文件阅读时机
assets/PlatformEventChannelMember-template.xml
步骤3——通道成员的起始结构
assets/PlatformEventChannel-template.xml
步骤4——自定义通道的起始结构
references/filter-expressions.md
步骤6——编写过滤表达式时,了解支持的运算符和字段类型矩阵
references/deploy-troubleshooting.md
当用户报告试运行部署错误并请求帮助诊断时