Skip to main content

Notifications

Announcements

No record found.

Community site session details

Community site session details

Session Id :
Microsoft Dynamics CRM (Archived)

An unexpected error occurred

(0) ShareShare
ReportReport
Posted on by 29

Hi all ,

My requirement was, When a case is created and there were no activity(activity includes update any field of case or any activity created or closed for the case) done  on this case for 5 mint , then we should send email to case owner. 

I have used workflow to trigger email after 5 mint of case creation. To check any case filed is modified or not or any custom activity created or not , I have used plugin. But sometime i got "An unexpected error occurred""

error details: 

{ [-]
       ClassName: System.ServiceModel.FaultException`1[Microsoft.Xrm.Sdk.OrganizationServiceFault]
       Data: null
       ExceptionMethod: 8 RetrieveMultiple Microsoft.Crm.Extensibility, Version=7.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 Microsoft.Crm.Extensibility.OrganizationSdkServiceInternal Microsoft.Xrm.Sdk.EntityCollection RetrieveMultiple(Microsoft.Xrm.Sdk.Query.QueryBase, Microsoft.Crm.Extensibility.CorrelationToken, Microsoft.Crm.Sdk.CallerOriginToken, Microsoft.Crm.Performance.WebServiceType, Boolean)
       HResult: -2146233087
       HelpURL: null
       InnerException: null
       Message: An unexpected error occurred.
       RemoteStackIndex: 0
       RemoteStackTraceString: null
       Source: Microsoft.Crm.Extensibility
       StackTraceString: at Microsoft.Crm.Extensibility.OrganizationSdkServiceInternal.RetrieveMultiple(QueryBase query, CorrelationToken correlationToken, CallerOriginToken callerOriginToken, WebServiceType serviceType, Boolean checkAdminMode) at Microsoft.Crm.Extensibility.InprocessServiceProxy.RetrieveMultipleCore(QueryBase query) at CCAS.CRM.Plugins.CaseCheckActivity.GetActivityDetails(String linkEntity, String sActivityId, CCContext ccContext)
       WatsonBuckets: null
       action: null
       code: [ [+]
       ]

       detail: { [-]
         ErrorCode: -2147220970
         ErrorDetails: [ [+]
         ]

         InnerFault: { [-]
           ErrorCode: -2147220970
           ErrorDetails: [ [-]
           ]

           InnerFault: null
           Message: System.InvalidOperationException: Microsoft Dynamics CRM has experienced an error. Reference number for administrators or support: #F4BB49E4
           Timestamp: 2019-07-26T13:11:09.7003572Z
           TraceText: null
         }

         Message: An unexpected error occurred.
         Timestamp: 2019-07-26T13:11:09.7003572Z
         TraceText: null
       }

       messageFault: null
       reason: [ [+]
       ]

     }

what could be  issue ? 

workflow images :

pastedimage1564156432465v1.png

pastedimage1564156536457v2.png

pastedimage1564156573248v3.png

and plugin code : 

using System;
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Query;
using SL = CCAS.CRM.SplunkLogger;

namespace CCAS.CRM.Plugins
{
public class CaseCheckActivity : IPlugin
{

/// </summary>
public IOrganizationService OrgService
{
get;
private set;
}

/// <summary>
/// Tracing Service
/// </summary>
public ITracingService TracingService { get; private set; }

private const string _className = "CaseCheckActivity";

SL.SplunkLogger splunkLog = new SL.SplunkLogger();

public void Execute(IServiceProvider serviceProvider)
{
CCContext ccContext = null;
try
{
IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
ccContext = new CCContext(context, serviceProvider);
TracingService = (ITracingService)serviceProvider.GetService(typeof(ITracingService));
var service = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
OrgService = service.CreateOrganizationService(context.UserId);
ccContext.WriteContextToLog(_className, CCContext.LogPoint.Entering);
Entity CallingEntity = (Entity)context.InputParameters["Target"];

bool flag = GetAssociatedActivities(CallingEntity, ccContext);

if (flag == true)
{
CallingEntity["new_lastactivity"] = System.DateTime.Now;
}
}
catch (Exception ex)
{
if (ccContext != null)
{
ccContext.WriteException(ex.Message, ex);
}
}
finally
{
if (ccContext != null)
{
ccContext.WriteContextToLog(_className, CCContext.LogPoint.Exiting);
ccContext.SaveLog();
var data = new SL.LogData
{
LogName = "**************",
Severity = SL.LogLevel.Info,
Message = ccContext.LogBuilder.ToString()
};
ccContext.WriteSplunkLog(data);
ccContext = null;
}
}
}

/*
4201 Appointment
4202 Email
4204 Fax
4206 IncidentResolution
4210 PhoneCall
4212 Task
*/
private bool GetAssociatedActivities(Entity regarding, CCContext ccContext)
{
bool flag = false;
try
{
QueryExpression query = new QueryExpression { EntityName = "activitypointer", ColumnSet = new ColumnSet(new string[] { "activitytypecode", "createdby", "modifiedby", "isworkflowcreated" }) };
query.Criteria.AddCondition("regardingobjectid", ConditionOperator.Equal, regarding.Id);
EntityCollection collection = OrgService.RetrieveMultiple(query);

if (collection.Entities.Count > 0)
{
foreach (Entity activity in collection.Entities)
{
string _activityTypeCode = (string)activity.Attributes["activitytypecode"];
string _sactivityId = activity.Attributes["activityid"].ToString();
bool isWorkflowCreated = (bool)(activity.Attributes["isworkflowcreated"]);

if (!isWorkflowCreated)
{
string activityDetails = GetActivityDetails(_activityTypeCode, _sactivityId, ccContext);
string sActivitySource = activityDetails.Split(',')[0];
string activityModified = activityDetails.Split(',')[1];

if (activityModified == "True") // check system activity modified by users for origin VIMS and gateway
{
flag = false;
break;
}
else if (sActivitySource == "0") // when new activity is created
{
flag = false;
break;
}
else
{
flag = true;
}
}
}
}

}
catch(Exception ex)
{
if (ccContext != null)
{
ccContext.WriteException(ex.Message, ex);
}
}
return flag;
}

private string GetActivityDetails(string linkEntity, string sActivityId, CCContext ccContext)
{
string activitySource = "";
OptionSetValue ActivitySourceCode = new OptionSetValue();
bool activityModified = false;
QueryExpression query = new QueryExpression("activitypointer");
query.ColumnSet = new ColumnSet("activitytypecode", "createdby", "modifiedby");
LinkEntity lnkEntity = new LinkEntity("activitypointer", linkEntity, "activityid", "activityid", JoinOperator.Inner); // TASK Has to be dynamic value
lnkEntity.Columns = new ColumnSet("new_activitysource", "createdon", "modifiedon");
lnkEntity.EntityAlias = linkEntity; // TASK Has to be dynamic value
query.LinkEntities.Add(lnkEntity);
query.Criteria.Conditions.Add(new ConditionExpression("activityid", ConditionOperator.Equal, sActivityId));

try
{
var result = OrgService.RetrieveMultiple(query);
foreach (Entity entity in result.Entities)
{
switch (lnkEntity.EntityAlias)
{
case "task":
ActivitySourceCode = entity.Contains("task.new_activitysource") ? (OptionSetValue)(entity["task.new_activitysource"] as AliasedValue).Value : new OptionSetValue();

DateTime dtTaskCreatedOn = (DateTime)(entity["task.createdon"] as AliasedValue).Value;
dtTaskCreatedOn = dtTaskCreatedOn.AddSeconds(-dtTaskCreatedOn.Second);

DateTime dtTaskModifiedOn = (DateTime)(entity["task.modifiedon"] as AliasedValue).Value;
dtTaskModifiedOn = dtTaskModifiedOn.AddSeconds(-dtTaskModifiedOn.Second);

activityModified = dtTaskCreatedOn == dtTaskModifiedOn ? false : true;
break;
case "phonecall":
ActivitySourceCode = entity.Contains("phonecall.new_activitysource") ? (OptionSetValue)(entity["phonecall.new_activitysource"] as AliasedValue).Value : new OptionSetValue();

DateTime dtPhonecallCreatedOn = (DateTime)(entity["phonecall.createdon"] as AliasedValue).Value;
dtPhonecallCreatedOn = dtPhonecallCreatedOn.AddSeconds(-dtPhonecallCreatedOn.Second);

DateTime dtPhonecallModifiedOn = (DateTime)(entity["phonecall.modifiedon"] as AliasedValue).Value;
dtPhonecallModifiedOn = dtPhonecallModifiedOn.AddSeconds(-dtPhonecallModifiedOn.Second);

activityModified = dtPhonecallCreatedOn == dtPhonecallModifiedOn ? false : true;
break;
case "email":
ActivitySourceCode = entity.Contains("email.new_activitysource") ? (OptionSetValue)(entity["email.new_activitysource"] as AliasedValue).Value : new OptionSetValue();

DateTime dtEmailCreatedOn = (DateTime)(entity["email.createdon"] as AliasedValue).Value;
dtEmailCreatedOn = dtEmailCreatedOn.AddSeconds(-dtEmailCreatedOn.Second);

DateTime dtEmailModifiedOn = (DateTime)(entity["email.modifiedon"] as AliasedValue).Value;
dtEmailModifiedOn = dtEmailModifiedOn.AddSeconds(-dtEmailModifiedOn.Second);

activityModified = dtEmailCreatedOn == dtEmailModifiedOn ? false : true;
break;
case "fax":
ActivitySourceCode = entity.Contains("fax.new_activitysource") ? (OptionSetValue)(entity["fax.new_activitysource"] as AliasedValue).Value : new OptionSetValue();

DateTime dtFaxCreatedOn = (DateTime)(entity["fax.createdon"] as AliasedValue).Value;
dtFaxCreatedOn = dtFaxCreatedOn.AddSeconds(-dtFaxCreatedOn.Second);

DateTime dtFaxModifiedOn = (DateTime)(entity["fax.modifiedon"] as AliasedValue).Value;
dtFaxModifiedOn = dtFaxModifiedOn.AddSeconds(-dtFaxModifiedOn.Second);

activityModified = dtFaxCreatedOn == dtFaxModifiedOn ? false : true;
break;
case "letter":
ActivitySourceCode = entity.Contains("letter.new_activitysource") ? (OptionSetValue)(entity["letter.new_activitysource"] as AliasedValue).Value : new OptionSetValue();

DateTime dtLetterCreatedOn = (DateTime)(entity["letter.createdon"] as AliasedValue).Value;
dtLetterCreatedOn = dtLetterCreatedOn.AddSeconds(-dtLetterCreatedOn.Second);

DateTime dtLetterModifiedOn = (DateTime)(entity["letter.modifiedon"] as AliasedValue).Value;
dtLetterModifiedOn = dtLetterModifiedOn.AddSeconds(-dtLetterModifiedOn.Second);

activityModified = dtLetterCreatedOn == dtLetterModifiedOn ? false : true;
break;
case "appointment":
ActivitySourceCode = entity.Contains("appointment.new_activitysource") ? (OptionSetValue)(entity["appointment.new_activitysource"] as AliasedValue).Value : new OptionSetValue();

DateTime dtAppointmentCreatedOn = (DateTime)(entity["appointment.createdon"] as AliasedValue).Value;
dtAppointmentCreatedOn = dtAppointmentCreatedOn.AddSeconds(-dtAppointmentCreatedOn.Second);

DateTime dtAppointmentModifiedOn = (DateTime)(entity["appointment.modifiedon"] as AliasedValue).Value;
dtAppointmentModifiedOn = dtAppointmentModifiedOn.AddSeconds(-dtAppointmentModifiedOn.Second);

activityModified = dtAppointmentCreatedOn == dtAppointmentModifiedOn ? false : true;
break;
}
}
}
catch(Exception ex)
{
if (ccContext != null)
{
ccContext.WriteException(ex.Message, ex);

var data = new SL.LogData
{
ErrorObject = ex,
LogName = "****************",
Severity = SL.LogLevel.Error,
Message = ex.Message
};
ccContext.WriteSplunkLog(data);
}
}
return activitySource = ActivitySourceCode.Value.ToString() + "," + activityModified;
}
}

}

*This post is locked for comments

Under review

Thank you for your reply! To ensure a great experience for everyone, your content is awaiting approval by our Community Managers. Please check back later.

Helpful resources

Quick Links

🌸 Community Spring Festival 2025 Challenge Winners! 🌸

Congratulations to all our community participants!

Adis Hodzic – Community Spotlight

We are honored to recognize Adis Hodzic as our May 2025 Community…

Kudos to the April Top 10 Community Stars!

Thanks for all your good work in the Community!

Leaderboard > Microsoft Dynamics CRM (Archived)

#1
Mohamed Amine Mahmoudi Profile Picture

Mohamed Amine Mahmoudi 83 Super User 2025 Season 1

#2
Community Member Profile Picture

Community Member 52

#3
dkrishna Profile Picture

dkrishna 6

Overall leaderboard

Featured topics

Product updates

Dynamics 365 release plans