将集合传递到自定义操作参数 passing-collection

在此页面上:​了解如何将简单集合和对象集合传递到自定义操作参数,以便在运行时动态填充它们。

您可以在自定义操作参数中传递集合,这些参数在运行时动态填充。

支持两种类型的收藏集:

  • 简单收藏集

    将简单集合用于基本值列表,例如字符串、数字或布尔值。 当您只需传递项目列表而无需附加属性时,这些功能非常有用。

    例如,设备类型列表:

    code language-json
    {
     "deviceTypes": [
         "android",
         "ios"
     ]
    }
    
  • 对象集合

    当每个项包含多个字段或属性时,使用对象集合。 它们通常用于传递结构化数据,例如产品详细信息、事件记录或项目属性。

    例如:

    code language-json
    {
    "products":[
       {
          "id":"productA",
          "name":"A",
          "price":20.1
       },
       {
          "id":"productB",
          "name":"B",
          "price":10.0
       },
       {
          "id":"productC",
          "name":"C",
          "price":5.99
       }
     ]
    }
    
NOTE
在自定义操作请求负载中,仅部分支持集合中的嵌套数组。 有关详细信息,请参阅限制

一般程序 general-procedure

在此部分中,我们使用以下JSON有效负载示例。 这是一个对象数组,其中的字段是一个简单的集合。

{
  "ctxt": {
    "products": [
      {
        "id": "productA",
        "name": "A",
        "price": 20.1,
        "color":"blue",
        "locations": [
          "Paris",
          "London"
        ]
      },
      {
        "id": "productB",
        "name": "B",
        "price": 10.99
      }
    ]
  }
}

您可以看到products是两个对象的数组。 您需要至少具有一个对象。

  1. 创建自定义操作。 请参阅此页面以了解详情。

  2. 在​ 操作参数 ​部分中,粘贴JSON示例。 显示的结构是静态的:粘贴有效负载时,所有字段都定义为常量。

    显示集合函数和操作的 表达式编辑器

  3. 如果需要,请调整字段类型。 集合支持以下字段类型:listString、listInteger、listDecimal、listBoolean、listDateTime、listDateTimeOnly、listDateOnly、listObject

    note
    NOTE
    根据有效负载示例自动推断字段类型。
  4. 如果要动态传递对象,则需要将它们设置为变量。 在此示例中,我们将products设置为变量。 对象中包含的所有对象字段都会自动设置为变量。

    note
    NOTE
    有效负载示例的第一个对象用于定义字段。
  5. 对于每个字段,定义将在历程画布中显示的标签。

    筛选集合函数与条件生成器接口 {width="70%"}

  6. 创建历程并添加您创建的自定义操作。 请参阅此页面以了解详情。

  7. 在​ 操作参数 ​部分中,使用高级表达式编辑器定义数组参数(在本例中为products)。

    包含字段选择的集合筛选表达式

  8. 对于以下每个对象字段,键入源XDM架构中的相应字段名称。 如果名称相同,则不需要此操作。 在我们的示例中,我们只需要定义product id和“颜色”。

    具有排序配置的集合排序函数 {width="50%"}

对于数组字段,您还可以使用高级表达式编辑器执行数据操作。 在以下示例中,我们使用filterintersect函数:

包含筛选、排序和限制操作的完整集合表达式

限制 limitations

虽然自定义操作中的集合为传递动态数据提供了灵活性,但需要注意一些结构性约束:

  • 在自定义操作中支持嵌套数组

    Adobe Journey Optimizer在自定义操作​ 响应负载 ​中支持对象的嵌套数组,但此支持在​ 请求负载 ​中受限。

    在请求有效负载中,仅当嵌套数组包含固定数量的项目时(如自定义操作配置中所定义),才支持嵌套数组。 例如,如果嵌套数组始终只包含三个项目,则可以将其配置为常量。 当项目的数量需要为动态时,只能将非嵌套数组(位于底层的数组)定义为变量。

    示例:

    1. 以下示例说明了​不支持的用例

      在此示例中,products数组包含一个嵌套数组(locations),该数组具有动态数量的项,这在请求负载中不受支持。

      code language-json
      {
      "products": [
         {
            "id": "productA",
            "name": "A",
            "price": 20,
            "locations": [
            { "name": "Paris" },
            { "name": "London" }
            ]
         }
      ]
      }
      
    2. 支持的示例,其中包含定义为常量的固定项目。

      在这种情况下,嵌套位置将由固定字段(location1location2)替换,从而允许有效负载在支持的配置中保持有效。

      code language-json
      {
      "products": [
         {
            "id": "productA",
            "name": "A",
            "price": 20,
            "location1": { "name": "Paris" },
            "location2": { "name": "London" }
         }
      ]
      }
      
  • 测试集合:要使用测试模式测试集合,必须使用代码视图模式。 请注意,业务事件不支持代码视图模式,因此在这种情况下,您只能发送包含单个元素的集合。

