我有一个连接到SFTP服务器的逻辑应用程序,它由“添加或修改文件”触发器触发。它设置为每10分钟运行一次,查找新文件/修改过的文件并将其复制到Azure存储帐户。
问题是此SFTP服务器路径设置为每X分钟覆盖一组文件(对此我无能为力),因此,Logic App通常与这些文件的更新过程重叠,并下载仍在写。结果是文件损坏。
是否有一种方法可以向When files are added or modified (properties only)
添加过滤器,使其仅考虑修改日期至少为1分钟的文件?
这样,当前正在写入的文件将不会添加到要下载的文件列表中。然后,Logic App的下一次运行将获取此被忽略的文件,依此类推。
更新
答案 0 :(得分:0)
根据测试触发器“添加或修改文件”,看来我们无法在触发器中添加过滤器以过滤至少1分钟前修改的记录。我们只需获取List of Files LastModified
日期时间并循环它们,使用“ If”条件来判断是否应下载它。
更新:
屏幕截图中的表达式为:
sub(ticks(utcNow()), ticks(triggerBody()?['LastModified']))
更新解决方法
上次修改时间少于1分钟时,是否可以添加“延迟”操作?例如,如果上次修改时间少于60秒,请使用“延迟”等待5分钟,直到覆盖操作完成,然后进行下载。
答案 1 :(得分:0)
我检查了示例ArrayIndexOutOfBoundsException
,实际上它使用了Logical comparison functions中的条件函数,因此关键字是确保要过滤的属性位于@equals(triggers().code, 'InternalServerError')
或{{ 1}},否则您将收到以下错误。
因此,我将表达式更改为类似trigger
,这样可以过滤修改程度小于triggerBody
的文件,而不会触发流程。
您还可以在Logical comparison functions中使用其他功能,例如@greater(triggerBody().LastModified,'2020-04-20T11:23:00Z')
,2020-04-20T11:23:00Z
等。