• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 2662
  • Last Modified:

C# Dynamic CRM error

I created a plug-in Dynamic CRM 2011 that gets some values from a stored proc then inserts those values in an attribute/field on a CRM Entity. When I run the workflow that calls or runs the plug-in I get the error below. I have serarched the web and have come up short. Please help. Thanks.
Error:

EXCEPTION=EXCEPTION=System.FormatException: Unrecognized Guid format.
   at System.Guid.GuidResult.SetFailure(ParseFailureKind failure, String failureMessageID, Object failureMessageFormatArgument, String failureArgumentName, Exception innerException)
   at System.Guid.TryParseGuid(String g, GuidStyles flags, GuidResult& result)
   at System.Guid..ctor(String g)
   at AddAEToCommits.AddAEToCommits.Execute(CodeActivityContext executionContext)

Please let me know if you need the code as well.
0
newjeep19
Asked:
newjeep19
  • 5
  • 2
1 Solution
 
Rikin ShahMicrosoft Dynamics CRM ConsultantCommented:
Hi,

I created a plug-in Dynamic CRM 2011 that gets some values from a stored proc then inserts those values in an attribute/field on a CRM Entity.

You probably are assigning an ID (Guid type) attribute a wrong data type value or without converting it to System.Guid. Convert the value to Guid and you are good to go.
0
 
newjeep19Author Commented:
Thank you for the reply. However I am now getting this error
EXCEPTION=EXCEPTION=System.NullReferenceException: Object reference not set to an instance of an object.
   at AddAEToCommits.AddAEToCommits.Execute(CodeActivityContext executionContext)

Code :
Guid opportunityId = Guid.Empty;

//Then update the Opportunity < -- syntax that is causing the above error
 _opportunity.Id = opportunityId;
0
 
Rikin ShahMicrosoft Dynamics CRM ConsultantCommented:
Why assigning an empty Guid? Any reason behind it? Also check your org context for null.
0
Microsoft Certification Exam 74-409

VeeamĀ® is happy to provide the Microsoft community with a study guide prepared by MVP and MCT, Orin Thomas. This guide will take you through each of the exam objectives, helping you to prepare for and pass the examination.

 
newjeep19Author Commented:
When I run my workflow/ practice in CRM I get the error below:
Workflow paused due to error: Unhandled Exception: System.Activities.InvalidWorkflowException: The following errors were encountered while processing the workflow tree:
'DynamicActivity': The private implementation of activity '1: DynamicActivity' has the following validation error:   Compiler error(s) encountered processing expression "DirectCast(CustomActivityStep4_5_converted, Microsoft.Xrm.Sdk.EntityReference)".Invalid L-value expression.:Reference expressions cannot end with Conversion. The provided expression's type must exactly match the type T of VisualBasicReference<T> or LambdaReference<T>.
   at System.Activities.Hosting.WorkflowInstance.ValidateWorkflow(WorkflowInstanceExtensionManager extensionManager)
   at System.Activities.WorkflowApplication.EnsureInitialized()
   at System.Activities.WorkflowApplication.Enqueue(InstanceOperation operation, Boolean push)
   at System.Activities.WorkflowApplication.WaitForTurn(InstanceOperation operation, TimeSpan timeout)
   at System.Activities.WorkflowApplication.InternalRun(TimeSpan timeout, Boolean isUserRun)
   at Microsoft.Crm.Workflow.ActivityHost.StartWorkflowExecution(Activity workflow, ICommonWorkflowContext context)
   at Microsoft.Crm.Workflow.ActivityHostBase.StartWorkflow(ICommonWorkflowContext context, Activity preLoadedActivity)

Here is my full C# code for the plug-in
using System;
using System.Activities;
using System.Collections.ObjectModel;
using System.Collections.Generic;

using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Messages;
using Microsoft.Xrm.Sdk.Query;
using Microsoft.Xrm.Sdk.Workflow;

using Microsoft.Crm.Sdk.Messages;

using System.Data;
using System.Data.Sql;
using System.Data.SqlClient;
using System.Collections;
using System.Reflection;
using System.Text;

using System.Linq;

using System.IO;
using System.Net;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Web;
using System.Web.Services.Protocols;
using System.Xml;

using GTRI;
using GTRI.DataAccess;

using System.Configuration;
using System.Web.Services;
using System.Net.Mail;

namespace AddAEToCommits
{
    public sealed class AddAEToCommits : CodeActivity
    {
        #region Connections
        private static string connectionString = connection info here
        #endregion

