1

저는 자선 활동을하고 Dynamics 365를 사용하여 기금 모금 팀을 지원하고 싶습니다. 우리는 Contact 엔티티와 N : N 관계를 가진 'Fundraising Event'엔티티를 만들었습니다. (우리 조직의 'Individual'로 이름이 변경되었습니다.) 연락처 레코드에서 이벤트에 연락처를 추가 할 수 있도록 각 엔티티에 서브 그리드가 있습니다. 또는 이벤트 레코드에서 수신 이벤트가 시작되기 전에 이벤트에 등록 된 모든 사람들에게 전자 메일을 보낼 수 있어야합니다. 이벤트 시작 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

는 표준 캠페인 기능을 다시 시도처럼 (이미 몇 가지 이유를 배제하지 않은 경우)이 아주 가까이 있어야하므로, 그것은 "스팸"고객에 대한 의미의 IT를 확인해 본다 당신이 필요로하는 것 – Alex

+0

감사합니다 알렉스, 나는 캠페인을 사용하여 시험해 보았습니다. 그러나 실제로 이것에 대한 우리의 요구 사항을 충족시키지는 못하지만 그것은 확실히 내 목록에있는 다른 프로젝트에 도움이 될 것입니다. – Paolo750f

답변

1

여기에서 달성하려는 것은 구성에 의해서만 가능합니다. 이 오류는 서브 그리드에있는 연락처를 언급하지 않아서 "연락처"라는 속성을 참조하고 있습니다.이 속성은 아마도 비어있어 오류의 원인이됩니다. 유일한 방법은 모든 필요한 연락처를 가져 와서 전자 메일에 넣는 사용자 지정 워크 플로 활동을 만드는 것입니다. 당신이 코드를하지 않으려면, 당신은 당신의 목표를 달성하기 위해 에이든 Kaskela의 워크 플로우 요소를 사용할 수 있습니다

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

+0

안녕하세요 Pawel, 저는 Aiden의 워크 플로우 요소를 살펴 보았습니다. 이메일에 대한 연락처를 가져오고 다른 요소를 보내면 사용자가 직접 워크 플로를 만들어야 할 것처럼 보입니다. 활동. 나는 dev에 (따라서 상자 기능을 사용하려고) 아니에요 그래서 내가 도와주기 위해 내 조직에서 누군가를 찾아야합니다. 제안에 다시 한 번 감사드립니다. – Paolo750f

0

우리는 이런 일을했다.

이메일 사전 작업에 플러그인 등록 메시지 &에이 논리가 있습니다.

전자 메일 주소 To에 N : N contact intersect 엔터티의받는 사람을 추가합니다.

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;