hii,
i am new to ms crm. I want to auto generate a number in contact entity. On post-event plugin, following error occurs. Any help is welcome.
Unhandled Exception: System.ServiceModel.FaultException`1[[Microsoft.Xrm.Sdk.OrganizationServiceFault, Microsoft.Xrm.Sdk, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]]: Unexpected exception from plug-in (Execute): AutoNumber.Class1:
System.Collections.Generic.KeyNotFoundException: The given key was not present in the dictionary.Detail:
<OrganizationServiceFault xmlns:i">
<ErrorCode>-2147220956</ErrorCode>
<ErrorDetails xmlns:d2p1=" />
<Message>Unexpected exception from plug-in (Execute): AutoNumber.Class1: System.Collections.Generic.KeyNotFoundException: The given key was not present in the dictionary.</Message>
<Timestamp>2013-03-02T07:08:30.8652974Z</Timestamp>
<InnerFault i:nil="true" />
<TraceText>
[AutoNumber: AutoNumber.Class1]
[1d4afc70-0683-e211-9327-984be173a3b9: AutoNumber.Class1: Create of contact]
</TraceText>
</OrganizationServiceFault>
CODE:-
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Query;
using System.ServiceModel;
using System.Runtime.Serialization;
namespace AutoNumber
{
public class Class1:IPlugin
{
public void Execute(IServiceProvider serviceProvider)
{
string generatednumber;
IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
if (context.InputParameters.Contains("Target") && context.InputParameters["Tareget"] is Entity)
{
Entity objcontact = (Entity)context.InputParameters["Target"];
if (objcontact.LogicalName != "contact")
return;
else
{
try
{
IOrganizationServiceFactory servicefactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
IOrganizationService service = servicefactory.CreateOrganizationService(context.UserId);
var id = (Guid)context.OutputParameters["id"];
//Entity objautonumber= service.Retrieve("new_autonumbergeneration", new Guid(""),new Microsoft.Xrm.Sdk.Query.ColumnSet(new
string[]{"new_name","new_Prefix","new_Number","new_Suffix"}));
//string name= objautonumber["new_name"].ToString();
//string prefix=objautonumber["new_Prefix"].ToString();
//string number=objautonumber["new_Number"].ToString();
//string suffix=objautonumber["new_Suffix"].ToString();
//string generated=prefix+"-"+number+"-"+suffix;
//objcontact["new_ContactNumber"].Equals(generated);
ConditionExpression condition = new ConditionExpression();
condition.AttributeName = "new_name";
condition.Operator = ConditionOperator.Equal;
condition.Values.Add("Prefix for account entity");
FilterExpression filter = new FilterExpression();
filter.Conditions.Add(condition);
QueryExpression query = new QueryExpression("new_autonumbergeneration");
query.ColumnSet.AddColumns("new_Prefix", "new_Number", "new_Suffix");
query.Criteria.AddFilter(filter);
EntityCollection result = service.RetrieveMultiple(query);
foreach (var a in result.Entities)
{
generatednumber = a.Attributes["new_Prefix"] + "-" + a.Attributes["new_Number"]+ "-" + a.Attributes["new_Suffix"];
objcontact.Attributes["new_ContactNumber"].Equals(generatednumber);
}
}
catch (FaultException<OrganizationServiceFault> ex)
{
throw new InvalidPluginExecutionException("The autogenerated number can't be generated by plug-in",ex);
}
}
}
}
}
}
Thanks in advance.