Description:-
In this example we explain that how to get current
user Business Unit Details in CRM 2015 using C# plugin. Or how to get details
of the Business Unit in CRM plugin using C#.or how to get Business unit from
Dynamic CRM 2015 plugin.
That is live issue that I have faced the requirement
was that like when we create Lead in CRM then that’s Lead data are Insert/transferred
into Dynamics AX automatically. For that requirements we have create one plugin
that is called when new Lead is created and in which plugin we define the logic
that will fetch the Last inserted Lead data and insert/transfer into Dynamic AX
database.
But the finally problem was that we cannot get the
Business Unit (Company name) of the current logged in user in CRM that we want
to transfer in AX because requirement was that if current logged in users
business unit is suppose “CRMAhmedabad” then in AX databases Lead Table Company
field have value “CRMAhmedabad” when new Lead is insert same like if business
unit is “CRMRajkot” then company field of the Lead table in AX Database have
value “CRMRajkot”.
So finally we found solution like how to get the details
of Business Unit of the current Logged in user in dynamic CRM using C# plugin
are as below.
IOrganizationServiceFactory factory = (IOrganizationServiceFactory)serviceprovider.GetService(typeof(IOrganizationServiceFactory));
IOrganizationService
service = factory.CreateOrganizationService(context.UserId);
Guid userId =
context.InitiatingUserId;
ColumnSet
allFields = new ColumnSet()
{ AllColumns = true };
Entity
user = service.Retrieve("systemuser",
userId, allFields);
All plugin code that will transfer or insert Dynamic
CRM Lead data to AX Lead table using C# plugin are as below.
Plugin Code:-
namespace
Leadtoanotherdomain.Plugins
{
using System;
using System.ServiceModel;
using Microsoft.Xrm.Sdk;
using Leadtoanotherdomain.Plugins.ServiceReference1;
using Microsoft.Xrm.Sdk.Query;
public class
leadtoanotherdomain: IPlugin
{
public void Execute(IServiceProvider
serviceprovider)
{
try
{
ITracingService
tracingService =
(ITracingService)serviceprovider.GetService(typeof(ITracingService));
IPluginExecutionContext
context = (IPluginExecutionContext)serviceprovider.GetService(typeof(IPluginExecutionContext));
if
(context.InputParameters.Contains("Target")
&& context.InputParameters["Target"]
is Entity)
{
Entity
entity = (Entity)context.InputParameters["Target"];
IOrganizationServiceFactory
factory = (IOrganizationServiceFactory)serviceprovider.GetService(typeof(IOrganizationServiceFactory));
//Service
= access to data for modification
IOrganizationService service =
factory.CreateOrganizationService(context.UserId);
//
Adding Basic Http Binding and its properties.
BasicHttpBinding
myBinding = new BasicHttpBinding();
myBinding.Name = "BasicHttpBinding_Service";
myBinding.Security.Mode = BasicHttpSecurityMode.None;
myBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.None;
myBinding.Security.Transport.ProxyCredentialType
= HttpProxyCredentialType.None;
myBinding.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.UserName;
myBinding.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.UserName;
myBinding.OpenTimeout = new TimeSpan(0,
10, 0);
myBinding.SendTimeout = new TimeSpan(0,
10, 0);
myBinding.ReceiveTimeout = new TimeSpan(0, 10,
0);
EndpointAddress
endPointAddress = new EndpointAddress(@"http://capella:7093");
WebServiceSoapClient
my = new WebServiceSoapClient(myBinding,
endPointAddress);
my.Open();
//retrieve
user record
Guid
userId = context.InitiatingUserId;
ColumnSet
allFields = new ColumnSet()
{ AllColumns = true };
Entity
user = service.Retrieve("systemuser",
userId, allFields);
//get
business unit lookup
Guid
businessUnitId = ((EntityReference)user.Attributes["businessunitid"]).Id;
//here InsertLeadToDifferantDomain
is the Webservice Method that we have created to transfer or insert CRM Lead
data to AX Lead table Database.for that you have to define your web service
that will insert CRM data to AX data.just sumple create insert method in your
webservice and call here.
string
ab = my.InsertLeadToDifferantDomain(entity.GetAttributeValue<string>("subject").ToString(),
entity.GetAttributeValue<string>("lastname").ToString(),
entity.GetAttributeValue<string>("firstname").ToString(),
entity.GetAttributeValue<string>("emailaddress1").ToString(),Convert.ToString(businessUnitId));//
if (ab != null)
{
throw new InvalidPluginExecutionException("Success");
}
my.Close();
//var
ab = myClient.GetGrants();
}
}
catch
(CommunicationException ex)
{
throw
new InvalidPluginExecutionException(ex.ToString());
}
// Sandboxed Plug-ins can access
network through the HTTP and HTTPS protocols. This capability provides support
for accessing popular Web resources like Social Sites, News Feeds, Web
services, and more.
//The
following Web access restrictions apply to this Sandbox capability.
// Only the HTTP and HTTPS protocols are
allowed.
// Access to localhost (loopback) is not
permitted.
// IP addresses cannot be used. You must use a
named Web address that requires DNS name resolution.
}
}
}
0 comments:
Post a Comment