Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Email 可重复使用且健壮的处理模式”;发送电子邮件;通过过程的步骤 背景_Email_Dialog_Workflow_Dynamics Crm 2011_Dynamics Crm Online - Fatal编程技术网

Email 可重复使用且健壮的处理模式”;发送电子邮件;通过过程的步骤 背景

Email 可重复使用且健壮的处理模式”;发送电子邮件;通过过程的步骤 背景,email,dialog,workflow,dynamics-crm-2011,dynamics-crm-online,Email,Dialog,Workflow,Dynamics Crm 2011,Dynamics Crm Online,CRM 2011(和CRM Online)中的工作流和对话流程允许我们向启用电子邮件功能的记录(如联系人、帐户和用户)发送电子邮件。如果启用电子邮件的记录没有电子邮件地址,该过程将失败并出现异常(工作流仍处于等待状态,对话框引发异常): 未处理的异常: System.ServiceModel.FaultException`1[[Microsoft.Xrm.Sdk.OrganizationServiceFault, Microsoft.Xrm.Sdk,版本=5.0.0.0,区域性=中性, Publ

CRM 2011(和CRM Online)中的工作流和对话流程允许我们向启用电子邮件功能的记录(如联系人、帐户和用户)发送电子邮件。如果启用电子邮件的记录没有电子邮件地址,该过程将失败并出现异常(工作流仍处于等待状态,对话框引发异常):

未处理的异常: System.ServiceModel.FaultException`1[[Microsoft.Xrm.Sdk.OrganizationServiceFault, Microsoft.Xrm.Sdk,版本=5.0.0.0,区域性=中性, PublicKeyToken=31bf3856ad364e35]]:在参与方上找不到对象地址 或该方被标记为不可通过电子邮件发送

我的情景 在许多情况下,由于无法发送电子邮件而对整个过程进行错误处理是非常严厉的(同样,我也承认,在许多情况下,这种行为也是可取的)。例如,如果我正在创建和更新许多记录,作为大型工作流程的一部分,并且只希望在流程结束时发送一封简单、礼貌的确认电子邮件,我不希望整个流程因为最后一步无法完成而失败。我可以在我的工作流程中添加一个简单的条件语句,以便在发送电子邮件步骤之前检查地址是否存在。这是可行的,但我(或者更具体地说,我的用户)需要记住在创建的每个电子邮件步骤中都要这样做

理论解 理想情况下,我会有一个子工作流,接受电子邮件对象作为输入,然后在发送电子邮件之前运行一个小检查以确认有发件人和收件人。如果数据丢失,我可以静默地使子进程失败,或者调用不同的逻辑,例如向原始用户发送电子邮件,或者写入错误记录

然而,鉴于以下情况

  • CRM Online中仍不支持自定义工作流程序集
  • 工作流不接受传入参数
  • 即使对话框也不支持将“电子邮件对象”作为输入参数,或将一组值(例如收件人)作为输入参数
  • 子对话框在完成后不会将控制权返回给调用方
…我正在努力构思一种模式或解决方案,使我能够有效地避免用户必须记住在他们创建的每个工作流或对话框中放入硬编码检查(以检查是否存在收件人电子邮件地址)

理想情况下,我想要一个类似于通用子工作流的东西,它接收电子邮件对象(或序列化或它的其他表示形式),进行检查并发送电子邮件(如果可以的话)

交给你
我曾试图设计一个定制的解决方案,但很快就被忽略了(系统实体上的插件等)。否则,我无法找到一种方法来避免将责任推到用户身上。有没有其他人遇到过类似的需求,更好的是设计了一个解决方案

我可以想出一个非常直接的解决方案

  • 电子邮件上的新字段-“自动发送”,位,默认编号

  • 新工作流-创建电子邮件,如果“自动发送”==Yes&&Send包含数据&&Recipient包含数据->在上下文中发送电子邮件

  • 在所有其他工作流中,不要使用“发送电子邮件”操作,而是使用“创建记录”操作创建电子邮件记录,按正常方式填充电子邮件,但也要填充“自动发送”字段


  • 这样,用户几乎可以像平常一样创建电子邮件,但您可以使用一个工作流来执行验证逻辑并实际发送它。

    听起来很好,也很简单。我喜欢它(而且看不到插件)。我会在打分之前试一试作为答案。谢谢你,詹姆斯。难以置信的是,我只是有机会复习一下!从概念上讲,我遵循这一原则,假设我忽略了WF编辑器中名为“在上下文中发送电子邮件”的步骤。现在我意识到我误读了它。我找不到一种方法来实际发送工作流所附加到的相同电子邮件。我可以创建新电子邮件或使用模板,但不能明确“发送”当前电子邮件。我现在看到两个选项:1)将电子邮件的状态更改为“正在发送”,或2)在删除旧记录之前,将电子邮件重建为新记录并发送。后一种选择感觉不太好。O我没有意识到,我可能会制作一个自定义工作流来发送电子邮件,或者尝试更改电子邮件状态,看看是否会触发发送。刚刚完成测试,遗憾的是更改状态似乎不起作用,这是一个遗憾。自定义WF活动在联机模式下不起作用(假设您忘记了这是一项要求;),因此似乎唯一的选择是重新创建消息+1感谢您的努力,并将其标记为提升我的接受度和您的代表性的答案;)我做了,但定制工作流活动很快将在CRM online中提供。(向下滚动至底部)。