【问题标题】:Logic app skips send email action inside for each逻辑应用程序跳过内部的每个发送电子邮件操作
【发布时间】:2020-04-26 16:43:14
【问题描述】:

我的逻辑应用有一个 HTTP 触发器。每当我手动运行逻辑应用程序或只是将 URL 复制并粘贴到浏览器上时,它都会按预期工作。但是,当我使用 QueueTriggered azure 函数调用逻辑应用 URL 时,逻辑应用只会跳过发送电子邮件操作。

Loggic app design (shows skipped actions)

Action inside ForEach

这是我的函数应用的代码:

public static async Task Run([QueueTrigger("messages", Connection = "ConnectionString")]string myQueueItem, ILogger log)
        {
            var httpClient = HttpClientFactory.Create();
            var url = "logicAppUri";

            await httpClient.GetAsync(url);

        }

消息的内容只是一个简单的字符串,例如“test”。

我还尝试将函数应用触发器更改为“当队列中有消息时”,但这也不起作用。

"When there are messages in the queue" trigger

Output

在这两种情况下,我都从 Azure 收到了相同的错误消息。

{"code":"ActionConditionFailed","message":"The execution of template action 'Send_email_(V2)' is skipped: there are no items to repeat."}

这没有意义,因为队列中有消息。

知道为什么会这样吗?

【问题讨论】:

  • 我想我需要在您的流程中提供更多详细信息才能了解数据如何通过
  • 不要使用async void 使用async Task。考虑添加一些日志记录,可能会引发错误
  • 我怀疑这是如何处理您在 for each 循环之前从队列中检索的消息的。你能在那里提供更多细节吗?似乎没有阅读任何消息?
  • 嗨,Ygor,请参考我在下面提供的解决方案。如果对您的问题有帮助,请accept作为答案(点击我的答案旁边的复选标记将其从灰色切换为已填充),在此先感谢~
  • 感谢您的 cmets。我已添加有关该问题的更多信息。

标签: c# azure-functions azure-logic-apps


【解决方案1】:

根据一些测试,这个问题是由于使用队列触发功能引起的。当队列中有新消息并读取消息时,将触发队列触发功能。所以当httpClient在funciton中调用逻辑应用uri时,队列中没有消息。 “获取消息”操作将获得一个 0 大小的列表,因此“For each”将执行 0 次。

根据您的要求,您可以在逻辑应用中使用“When there are messages in a queue”。请参考下面我的逻辑应用:

由于触发器会被每条消息触发,所以我们不需要使用“For each”来循环消息。

希望对你有帮助~

【讨论】:

  • 非常感谢您抽出宝贵的时间,但这也没有用。我仍然遇到同样的问题,它只是跳过了 for each 中的操作。
  • 嗨@YgorD。我认为如果我们在逻辑应用程序中使用“当队列中有消息时”触发器,我们不需要使用“对于每个”(正如我在答案底部提到的)。只需使用触发器(当队列中有消息时)和操作(发送电子邮件)作为我提供的屏幕截图,就足够了(除非您可能需要添加操作来删除消息)。触发器会被每条消息触发,所以我们不需要在逻辑应用中使用“For each”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-10-07
  • 1970-01-01
  • 2019-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多