2017-04-03 137 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; 
相關問題