是否可以根据另一个数组过滤逻辑应用程序中的数组?

Wes*_*org 3 azure azure-logic-apps

在我正在开发的逻辑应用程序中,我希望数组 A 中包含对象,而数组 B 中不存在实体。数组具有以下结构:

阵列A

[{"ExternalId": 1}, {"ExternalId": 2}]
Run Code Online (Sandbox Code Playgroud)

阵列B

[{"Id": 2}]
Run Code Online (Sandbox Code Playgroud)

除了 id 之外,这些数组还包含更多属性,为简单起见,我将省略这些属性。

我想要的结果是让数组 A 根据ExternalId 进行过滤,而ExternalId 在数组 B 中不可用,因此这应该会产生以下过滤后的数组:

[{"ExternalId": 1}]
Run Code Online (Sandbox Code Playgroud)

我尝试为此使用 FilterArray 操作,但我不知道如何对此进行建模。根据工作流定义语言,有一个 @contains 函数,但我无法以正确的方式构建它。

可以用这种方式做到这一点吗?在 Azure 逻辑应用中是否有其他方法可以实现此结果?

jef*_*lan 5

是的,我认为这还不可能 - 获得它的唯一方法如下,但目前在 Azure Functions 中运行可能更容易。

  1. 组成一个仅包含“ExternalId”值的新数组(这样您就可以在过滤器内将其与 @contains() 一起使用)
    1. 使用数组 B 中的每个项目创建一个 foreach 循环
    2. 在 foreach 循环内添加一个 compose with{ "body": "@item()['ExternalId']" }

在 foreach 循环之外,您现在可以执行 @body('Compose') 操作,并且您将拥有一个ExternalId 值数组([ 1 ]在上面的情况下)。

现在在数组A上创建过滤数组,过滤条件为where @contains(body('Compose'), item())

将来,我们计划支持 @select() @where() @orderby() 类型构造,这将使这变得更容易,以及映射数组操作 - 但仍在设计中。现在,您可以选择上述方法或调用 Azure 函数来处理 javascript/C#