Next is a code of that plugin:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Query;
using System.Text.RegularExpressions;
using Microsoft.Xrm.Sdk.Messages;
using Microsoft.Crm.Sdk.Messages;
namespace CreateQuoteDetailPlugIn
{
public class Plugin : IPlugin
{
public void Execute(IServiceProvider serviceProvider)
{
IPluginExecutionContext context = (IPluginExecutionContext)
serviceProvider.GetService(typeof(IPluginExecutionContext));
Entity entity;
if (context.InputParameters.Contains("Target") &&
context.InputParameters["Target"] is Entity)
{
entity = (Entity)context.InputParameters["Target"];
if (entity.LogicalName != "quotedetail") { return; }
}
else
{
return;
}
try
{
IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)
serviceProvider.GetService(typeof(IOrganizationServiceFactory));
IOrganizationService service = serviceFactory.CreateOrganizationService(
context.UserId);
IPluginExecutionContext execContext = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
var id = context.PrimaryEntityId;
Entity quoteDetail = service.Retrieve("quotedetail", id, new ColumnSet("quoteid"));
if (quoteDetail != null)
{
EntityReference quoteId = quoteDetail.GetAttributeValue<EntityReference>("quoteid");
string quoteDetailQueryFetch = @"<fetch >
<entity name='quotedetail' >
<attribute name='quotedetailid' alias='quotedetailid' />
<filter>
<condition attribute='quoteid' operator='eq' value='" + quoteId.Id.ToString() + @"' />
</filter>
</entity>
</fetch>";
FetchExpression fetchExpression = new FetchExpression(quoteDetailQueryFetch);
EntityCollection quoteDetailsFromCrm = service.RetrieveMultiple(fetchExpression);
quoteDetail["lineitemnumber"] = quoteDetailsFromCrm.Entities.Count;
service.Update(quoteDetail);
}
}
catch (Exception ex)
{
throw new InvalidPluginExecutionException(
"An error occurred in the plug-in.", ex);
}
}
}
}