如何在Logic Apps中将SQL存储过程结果以表格嵌入SendGrid邮件
我之前做每日报表邮件需求时也碰到过一模一样的问题,通过Logic Apps的几个内置动作就能轻松解决,咱们一步步来配置:
1. 解析SQL返回的JSON数据
首先添加一个Parse JSON动作,把存储过程返回的JSON结果作为这个动作的输入内容。点击「Use sample payload to generate schema」,把你提供的JSON粘贴进去:
{"Table1":[{"CaseID":"1000001","DateOfUdate":"2020-06-09T11:34:57.483"},{"CaseID":"1000002","DateOfUdate":"2020-06-09T11:34:57.483"},{"CaseID":"1000003","DateOfUdate":"2020-06-09T11:34:57.483"},{"CaseID":"1000004","DateOfUdate":"2020-06-09T11:34:57.483"}]}
系统会自动生成对应的Schema,这样后续就能方便地提取数组里的每一条数据。
2. 初始化Markdown表格变量
添加一个Initialize variable动作,类型选择「String」,变量名可以叫MarkdownTable,初始值设置为表格的表头和分隔线(这是Markdown表格的必要格式,没有的话邮件里识别不了表格):
Case ID | DateofUpdate --- | ---
3. 遍历数组拼接表格行
添加一个Apply to each动作,选择Parse JSON输出里的Table1数组作为遍历对象。在循环内部,添加Append to string variable动作,选中刚才初始化的MarkdownTable变量,然后在「Value」里拼接每一行的内容:
@{items('Apply_to_each')?['CaseID']} | @{items('Apply_to_each')?['DateOfUdate']}\n
注意末尾要加换行符\n,这样每一条数据才会单独占一行。
4. 在SendGrid邮件中插入表格
配置SendGrid的发送邮件动作时,把邮件内容类型设为「HTML」(或者直接用Markdown格式,SendGrid会自动转换),然后在正文里引用刚才的变量:
您好,以下是今日更新的案例列表: @{variables('MarkdownTable')}
额外优化:处理空数据场景
如果某天存储过程没有返回任何数据,表格会只有表头,显得不太友好。可以在循环前添加一个Condition动作,判断length(body('Parse_JSON')?['Table1'])是否等于0。如果为真,就把MarkdownTable变量的值更新为「今日暂无更新案例」。
配置完成后测试运行Logic Apps,就能收到带规范表格的邮件啦!
内容的提问来源于stack exchange,提问作者seaside_escape

