using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Crm.Sdk;
using Microsoft.Crm.SdkTypeProxy;
using Microsoft.Crm.Sdk.Query;
using System.Web.Services.Protocols;
namespace CRM.Customization.AutoNumber
{
public class AutoNumberPlugIns:IPlugin
{
DynamicEntity entity = null;
int startNumber;
string prefix = string.Empty;
string seperator = string.Empty;
int nextMaxNumber;
string uniqueId = string.Empty;
#region IPlugin Members
public void Execute(IPluginExecutionContext context)
{
if (context.InputParameters.Properties.Contains(“Target”) &&
context.InputParameters.Properties[“Target”] is DynamicEntity)
{
entity = (DynamicEntity)context.InputParameters.Properties[“target”];
ICrmService service = context.CreateCrmService(true);
if (entity.Name ==“new_testentity”)
{
// Find maximum number
int maxNumber = FindMaxNumber(service);
nextMaxNumber=maxNumber + 1;
if (nextMaxNumber > 0)
{
bool isRetrivePrefixSuccess = RetrievePrefixSufixAndStartNumber(service);
if (isRetrivePrefixSuccess)
{
if (nextMaxNumber >= startNumber)
{
string buildAutoNumber = prefix + seperator + nextMaxNumber.ToString();
uniqueId = buildAutoNumber;
StringProperty uId = new StringProperty(“new_uniqueid”, uniqueId);
entity.Properties.Add(uId);
CrmNumber nextNumber = new CrmNumber();
nextNumber.Value = nextMaxNumber;
CrmNumberProperty uniqueNo = new CrmNumberProperty(“new_uniqueno”, nextNumber);
entity.Properties.Add(uniqueNo);
}
}
}
}
}
}
private int FindMaxNumber(ICrmService service)
{
int maxNo=0;
QueryExpression query = new QueryExpression();
query.EntityName = “new_testentity”;
ColumnSet cols = new ColumnSet();
cols.AddColumn(“new_uniqueno”);
query.ColumnSet = cols;
query.AddOrder(“new_uniqueno”, OrderType.Descending);
PagingInfo pageInfo = new PagingInfo();
pageInfo.Count = 1;
pageInfo.PageNumber = 1;
query.PageInfo = pageInfo;
RetrieveMultipleRequest request = new RetrieveMultipleRequest();
request.Query = query;
request.ReturnDynamicEntities = true;
RetrieveMultipleResponse response = (RetrieveMultipleResponse)service.Execute(request);
DynamicEntity testEntity = (DynamicEntity)response.BusinessEntityCollection.BusinessEntities[0];
for (int i = 0; i < testEntity.Properties.Count; i++)
{
if (testEntity.Properties.Contains(“new_uniqueno”))
{
CrmNumber uniqueNumber = (CrmNumber)testEntity.Properties[“new_uniqueno”];
maxNo = uniqueNumber.Value;
}
}
return maxNo;
}
private bool RetrievePrefixSufixAndStartNumber(ICrmService service)
{
try
{
QueryByAttribute query = new QueryByAttribute();
query.EntityName = “new_autonumber”;
ColumnSet cols = new ColumnSet();
cols.AddColumn(“new_startnumber”);
cols.AddColumn(“new_prefix”);
cols.AddColumn(“new_currentnumber”);
cols.AddColumn(“new_separator”);
query.ColumnSet = cols;
query.Attributes = new string[] { “new_entityname” };
query.Values = new object[] { “new_testentity” };
RetrieveMultipleRequest request = new RetrieveMultipleRequest();
request.Query = query;
request.ReturnDynamicEntities = true;
RetrieveMultipleResponse response = (RetrieveMultipleResponse)service.Execute(request);
DynamicEntity dynamicsEntity = (DynamicEntity)response.BusinessEntityCollection.BusinessEntities[0];
if (dynamicsEntity.Properties.Count > 0)
{
// DynamicEntity autoNumberEntity = (DynamicEntity)dynamicsEntity.BusinessEntities[0];
// Extract the fullname from the dynamic entity string fullname;
for (int i = 0; i < dynamicsEntity.Properties.Count; i++)
{
if (dynamicsEntity.Properties.Contains(“new_startnumber”))
{
CrmNumber startNo = (CrmNumber)dynamicsEntity.Properties[“new_startnumber”];
startNumber = startNo.Value;
}
if (dynamicsEntity.Properties.Contains(“new_prefix”))
{
String prefixId = (String)dynamicsEntity.Properties[“new_prefix”];
prefix = prefixId.ToString();
}
if (dynamicsEntity.Properties.Contains(“new_separator”))
{
String seperaterId = (String)dynamicsEntity.Properties[“new_separator”];
seperator = seperaterId.ToString();
}
}
}
return true;
}
catch (SoapException ex)
{
throw ex;
}
}
}
#endregion
}
You must be logged in to post a comment.