您在此处:
粒度复制事件
当粒度复制任务完成、部分失败或完全失败时,B2C Commerce 系统会触发粒度复制事件。粒度复制在每个对象级别(产品、价格表、内容资产)而不是批量复制流程级别运行,因此其事件报告哪些对象 ID 成功,哪些失败。
可用于:B2C Commerce 版本 26.7 及更高版本。
事件 ID
| 事件 ID | 描述 | 被解雇时 |
|---|---|---|
sf.cc.replication.granular.completed
|
粒度复制已成功完成 | 当粒度复制任务完成且没有目标错误且零个未启动、未发布和未失效的对象时 |
sf.cc.replication.granular.failed
|
粒度复制完全失败 | 当任务以错误状态完成且此执行中没有对象成功时 |
sf.cc.replication.granular.incomplete
|
完成粒度复制,成功与失败并存 | 当任务以错误状态完成,但此执行中至少有一个对象成功时 |
HTTP 标头
粒度复制事件使用《 B2C Commerce 事件的常见 HTTP 标头 》中记录的标准 Commerce Cloud 平台标头,并将 x-sf-cc-event-id 设置为粒度复制事件 ID(例如, sf.cc.replication.granular.completed)。
JSON 有效负载结构 — 公共字段
| 字段 | 类型 | 必填 | 描述 |
|---|---|---|---|
进程 ID
|
integer | 是 | 粒度复制运行的作业执行 ID |
类型
|
string | 是 | 始终是字面上的 颗粒; 将粒度复制事件与进程级复制事件区分开来 |
目标系统
|
string | 是 | 目标系统名称,通常为“开发”或“生产” |
州
|
string | 是 | 作业的最终状态(请参阅细粒度流程状态) |
成功
|
布尔 | 是 |
仅对 已完成的事件为 true; false 表示失败和不完整的事件 |
开始日期
|
string | 是 | 作业开始的 ISO-8601 时间戳;未记录作业开始时间时为空字符串 |
结束日期
|
string | 是 | 发出事件时的 ISO-8601 时间戳 |
特定于事件的字段
| 事件 | 其他字段 |
|---|---|
sf.cc.replication.granular.completed
|
objects :成功完成的对象 ID 的每个可跟踪列表 |
sf.cc.replication.granular.failed
|
errorState (始终 GRANULAR_REPLICATION_FAILURE )和 failedObjects :每个可跟踪的失败对象列表,每个对象都有一个 ID 和一个 状态
|
sf.cc.replication.granular.incomplete
|
errorState (始终 GRANULAR_REPLICATION_INCOMPLETE)、 successfulObjects 和 failedObjects
|
精细的流程状态
状态 字段指示粒度复制作业的最终状态。
| 值 | 描述 |
|---|---|
已完成
|
所有排队对象均已完全导出、导入和废止 |
失败
|
作业以错误结束,并且没有生成任何成功的对象 |
不完整
|
任务以错误结束,但至少有一个对象成功(部分结果) |
对象存储桶
Objects 、 successfulObjects 和 failedObjects 有效负载字段共享相同的三存储桶结构,每个可跟踪类型一个存储桶。
| 字段 | 类型 | 必填 | 描述 |
|---|---|---|---|
产品展示
|
阵列 | 是 | 每个产品条目 |
价格表
|
阵列 | 是 | 按价格表条目 |
内容素材
|
阵列 | 是 | 每个内容素材条目 |
成功的条目(in objects 和 successfulObjects )包含一个 id 字符串。失败的条目(在 failedObjects 中)包含 id 字符串和机器可读 的状态 代码。
故障状态值
每个 failedObjects 条目上的 状态 字段都包含机器可读代码。
| 值 | 描述 |
|---|---|
EXPORT_ERROR
|
此对象从源系统导出失败 |
IMPORT_ERROR
|
导入此对象的目标系统失败 |
NOT_FINISHED
|
对象已排队或已导出,但从未达到已完成状态 |
TARGET_ERROR
|
导出后,目标系统报告了此对象的错误 |
NOT_INVALIDATED 对象不会出现在 failedObjects 中。如果对象导入成功,但缓存失效步骤未完成,则该对象仍会在成功列表(objects 或 successfulObjects)中报告。非零作业级非无效计数是导致作业发出 sf.cc.replication.granular.incomplete 事件而不是 completed 事件的原因。示例:成功的粒度复制事件
{
“processId”: 456,
“类型”:“GRANULAR”,“
targetSystem”:“生产”,“
状态”:“COMPLETED”,
“success”: true,
“objects”: {
“products”: [
{ “id”: “prod-001” }
],
“priceTables”: [
{ “id”: “prod-001@usd-prices” }
],
“contentAssets”: []
},“
startDate”:“2026-03-11T22:13:20Z”,“
结束日期”:"2026-03-11T22:13:25Z"
}
示例:粒度复制失败事件
{
“processId”: 456,
“类型”:“GRANULAR”,“
targetSystem”:“生产”,“
状态”:“失败”,“
成功”:false,“
errorState”:“GRANULAR_REPLICATION_FAILURE”,“
failedObjects”: {
“products”: [
{ “id”: “prod-001”, “status”:“TARGET_ERROR” }
],
“priceTables”: [],
“contentAssets”: []
},“
startDate”:“2026-03-11T22:13:20Z”,“
结束日期”:"2026-03-11T22:13:25Z"
}
示例:粒度复制事件不完整
{
“processId”: 456,
“类型”:“GRANULAR”,“
targetSystem”:“生产”,“
状态”:“不完整”,“
成功”:false,“
errorState”:“GRANULAR_REPLICATION_INCOMPLETE”,
“successfulObjects”: {
“products”: [
{ “id”: “prod-001” }
],
“priceTables”: [
{ “id”: “prod-001@usd-prices” }
],
“contentAssets”: []
},“
failedObjects”: {
“products”: [
{ “id”: “prod-002”, “status”:“IMPORT_ERROR” }
],
“priceTables”: [
{ “id”: “prod-003@eur-prices”, “status”:“NOT_FINISHED” }
],
“contentAssets”: []
},“
startDate”:“2026-03-11T22:13:20Z”,“
结束日期”:"2026-03-11T22:13:25Z"
}
粒度复制实施说明
-
type是文本字符串GRANULAR; 每个对象粒度复制流不同于进程级复制、发布和Code*事件类型。 -
processId是粒度复制作业执行 ID,而不是进程 UUID。 -
endDate反映事件的发出时间,而不是最终任务结束时间。 -
对于失败的事件,
errorState为 GRANULAR_REPLICATION_FAILURE,对于不完整的事件,则为GRANULAR_REPLICATION_INCOMPLETE。 - 每个对象存储桶(
products、priceTables、contentAssets)始终存在于有效负载中,即使为空也是如此。 - 故障状态值是机器可读代码,而不是本地化文本。
- 每个事件类型都由全局复制事件属性和每个事件功能切换(已完成、失败和未完成事件各一个)进行控制。如果禁用了其中任何一个,则不会发送该事件。
