LogicApp - 模板语言函数 'contains' 期望它的第一个参数 'collection' 是一个字符串。提供的值是 'Null' 类型
LogicApp - The template language function 'contains' expects its first argument 'collection' to be a string. The provided value is of type 'Null'
我已经使用 Azure 服务总线队列触发器(当队列中收到消息时(自动完成))创建了一个 Azure 逻辑应用程序,用于重新处理死信队列消息。
在同一个逻辑应用程序中,我正在使用 DeadLetterReason 和 DeadLetterErrorDescription 属性值验证死信消息,然后将消息发布到活动队列。
但是对于少数死信消息不包含 DeadLetterErrorDescription 属性 名称和值。
逻辑应用中的验证码:
"expression": {
"or": [
{
"equals": [
"@triggerBody()?['Properties']?['DeadLetterReason']",
"TTLExpiredException"
]
},
{
"and": [
{
"not": {
"equals": [
"@triggerBody()?['Properties']?['DeadLetterReason']",
200
]
}
},
{
"not": {
"contains": [
"@triggerBody()?['Properties']?['DeadLetterErrorDescription']",
"NotFoundException"
]
}
}
]
}
]
},
错误:
InvalidTemplate. Unable to process template language expressions for action 'Validate_the_DLQ_message_reason_and_description' at line '1' and column '3467': 'The template language function 'contains' expects its first argument 'collection' to be a dictionary (object), an array or a string. The provided value is of type 'Null'.'.
验证逻辑:
- 需要验证服务总线队列触发器属性中的 DeadLetterReason 和 DeadLetterErrorDescription 属性。
- 如果存在上述属性,那么我需要验证这些属性的值。
所以,请教我如何验证上面的属性名称是否存在于收到的死信消息中。
尝试使用 coalesce
函数将 null
替换为空字符串:
"expression": {
"or": [
{
"equals": [
"@coalesce(triggerBody()?['Properties']?['DeadLetterReason'], '')",
"TTLExpiredException"
]
},
{
"and": [
{
"not": {
"equals": [
"@coalesce(triggerBody()?['Properties']?['DeadLetterReason'], '')",
"200"
]
}
},
{
"not": {
"contains": [
"@coalesce(triggerBody()?['Properties']?['DeadLetterErrorDescription'], '')",
"NotFoundException"
]
}
}
]
}
]
},
我已经使用 Azure 服务总线队列触发器(当队列中收到消息时(自动完成))创建了一个 Azure 逻辑应用程序,用于重新处理死信队列消息。
在同一个逻辑应用程序中,我正在使用 DeadLetterReason 和 DeadLetterErrorDescription 属性值验证死信消息,然后将消息发布到活动队列。 但是对于少数死信消息不包含 DeadLetterErrorDescription 属性 名称和值。
逻辑应用中的验证码:
"expression": {
"or": [
{
"equals": [
"@triggerBody()?['Properties']?['DeadLetterReason']",
"TTLExpiredException"
]
},
{
"and": [
{
"not": {
"equals": [
"@triggerBody()?['Properties']?['DeadLetterReason']",
200
]
}
},
{
"not": {
"contains": [
"@triggerBody()?['Properties']?['DeadLetterErrorDescription']",
"NotFoundException"
]
}
}
]
}
]
},
错误:
InvalidTemplate. Unable to process template language expressions for action 'Validate_the_DLQ_message_reason_and_description' at line '1' and column '3467': 'The template language function 'contains' expects its first argument 'collection' to be a dictionary (object), an array or a string. The provided value is of type 'Null'.'.
验证逻辑:
- 需要验证服务总线队列触发器属性中的 DeadLetterReason 和 DeadLetterErrorDescription 属性。
- 如果存在上述属性,那么我需要验证这些属性的值。
所以,请教我如何验证上面的属性名称是否存在于收到的死信消息中。
尝试使用 coalesce
函数将 null
替换为空字符串:
"expression": {
"or": [
{
"equals": [
"@coalesce(triggerBody()?['Properties']?['DeadLetterReason'], '')",
"TTLExpiredException"
]
},
{
"and": [
{
"not": {
"equals": [
"@coalesce(triggerBody()?['Properties']?['DeadLetterReason'], '')",
"200"
]
}
},
{
"not": {
"contains": [
"@coalesce(triggerBody()?['Properties']?['DeadLetterErrorDescription'], '')",
"NotFoundException"
]
}
}
]
}
]
},