2017-04-03 160 views
1

我为一家慈善机构工作,我们希望使用我们的Dynamics 365来支持我们的筹款团队。我们创建了一个与联系实体具有N:N关系的“筹款活动”实体(在我们的组织中重新命名为“个人”)。我在每个实体上都有一个子网格,以便我们可以从联系人记录或来自活动记录 我们需要能够发送电子邮件给注册参加活动的每个人,祝他们在活动开始前有好运。我创建了一个针对“筹款活动”实体的工作流程,以便在活动开始前7天运行但是当我测试这个系统作业显示“错误;需要注意”,并且当我查看过程时,它显示一条消息“电子邮件必须至少有一个收件人才能发送。” Process error image 在WF发送电子邮件属性,我尝试使用'联系人'和'命名联系人(查找)'从我有可用的列表(请参阅下面的屏幕截图)在TO领域,但我得到相同的结果与两个选择离子。 To line option list image 我的测试事件有2个个人(联系人)链接到它,我可以在事件记录的子网格中看到它们,但我似乎无法发送电子邮件给他们。 下面是详细信息从失败的过程:CRM - 发送电子邮件给子网格中的联系人

Plugin Trace: 
[Microsoft.Xrm.Sdk.Workflow: Microsoft.Xrm.Sdk.Workflow.Activities.SendEmail] 
[SendEmailStep1] 
Error Message: 
Unhandled Exception: 
System.ServiceModel.FaultException`1[[Microsoft.Xrm.Sdk.OrganizationServiceFault, Microsoft.Xrm.Sdk, Version=8.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]]: The e-mail must have at least one recipient before it can be sentDetail: 

<OrganizationServiceFault xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/xrm/2011/Contracts"> 

<ActivityId>9161cfb2-308e-4b19-af39-b859a78f132f</ActivityId> 

<ErrorCode>-2147218684</ErrorCode> 

<ErrorDetails xmlns:d2p1="http://schemas.datacontract.org/2004/07/System.Collections.Generic" /> 

<Message>The e-mail must have at least one recipient before it can be sent</Message> 

<Timestamp>2017-03-31T11:07:27.6562583Z</Timestamp> 

<ExceptionSource i:nil="true" /> 

<InnerFault> 

<ActivityId>9161cfb2-308e-4b19-af39-b859a78f132f</ActivityId> 

<ErrorCode>-2147218684</ErrorCode> 

<ErrorDetails xmlns:d3p1="http://schemas.datacontract.org/2004/07/System.Collections.Generic" /> 

<Message>The e-mail must have at least one recipient before it can be sent</Message> 

<Timestamp>2017-03-31T11:07:27.6562583Z</Timestamp> 

<ExceptionSource i:nil="true" /> 

<InnerFault i:nil="true" /> 

<OriginalException i:nil="true" /> 

<TraceText i:nil="true" /> 

</InnerFault> 

<OriginalException i:nil="true" /> 

<TraceText>[Microsoft.Xrm.Sdk.Workflow: Microsoft.Xrm.Sdk.Workflow.Activities.SendEmail] 

[SendEmailStep1] 

</TraceText> 

</OrganizationServiceFault> 

at Microsoft.Crm.Workflow.Services.SendEmailActivityService.Execute(ActivityContext executionContext, SendEmail sendEmail) 

at System.Activities.CodeActivity.InternalExecute(ActivityInstance instance, ActivityExecutor executor, BookmarkManager bookmarkManager) 

at System.Activities.Runtime.ActivityExecutor.ExecuteActivityWorkItem.ExecuteBody(ActivityExecutor executor, BookmarkManager bookmarkManager, Location resultLocation) 

是否有可能做什么我使用开箱即用的功能,试图?如果是这样,我错过了什么? 谢谢, 保罗

+0

看起来你正试图重新创建标准的运动功能,检查出来(如果你还没有排除它由于某种原因),它的意思为“垃圾邮件”你的客户,所以应该是相当接近你需要什么 – Alex

+0

感谢Alex,我尝试过使用Campaigns,但它并不真的满足我们对此的要求,但它肯定会有助于我列表中的另一个项目。 – Paolo750f

回答

1

你在这里试图达到什么是不可能的只是通过配置。你有这个错误是因为你没有引用你在你的子网格中的联系人,你指的是一个名为“Contact”的属性,它可能是空的,并且导致错误。唯一的方法是创建一个自定义工作流程活动,它将获得所有必要的联系人并将其放入您的电子邮件中。如果你不想代码,你可以使用艾登Kaskela的工作流程元素,实现自己的目标:

https://kaskelasolutions.com/how-to-add-dynamic-recipients-to-an-email/

+0

嗨帕维尔,我已经看过艾登的工作流程元素,虽然它允许我获得联系人的电子邮件,并发送其他元素没有通过,所以它看起来像我将不得不看看创建一个自定义的工作流程活动。我不是开发人员(因此试图使用开箱即用功能),所以我需要在我的组织中找人帮助解决这个问题。再次感谢您的建议。 – Paolo750f

0

我们做了这样的事情。

在电子邮件创建消息预操作中注册一个插件&这里有这个逻辑。

这将在电子邮件To列表中添加来自N:N联系相交实体的收件人。

ConditionExpression frCondition1 = new ConditionExpression(); 
    ConditionExpression frCondition2 = new ConditionExpression(); 
    EntityCollection frResponse = new EntityCollection(); 
    EntityCollection toOwner = new EntityCollection(); 

    toOwner = targetEntity.GetAttributeValue<EntityCollection>("to"); 

    frCondition1 = CreateConditionExpression("parentIdcolummn", ConditionOperator.Equal, new string[] { parent.Id.ToString() }); 
    frCondition2 = CreateConditionExpression(statuscode, ConditionOperator.Equal, new object[] { 1 }); 

    ConditionExpression[] conditions = new ConditionExpression[] { frCondition1, frCondition2 }; 

    FilterExpression filterExpression = new FilterExpression(); 

filterExpression.Conditions.AddRange(conditions); 
filterExpression.FilterOperator = LogicalOperator.And; 

QueryExpression queryExpression = new QueryExpression(); 
queryExpression.ColumnSet = GenerateColumnSet("columnNames"); 
queryExpression.EntityName = "entityName"; 
queryExpression.Criteria = filterExpression; 
queryExpression.NoLock = true; 

    frResponse = (EntityCollection)service.RetrieveMultiple(queryExpression); 

    if(frResponse != null && frResponse.Entities.Count > 0) 
    { 
     //Adding all FRs in the email 
     foreach (Entity FilingRep in frResponse.Entities) 
     { 
      Guid frGuid = ((EntityReference)FilingRep["contactLookupfieldname"]).Id; 

      Entity toParty = new Entity("activityparty"); 

      toParty[ActivityParty.ActivityPartId] = new EntityReference("contact", frGuid); 

      ToOwner.Entities.Add(toParty); 
     } 
    } 

    targetEntity[EmailEntityAttributeName.To] = toOwner; 
相关问题