将集合传递到自定义操作参数 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
    NOTE
    根据有效负载示例自动推断字段类型。
  4. 如果要动态传递对象,则需要将它们设置为变量。 在此示例中,我们将products设置为变量。 对象中包含的所有对象字段都会自动设置为变量。

    note 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"
        ]
    ]
}

其他资源

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

recommendation-more-help
b22c9c5d-9208-48f4-b874-1cefb8df4d76