在 PowerApps 中构建电子邮件家庭电子邮件功能

Building an email householding email function in PowerApps

希望获得有关如何在 PowerApps/Automate 中使用家庭电子邮件功能的指导。 (家庭是一个特定的邮寄行业术语)

我有一个 PowerApps 工具,可以在现场收集扫描码(从字面上看,我们正在使用 QR 码扫描仪并疯狂地扫描盒子)。例如“RITM1234567”为扫码

每个扫描码都与一个客户相关联。例如,“RITM1234567”属于“爱德华”。当然,“Edward”映射到 Edward 的电子邮件地址(例如“Edward@EdwardDesk.com”)

每个扫描码还与描述相关联,例如“香蕉”。

在我的扫描码列表中,有很多扫描(一次可以扫描 1-200 个或更多扫描码)。去爱德华的人从 0 到全部。但我只想给爱德华发一封电子邮件(家庭),像这样:

Hey Edward, the following items are ready for you to eat:

RITM1234567 - banana
RITM7654321 - banana
RITM7162534 - grape

Bring a fork and come on over!

因此,我提到的那些关联是 Sharepoint 列表的一部分,例如:

[RITM VALUE] [CUSTOMER NAME] [CUSTOMER EMAIL]       [ITEM DESCRIPTION]
RITM1234567  Edward          Edward@EdwardDesk.com  banana
RITM7654321  Edward          Edward@EdwardDesk.com  banana
RITM7162534  Edward          Edward@EdwardDesk.com  banana

如果有其他人的扫描件,那么我想在同一个 SharePoint 列表中查找他们并向他们发送电子邮件。

因此,如果扫描集合有 10 个项目:Edward 5 个,Pat 3 个,Kit 2 个

那么它应该发送三封电子邮件,而不是十封。

考虑到 PowerApps 似乎有一些奇怪的限制(没有数组或其他访问数据的主要方式),您如何着手解决这个问题? (见脚注)

我承认它有点高级,所以即使是高级建议也可能有用。我通常可以遵循伪代码。

谢谢你,

爱德华

  1. 思考:是否可以构造一个Collection/DataTable通过查看扫描值列表并说“如果这个值出现在参考列表的x列中,然后添加一个新的由该参考列表中同一记录中的这些其他事物组成的集合的项目”…?

-=-=-=-=-

脚注:我之前在 Excel-VBA 应用程序中解决了这个问题,方法是创建一个包含所有单独条目的新工作表,按客户名称排序,然后删除- 从底部开始复制。然后我在一个大循环中做了很多连接来创建每封电子邮件的 subject/body 信息。但我不确定我将如何在这里做到这一点。 Excel VBA 应用程序已经使用了几年,但我的任务是用更广泛的应用程序(因此是 Powerapps Canvas 应用程序)替换它。 Data Tables 是一种适合于此的结构吗?

如果您想要从 powerapps 执行此操作,第一步是创建一个集合,其中包含按人分组的所有扫描代码,然后您使用 ForAll 遍历该集合,每个组就像集合中的集合。

这个想法是为每个拥有一组代码的人发送一封电子邮件,然后可以像收集一样迭代每个记录。

ForAll(
    my_colecction.persons,
    ForAll(
        ThisRecord.persons,
        Office365Outlook.SendEmail(
            person.email,
            "Subject",
            "body"
        )
    )
);

可以直接用流的形式做。

鉴于此合集:

  • 适应您的用例
ClearCollect(colPersons,
    {id: 1, email: "test@test.com"},
    {id: 2, email: "test@test.com"},
    {id: 3, email: "test@test.com"},
    {id: 4, email: "test@test.com"},
    {id: 5, email: "test@test.com"},
    {id: 6, email: "test1@test.com"},
    {id: 7, email: "test1@test.com"},
    {id: 8, email: "test1@test.com"},
    {id: 9, email: "test2@test.com"},
    {id: 10, email: "test2@test.com"}
)

这将仅向不同的电子邮件地址发送电子邮件:

  • 大致翻译为:
    • 按不同的方式对集合进行分组 email
    • 对于组 (3) 中的每封电子邮件,向他们发送一封电子邮件,主题为“主题”,正文为“正文”。
ForAll(
    GroupBy(
        colPersons, 
        "email", 
        "other"
    ),
    Office365Outlook.SendEmailV2(
        ThisRecord.email, 
        "Subject", 
        "Body"
    )
)

好的,我完成了数据准备部分(我在其中构建了提供电子邮件例程的主要集合),答案位于此处:

-=-=-=-=-

我完成的电子邮件部分,这是我的示例(部分内容已编辑):

// Current test email
Set(TestEmailAddress,"edward@fish.com");

// Appropriate subject for FIRST CONTACT email
Set(TestEmailSubject,"IMPORTANT - Your Equipment is Ready to Deliver");

ClearCollect(Mailings,{CustomerName: "Edward Martin III",CustomerEmail: "edward@fish.com",ManagerName: "Edward's Boss",ManagerEmail: "bossman@fish.com",ItemListHTML: "<li><strong>REQ1791779 - RITM2037855 - Microsoft Surface Dock 2</strong></li><li><strong>REQ1791779 - RITM2037856 - Mouse - Wireless</strong></li><li><strong>REQ1791779 - RITM2037854 - Microsoft Surface laptop 4 15in</strong></li>"}, {CustomerName: "Joe Customer",CustomerEmail: "joe@fish.com",ManagerName: "Bosso Joe",ManagerEmail: "bosso@fish.com",ItemListHTML: "<li><strong>REQ1791780 - RITM2037855 - Microsoft Electric Banana</strong></li><li><strong>REQ1791780 - RITM2037856 - Banana - Wireless</strong></li><li><strong>REQ1791780 - RITM2037854 - Microsoft Electric Banana Holder</strong></li>"});
//ForAll(Mailings,
//Office365Outlook.SendEmailV2(CustomerEmail,TestEmailSubject,
//  "<p>Dear " & CustomerName & ",</p>"
//  & "<p><em>Great news!</em> Your equipment has arrived and is ready for deployment from "
//  & DD_Location.SelectedText.Value & " (hours of operation: " & LocationHours & ").</p>"
//  & "<p>Items in your order include the following:</p>"
//  & "<ul>" & ItemListHTML & "</ul>"
//  & "<p>Thank you so much for your time. Let's complete this order.</p>"
//  & "<p>Sincerely,</p>"
//  & "<p>" & User().FullName &"</p>",
//  {Importance:"High",ishtml:"true",From: User().Email,ReplyTo: User().Email});
//);

我认为这已经完成了。

前进!