Azure Logic App可从Azure Blob容器动态获取Blob内容,而不必在路径中保存文件名

问题描述

我正在使用Azure逻辑应用程序从我的Azure容器中获取Blob内容。 Blob每月以以下格式存储在我的容器中: 例如。 mycontainer / invoice / 20200101 / invoice1.csv,mycontainer / invoice / 20200201 / invoice2.csv,依此类推。 换句话说,每个月的发票都通过示例中表示月份和日期的文件夹动态地存储在我的容器中。 (2020年1月1日,yyyyMMdd格式)

到目前为止,我已经能够提取在容器中创建的最新文件夹。在这种情况下,那是十月,因为我们在十月。但是我希望获取文件夹中的最新文件

我当前的工作流程如下:-

Current Workflow

对此有何建议? 谢谢!

解决方法

我提供了完整的逻辑应用程序供您参考,大多数操作与您相同:

1。。逻辑应用程序概述 enter image description here

2。。前三个动作 enter image description here

3。第四和第五个动作 enter image description here

4。。“ 对于每个”循环的详细信息 enter image description here

设置变量”中的表达式为int(substring(items('For_each')?['Name'],8)),而“ 设置变量3 ”中的表达式为replace(items('For_each')?['Name'],'/','')

5。。最后两个动作 enter image description here

获取Blob内容”操作中的最后一个表达式是body('List_blobs_2')?['value'][0]?['Name']

==================================== 更新 === =============================

1。。删除逻辑应用程序的最后一项操作“ 获取Blob内容”。

2。。然后,我们在操作“ 列出Blob 2 ”之后开始。添加两个“ 初始化变量”。 enter image description here

3。。添加另一个“ 对于每个”循环。 请注意:从“ 列出blob 2 ”中的“ 每2个”中选择value,但不要选择value从“ 列出Blob ”到“ 每2 ”中。 enter image description here

4。。“ 对于每个2 ”循环中的详细信息。 enter image description here

两个fx ticks(...)的表达式均为ticks(items('For_each_2')?['LastModified'])

在“ 设置变量5 ”中,还从“ 列表Blob 2 ”中选择Name,而不是从“ 列表Blob ”。

5。。然后添加“ 获取blob内容”操作,如下面的屏幕截图所示。 enter image description here

6。。顺便说一句:在运行逻辑应用程序之前,请对逻辑应用程序中的所有“ 对于每个”循环操作进行此设置。否则,结果可能不正确。

单击“对于每个”操作的...按钮,然后单击“设置”,启用Concurrency Control并将Degree of Parallelism设置为1enter image description here

,

您可以从BLOB到Logic App运行事件网格触发器。一旦将新文件保存在BLOB中,它便可以将事件发布到事件网格,您的Logic App可以在其中订阅该事件,然后您就可以运行工作流。不必以这种方式进行循环,而是可以在每次保存文件时触发逻辑应用程序的工作流程。

here了解有关事件网格的更多信息。