【问题标题】:Filter recent files in Logic Apps' SFTP when files are added/modified trigger添加/修改文件时过滤逻辑应用 SFTP 中的最近文件触发器
【发布时间】:2020-07-27 15:45:12
【问题描述】:

我有一个连接到 SFTP 服务器的逻辑应用程序,它由“添加或修改文件”触发器触发。它设置为每 10 分钟运行一次,查找新的/修改过的文件并将它们复制到 Azure 存储帐户。

问题在于,此 SFTP 服务器路径设置为每 X 分钟覆盖一组文件(我无法控制),因此,逻辑应用程序经常与这些文件的更新过程重叠并下载文件仍在编写中。结果是文件损坏。

有没有办法向When files are added or modified (properties only) 添加过滤器,以便它只考虑修改日期至少为 1 分钟的文件?

这样,当前正在写入的文件不会被添加到要下载的文件列表中。然后,逻辑应用程序的下一次运行将获取这个被忽略的文件,依此类推。

更新

我在触发器的设置中找到了一个触发器条件,但我找不到任何关于它的文档。

【问题讨论】:

  • 如果你想知道如何使用触发条件表达式,你可以参考这个trigger condition,你可以过滤triggerbody中的属性来决定逻辑应用程序是否运行。
  • @GeorgeChen 是的,但这并没有显示可以在那里使用的所有可能的表达式。您将如何在那里按 LastModified 日期过滤?
  • 我贴出我的答案,你可以查一下。
  • 关于这个问题的任何处理?

标签: azure sftp azure-logic-apps last-modified


【解决方案1】:

根据测试触发器“添加或修改文件时”,似乎我们不能在触发器中添加过滤器来过滤至少1分钟前修改的记录。我们可以直接获取List of Files LastModified日期时间并循环,使用“If”条件判断是否下载。

更新:

截图中的表达式为:

sub(ticks(utcNow()), ticks(triggerBody()?['LastModified']))

更新解决方法

是否可以在最后修改时间小于 1 分钟时添加“延迟”操作?例如,如果上次修改时间小于 60 秒,则使用“延迟”等待 5 分钟,直到覆盖操作完成,然后进行下载。

【讨论】:

  • 是的,但是如果我在触发后添加一个IF条件,那么没有通过过滤器的文件根本不会被处理。对于触发器,所有文件都被考虑在内,但是 if 将丢弃那些没有修改时间戳至少 1 分钟的文件。触发器的设置中有一个“触发器条件”,但是我找不到任何关于它的文档。
  • 哦,您的意思是根本不使用“添加或修改文件时”触发器,而是使用这个触发器。好的,通过使用这个,您将如何避免一遍又一遍地重新下载相同的文件?我在设置中找到了“触发条件”,但找不到任何有关它的文档。你知道他们的事吗?
  • 嗨@emzero 很抱歉延迟回复。我对您提到的“触发条件”了解不多,但它似乎用于判断触发器是否被触发而不是过滤器(根据其描述“指定一个或多个表达式必须为真才能触发触发器). 我在上面更新了我的答案。在我的逻辑应用程序中,它只会传输从触发器修改或添加的文件的最后修改日期,所以我不太清楚你是否担心重新下载问题。跨度>
  • 如果我错了,请纠正我,但触发后的条件可能最终会排除文件。当逻辑应用程序运行时,它将触发所有新添加/修改的文件(基于上次执行时间戳对吗?),但下一步(条件)将过滤掉至少 1 分钟前的文件。但是,就触发器而言,这些文件已被“处理​​”。因此,下一次执行将不包括过滤的那些,因为它们不是根据触发器新建/修改的。你明白我在说什么吗?我的想法对吗?
  • @emzero 所以您希望上次修改时间少于 1 分钟的文件也将在下一个触发器中下载,对吗?我认为我们很难在逻辑应用程序中实现,我在答案的“更新解决方法”中提供了一种解决方法。不知道能不能满足你的要求,请看一下。
【解决方案2】:

我检查了示例@equals(triggers().code, 'InternalServerError'),实际上它使用了Logical comparison functions 中的条件函数,所以关键字是确保您要过滤的属性在triggertriggerBody 中,否则您将得到以下错误。

所以我把表达式改成like@greater(triggerBody().LastModified,'2020-04-20T11:23:00Z'),这样可以过滤修改小于2020-04-20T11:23:00Z的文件,不会触发流。

您还可以在Logical comparison functions 中使用其他功能,例如lessgreaterOrEquals 等。

【讨论】:

    猜你喜欢
    • 2022-10-06
    • 2020-09-19
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    • 2017-10-17
    • 2011-07-21
    • 1970-01-01
    • 2022-10-07
    相关资源
    最近更新 更多