        #region Globals
        Entity opportunity = null;
        Entity _opportunity = null;
        string AECustomerReader = string.Empty;
        Guid accountExecutiveId;
        DateTime date;
        Guid CustomEntityName;
        Guid AECommitId;
        #endregion

        #region SQL
        string sqlQuery = String.Empty;
        private Guid monthlyCommitId;
        string monthlyCommitName = String.Empty;
        private Guid AECustomerGuid;
        #endregion

        public void Write(string arg1)
        {
            _Write(arg1, String.Empty);
        }

        public void Write(Exception ex)
        {
            _Write(ex.ToString(), "");
        }

        public void Write(Exception ex, string arg1)
        {
            _Write(ex.ToString(), arg1);
        }

        private void _Write(string s, string ss)
        {
            try
            {
                string fileDate = DateTime.Now.ToShortDateString().Replace(":", "").Replace("/", "") + DateTime.Now.ToShortTimeString().Replace(":", "").Replace(" ", "");
                using (System.IO.TextWriter T = new System.IO.StreamWriter(@"C:\Logs\AEWorkflow\ErrorLog_" + fileDate + ".txt", true))
                {
                    T.WriteLine("Adds To Commit Workflow Exception");
                    T.WriteLine("");
                    T.WriteLine("EXCEPTION=" + s.ToString());
                    T.WriteLine("");
                    T.WriteLine("EXCEPTION=" + ss.ToString()); ;
                    T.WriteLine(""); 
                    T.WriteLine("Created By: " + accountExecutiveId);
                    T.WriteLine("Estimated Closedate: " + date);
                    T.WriteLine("Input field: " + AECustomerReader);
                    T.WriteLine("Opportunity: " + CustomEntityName);
                }
            }
            catch (Exception e)
            {
                e.InnerException.Message.ToString();
            }
        }

        // Initialize the input parameter
        [Input("Account Executive")]
        [ReferenceTarget("systemuser")]
        public InArgument<EntityReference> accountExecutiveReference { get; set; }

        [Input("Date to Close")]
        public InArgument<DateTime> dateToCloseReference { get; set; }

        [Input("Opportunity")]
        [ReferenceTarget("opportunity")]
        public InOutArgument<EntityReference> opportunityReference { get; set; }

        [Output("Monthly Commit Id")]
        [ReferenceTarget("opportunity")]
        public OutArgument<EntityReference> commitOutReference { get; set; }

        protected override void Execute(CodeActivityContext executionContext)
        {
            try
            {

                //Create the IWorkflowContext and the
                //IOrganizationService for communication with CRM
                IWorkflowContext workflowContext = executionContext.GetExtension<IWorkflowContext>();
                IOrganizationServiceFactory serviceFactory = executionContext.GetExtension<IOrganizationServiceFactory>();
                IOrganizationService service = serviceFactory.CreateOrganizationService(workflowContext.UserId);

                EntityReference systemuser = accountExecutiveReference.Get<EntityReference>(executionContext);

                // Access the input parameter declared above 
                Guid accountExecutiveId = new Guid();
                accountExecutiveId = accountExecutiveReference.Get(executionContext).Id;

                DateTime date = new DateTime();
                date = dateToCloseReference.Get(executionContext);

                //Then update the Opportunity
                Guid CustomEntityName = new Guid();
                CustomEntityName = opportunityReference.Get(executionContext).Id;

                _opportunity.Id = CustomEntityName;

               //Execute Stored Proc
                using (SqlConnection oConn = new SqlConnection(connectionString))
                {
                    oConn.Open();

                    //Delete Commit link SQL statement
                    using (SqlCommand cmdAECommit = new SqlCommand())
                    {
                        cmdAECommit.Connection = oConn;
                        cmdAECommit.CommandType = CommandType.StoredProcedure;
                        cmdAECommit.CommandText = "dbo.AddOppInfoToCommits";
                        cmdAECommit.Parameters.AddWithValue("@estimatedclosedate", date);
                        cmdAECommit.Parameters.AddWithValue("@createdby", accountExecutiveId);
                        using (SqlDataReader reader = cmdAECommit.ExecuteReader())
                        {
                            int intCounter = 0;
                            while (reader.Read()) //opens the SQL 
                            {
                                if (intCounter == 0)
                                {
                                    AECustomerReader = reader["GTRI_name"].ToString();
                                }
                                intCounter++; //end of reader
                            }
                            reader.Close();
                        }
                    }
                    oConn.Close();
                }

                Entity updateOpportunity = new Entity(_opportunity.LogicalName);
                updateOpportunity.Attributes["gtri_monthlycommitid"] = AECustomerReader;
                service.Update(updateOpportunity);

                Write("Created By: " + accountExecutiveId);
                Write("Estimated Closedate: " + date);
                Write("Input field: " + AECustomerReader);
                Write("Opportunity: " + CustomEntityName);
            }
            catch (Exception ex)
            {
            }
        }
    }
}

