【问题标题】:Building an email householding email function in PowerApps在 PowerApps 中构建电子邮件家庭电子邮件功能
【发布时间】:2021-07-27 23:44:58
【问题描述】:

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

我有一个 PowerApps 工具,可以在现场收集扫描码(实际上,我们正在使用 QR 码扫描仪和疯狂的扫描框)。比如“RITM1234567”就是一个扫描码。

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

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

在我的扫描码列表中,有许多扫描(一次扫描可以有 1-200 个或更多扫描码)。那些要去爱德华的人是从 0 到所有的人。但我只想给 Edward 发送一个单一的电子邮件(家庭),如下所示:

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

RITM1234567 - banana
RITM7654321 - banana
RITM7162534 - grape

Bring a fork and come on over!

所以,我提到的那些关联是共享点列表的一部分,类似于:

[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. 思考:是否有可能通过查看扫描值列表并说“如果此值出现在参考列表的 x 列中,然后将新项目添加到由这些其他组成的集合中参考列表中同一记录中的内容”...?

-=-=-=-=-

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

【问题讨论】:

    标签: list sharepoint powerapps power-automate


    【解决方案1】:

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

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

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

    可以直接通过流形成共享点。

    【讨论】:

    • 我很确定上面的代码会发送 10 封电子邮件。上面的内容大致翻译为:对于集合中的所有 10 个人,给每个人发送一封电子邮件。
    • 给定一组扫描,并引用到一个列表中,如何构建家庭功能?住房是一个特定的行业术语。在您的示例中,“正文”将根据初始集合而有所不同。
    【解决方案2】:

    鉴于此集合

    • 适应您的用例
    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),向他们发送一封电子邮件,主题为“Subject”,正文为“Body”。
    ForAll(
        GroupBy(
            colPersons, 
            "email", 
            "other"
        ),
        Office365Outlook.SendEmailV2(
            ThisRecord.email, 
            "Subject", 
            "Body"
        )
    )
    

    【讨论】:

    • “电子邮件”最初不是收藏的一部分。集合的第一部分只是扫描代码。 “电子邮件”是(例如)Sharepoint 列表中的第 6 列。第 3 列是 RITM 列表。对于扫描集合中的每个 RITM,我需要在列表第 3 列中查找它,然后以某种方式“保存”第 6 列中的电子邮件值(以及同一行中的一些其他值)。然后,在我为扫描窗口中的所有项目完成此操作后,我就可以开始构建电子邮件了……?
    【解决方案3】:

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

    PowerApps - One Collection feeds another, with List lookups

    -=-=-=-=-

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

    // 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});
    //);
    

    我称这已经完成了。

    前进!

    【讨论】:

      猜你喜欢
      • 2020-03-26
      • 1970-01-01
      • 1970-01-01
      • 2012-12-12
      • 2016-05-12
      • 2014-05-23
      • 2017-01-18
      • 2017-10-25
      • 2013-07-25
      相关资源
      最近更新 更多