特定案例 examples

对于异构类型和阵列阵列,使用listAny类型定义阵列。 只能映射单个项,但不能将数组更改为变量。

具有混合数据类型和字段选择的异构集合 {width="70%"}

异质类型示例:

{
    "data_mixed-types": [
        "test",
        "test2",
        null,
        0
    ]
}

阵列示例:

{
    "data_multiple-arrays": [
        [
            "test",
            "test1",
            "test2"
        ]
    ]
}

其他资源

浏览以下部分,了解有关配置、使用和排除自定义操作的更多信息:

AI知识参考

本节包含结构化知识,用于支持与本主题相关的解释、检索和问答。

要全面了解相关信息,应将此信息与本页上的文档相结合。 这两个源都不是独立的;页面描述了功能,而本节提供了其他上下文来帮助消除术语、意图、适用性和约束条件的歧义。

  • TL;DR:​本页介绍如何在Journey Optimizer中将简单集合和对象集合动态传递到自定义操作参数中,包括支持的字段类型、配置过程以及有关嵌套数组的已知限制。

意图:

  • 配置自定义操作以接受收藏集(简单或对象)作为动态参数
  • 构建历程时,在高级表达式编辑器中将数组参数定义为变量
  • 应用过滤器和交集函数以处理表达式编辑器中的数组数据
  • 了解并适应自定义操作请求负载的嵌套数组限制
  • 在历程测试模式下使用代码视图模式测试收集参数

术语表:

  • 简单集合:作为自定义操作参数​(产品特定)传递的基本标量值(字符串、数字、布尔值)列表
  • 对象集合:结构化对象列表,每个对象具有多个字段,作为自定义操作参数​ (产品特定) ​传递
  • listObject:自定义操作配置中用于表示对象​ (产品特定) ​数组的字段类型
  • listAny:用于异类数组或数组的字段类型,其中项具有混合类型​(产品特定)
  • 变量(与常量):在操作参数配置中,运行时从历程上下文中动态填充设置为“变量”的字段,而“常量”是在配置时​ (产品特定) ​设置的固定值

护栏:

  • 仅当请求有效负载中的嵌套数组包含固定数量的项目(定义为常量)时,才支持这些数组;不支持动态嵌套数组
  • 在测试模式下测试集合需要代码视图模式;业务事件不支持代码视图,因此在这种情况下只能发送单元素集合
  • 用于定义收集字段的有效负载示例中必须至少存在一个对象
  • 有效负载示例的第一个对象定义整个集合的字段

术语:

  • 规范名称:集合 — 首字母缩略词:无 — 变体:数组、列表、动态集合
  • 同义词: “simple collection” = “scalar values”; “object collection” = “array of objects”
  • 请勿混淆:“listAny”≠“listObject”(listAny处理异构或嵌套数组;listObject处理结构化对象的统一数组)

常见问题解答:

  • 问:简单集合和对象集合之间有何区别? — 简单集合包含基本标量值(字符串、数字、布尔值),而对象集合则包含每个都具有多个命名字段的结构化对象。
  • 问:如何在运行时使集合参数成为动态参数? — 在自定义操作的Action parameters部分,将数组字段设置为“variable”;其后数组中的所有对象字段都会自动设置为变量。
  • 问:自定义操作请求负载是否支持嵌套数组? — 仅部分。 具有固定、已知数目的项目的嵌套数组可以定义为常量。 请求负载不支持具有动态项目数的嵌套数组。
  • 问:如何在历程测试模式下测试集合? — 在测试界面中使用代码视图模式。 请注意,业务事件不支持代码视图,因此在该上下文中只能测试单个元素集合。
  • 问:集合支持哪些字段类型? — listString、listInteger、listDecimal、listBoolean、listDateTime、listDateTimeOnly、listDateOnly和listObject均受支持。
recommendation-more-help
journey-optimizer-help