Open in new window

0
 
newjeep19Author Commented:
Please help I need an answer soon thank you
0
 
newjeep19Author Commented:
I was able to find a solution on my own. The code is below:

    protected override void Execute(CodeActivityContext executionContext)
        {
            try
            {
                //Create the IWorkflowContext and the
                //IOrganizationService for communication with CRM
                IWorkflowContext context = executionContext.GetExtension<IWorkflowContext>();
                IOrganizationServiceFactory serviceFactory = executionContext.GetExtension<IOrganizationServiceFactory>();
                IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);


                EntityReference systemuser = accountExecutiveReference.Get<EntityReference>(executionContext);
                EntityReference opportunity = myOpportunity.Get<EntityReference>(executionContext);

                // Access the input parameter declared above 
                Guid accountExecutiveId = new Guid();
                accountExecutiveId = accountExecutiveReference.Get(executionContext).Id;

                DateTime date = new DateTime();
                date = dateToCloseReference.Get(executionContext);

                Guid opportunityId = new Guid();
                opportunityId = myOpportunity.Get(executionContext).Id;

                Guid monthlyCommitId = Guid.Empty;

                //Execute Stored Proc
                using (SqlConnection oConn = new SqlConnection(connectionString))
                {
                    oConn.Open();

                    //Delete Commit link SQL statement
                    using (SqlCommand cmdAECommit = new SqlCommand())
                    {
                        cmdAECommit.Connection = oConn;
                        cmdAECommit.CommandType = CommandType.StoredProcedure;
                        cmdAECommit.CommandText = "dbo.AddOppInfoToCommits";
                        cmdAECommit.Parameters.AddWithValue("@estimatedclosedate", date);
                        cmdAECommit.Parameters.AddWithValue("@createdby", accountExecutiveId);
                        using (SqlDataReader reader = cmdAECommit.ExecuteReader())
                        {
                            if (reader != null)
                            {
                                if (reader.HasRows)
                                {
                                    int intCounter = 0;
                                    while (reader.Read()) //opens the SQL 
                                    {
                                        if (intCounter == 0)
                                        {
                                            monthlyCommitId = (Guid)reader["GTRI_MonthlyCommitId"];
                                            MonthlyCommitName = reader["Gtri_name"].ToString();
                                        }
                                        intCounter++; //end of reader
                                    }
                                    reader.Close();
                                }
                            }
                        }
                    }
                    oConn.Close();
                }

                if (monthlyCommitId != Guid.Empty)
                {
                    Entity updateOpportunity = new Entity("opportunity");
                    updateOpportunity.Id = opportunityId;

                    EntityReference monthlyCommitReference = new EntityReference("gtri_monthlycommit", monthlyCommitId);
                    updateOpportunity["gtri_monthlycommitid"] = monthlyCommitReference;

                    service.Update(updateOpportunity);
                }
            }
            catch (SoapException ex)
            {
                Write("SoapException", ex);
            }
            catch (Exception ex)
            {
                Write("Exception", ex);
            }
        }

        #region CRMInput
        // Initialize the input parameter
        [Input("Account Executive")]
        [ReferenceTarget("systemuser")]
        public InArgument<EntityReference> accountExecutiveReference { get; set; }

        [Input("Date to Close")]
        public InArgument<DateTime> dateToCloseReference { get; set; }

        [Input("Opportunity")]
        [ReferenceTarget("opportunity")]
        public InArgument<EntityReference> myOpportunity { get; set; }

        #endregion
    }

Open in new window

0
 
newjeep19Author Commented:
I wa able to workout the issue by writing the errors out to a log and searching for examples on the internet
0

Featured Post

Free learning courses: Active Directory Deep Dive

Get a firm grasp on your IT environment when you learn Active Directory best practices with Veeam! Watch all, or choose any amount, of this three-part webinar series to improve your skills. From the basics to virtualization and backup, we got you covered.

  • 5
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now