public void When_Calling_InitializeFromRequest_With_Early_Bound_Classes_Should_Return_Early_Bound_Entity() { var ctx = new XrmFakedContext(); var service = ctx.GetFakedOrganizationService(); var lead = new Lead { Id = Guid.NewGuid() }; // This will set ProxyTypesAssembly = true ctx.Initialize(new List <Entity> { lead }); var entityReference = new EntityReference(Lead.EntityLogicalName, lead.Id); var req = new InitializeFromRequest { EntityMoniker = entityReference, TargetEntityName = Contact.EntityLogicalName, TargetFieldType = TargetFieldType.All }; var result = (InitializeFromResponse)service.Execute(req); Assert.IsType <Contact>(result.Entity); }
public void When_Calling_InitializeFromRequest_Should_Return_InitializeFromResponse() { var ctx = new XrmFakedContext { ProxyTypesAssembly = Assembly.GetAssembly(typeof(Contact)) }; var service = ctx.GetFakedOrganizationService(); var lead = new Entity { LogicalName = "Lead", Id = Guid.NewGuid(), ["FirstName"] = "Arjen", ["LastName"] = "Stortelder" }; ctx.Initialize(new List <Entity> { lead }); var entityReference = new EntityReference("Lead", lead.Id); var req = new InitializeFromRequest { EntityMoniker = entityReference, TargetEntityName = "Contact", TargetFieldType = TargetFieldType.All }; Assert.IsType <InitializeFromResponse>(service.Execute(req)); }
protected override void ExecuteWorkflowLogic() { var additionalCondition = Conditions.Get(Context.ExecutionContext) ?? string.Empty; var sourceEntityFetchXml = $@" <fetch> <entity name='{SourceEntity}' > <attribute name='{SourceEntity}id' /> <filter type='and' > <condition attribute='{SourceEntityLookupFieldName}' operator='eq' value='{SourceEntityParent.Id}' /> {additionalCondition} </filter> </entity> </fetch>"; var sourceEntityQuery = new FetchExpression(sourceEntityFetchXml); var sourceEntities = QueryWithPaging(sourceEntityQuery); foreach (var sourceEntity in sourceEntities) { var initializeFromRequest = new InitializeFromRequest() { EntityMoniker = sourceEntity.ToEntityReference(), TargetEntityName = TargetEntity, TargetFieldType = TargetFieldType.ValidForCreate }; var initializeFromResponse = (InitializeFromResponse)Context.UserService.Execute(initializeFromRequest); var targetEntity = initializeFromResponse.Entity; targetEntity[TargetEntityLookupFieldName] = TargetEntityParent; Context.UserService.Create(targetEntity); } }
public void When_Calling_InitializeFromRequest_With_Late_Bound_Classes_Should_Return_Late_Bound_Entity() { var ctx = new XrmFakedContext(); string sourceEntityLogicalName = "lead"; string targetEntityLogicalName = "contact"; var service = ctx.GetFakedOrganizationService(); var lead = new Entity { Id = Guid.NewGuid(), LogicalName = sourceEntityLogicalName }; ctx.Initialize(new List <Entity> { lead }); var entityReference = new EntityReference(sourceEntityLogicalName, lead.Id); var req = new InitializeFromRequest { EntityMoniker = entityReference, TargetEntityName = targetEntityLogicalName, TargetFieldType = TargetFieldType.All }; var result = (InitializeFromResponse)service.Execute(req); Assert.IsType <Entity>(result.Entity); Assert.Equal(targetEntityLogicalName, result.Entity.LogicalName); }
public void When_Calling_InitializeFromRequest_Should_Return_Entity_As_Entity_Of_Type_TargetEntityName() { var ctx = new XrmFakedContext { ProxyTypesAssembly = Assembly.GetAssembly(typeof(Contact)) }; var service = ctx.GetFakedOrganizationService(); var lead = new Lead { Id = Guid.NewGuid(), FirstName = "Arjen", LastName = "Stortelder" }; ctx.Initialize(new List <Entity> { lead }); var entityReference = new EntityReference(Lead.EntityLogicalName, lead.Id); var req = new InitializeFromRequest { EntityMoniker = entityReference, TargetEntityName = Contact.EntityLogicalName, TargetFieldType = TargetFieldType.All }; var result = (InitializeFromResponse)service.Execute(req); Assert.IsType <Contact>(result.Entity); Assert.Equal(Contact.EntityLogicalName, result.Entity.LogicalName); }
public void When_Calling_InitializeFromRequest_Should_Return_Entity_With_Attributes_Set_From_The_Mapping() { var ctx = new XrmFakedContext { ProxyTypesAssembly = Assembly.GetAssembly(typeof(Contact)) }; var service = ctx.GetFakedOrganizationService(); var lead = new Lead { Id = Guid.NewGuid(), FirstName = "Arjen", LastName = "Stortelder" }; ctx.Initialize(new List <Entity> { lead }); ctx.AddAttributeMapping(Lead.EntityLogicalName, "firstname", Contact.EntityLogicalName, "firstname"); var entityReference = new EntityReference(Lead.EntityLogicalName, lead.Id); var req = new InitializeFromRequest { EntityMoniker = entityReference, TargetEntityName = Contact.EntityLogicalName, TargetFieldType = TargetFieldType.All }; var result = (InitializeFromResponse)service.Execute(req); var contact = result.Entity.ToEntity <Contact>(); Assert.Equal("Arjen", contact.FirstName); Assert.Equal(null, contact.LastName); }
public void When_Calling_InitializeFromRequest_Should_Return_Entity_With_EntityReference() { var ctx = new XrmFakedContext { ProxyTypesAssembly = Assembly.GetAssembly(typeof(Contact)) }; var service = ctx.GetFakedOrganizationService(); var lead = new Lead { Id = Guid.NewGuid(), FirstName = "Arjen", LastName = "Stortelder" }; ctx.Initialize(new List <Entity> { lead }); ctx.AddAttributeMapping(Lead.EntityLogicalName, "leadid", Contact.EntityLogicalName, "originatingleadid"); var entityReference = new EntityReference(Lead.EntityLogicalName, lead.Id); var req = new InitializeFromRequest { EntityMoniker = entityReference, TargetEntityName = Contact.EntityLogicalName, TargetFieldType = TargetFieldType.All }; var result = (InitializeFromResponse)service.Execute(req); var contact = result.Entity; var originatingleadid = contact["originatingleadid"]; Assert.IsType <EntityReference>(originatingleadid); }
/// <summary> /// This is native CRM behavior, to copy the content from Parent to Child record, using the Relationship ‘Mappings’ to avoid the overhead of manual data entry on child record. /// </summary> /// <param name="service"></param> /// <param name="accountId"></param> /// <param name="firstName"></param> /// <param name="lastName"></param> /// <see cref="https://rajeevpentyala.com/2017/01/26/create-a-child-record-by-copying-mapping-fields-from-parent-using-crm-sdk/"/> /// <returns></returns> public Guid CreateRecordFromAccount(IOrganizationService service, Guid accountId, string firstName, string lastName) { InitializeFromRequest initialize = new InitializeFromRequest { // Set the target entity (i.e.,Contact) TargetEntityName = "contact", // Create the EntityMoniker of Source (i.e.,Account) EntityMoniker = new EntityReference("account", accountId) }; // Execute the request InitializeFromResponse initialized = (InitializeFromResponse)service.Execute(initialize); // Read Intitialized entity (i.e.,Contact with copied attributes from Account) if (initialized.Entity != null) { // Get entContact from the response var entContact = initialized.Entity; // Set the additional attributes of the Contact entContact.Attributes.Add("firstname", firstName); entContact.Attributes.Add("lastname", lastName); // Create a new contact return(service.Create(entContact)); } else { return(new Guid()); } }
/// <summary> /// Utilizes the standard OOB Mappings from CRM to hydrate fields on child record from a parent. /// </summary> /// <param name="service">The service.</param> /// <param name="parentEntity">The Parent Entity.</param> /// <param name="childLogicalName">The logical name of the child</param> /// <param name="targetFieldType">The Target Field Type</param> /// <returns></returns> public static Entity InitializeFrom(this IOrganizationService service, EntityReference parentEntity, string childLogicalName, TargetFieldType targetFieldType = TargetFieldType.All) { var initialize = new InitializeFromRequest { TargetEntityName = childLogicalName, EntityMoniker = parentEntity, TargetFieldType = targetFieldType }; var initialized = (InitializeFromResponse)service.Execute(initialize); return(initialized.Entity); }
/// <summary> /// Utilizes the standard OOB Mappings from CRM to hydrate fields on child record from a parent. /// </summary> /// <typeparam name="T">The Entity Type to Return</typeparam> /// <param name="service">The service.</param> /// <param name="parentEntity">The Parent Entity.</param> /// <param name="targetFieldType">The Target Field Type</param> /// <returns></returns> public static T InitializeFrom <T>(this IOrganizationService service, EntityReference parentEntity, TargetFieldType targetFieldType = TargetFieldType.All) where T : Entity { var initialize = new InitializeFromRequest { TargetEntityName = EntityHelper.GetEntityLogicalName <T>(), EntityMoniker = parentEntity, TargetFieldType = targetFieldType }; var initialized = (InitializeFromResponse)service.Execute(initialize); return(initialized.Entity.AsEntity <T>()); }
public void CreateCopiesOfApprovedRights(IOrganizationService service, EntityCollection QueryResults, List <Tuple <string, string> > FieldsToCopy, EntityReference CallingRecordReference, string TargetEntityName, string[] altKeyGen) { foreach (var record in QueryResults.Entities) { // initialize request - to make sure it inherits the correct mappings from CRM. var request = new InitializeFromRequest() { EntityMoniker = CallingRecordReference, TargetEntityName = TargetEntityName }; var response = (InitializeFromResponse)service.Execute(request); // get entity from the response Entity newRecord = response.Entity; // copy values from master record // t1 = dataType, t2 = logicalname foreach (var field in FieldsToCopy) { switch (field.Item1) { case "Bool": newRecord[field.Item2] = record.GetAttributeValue <bool>(field.Item2); break; case "EntityReference": var checkValue = record.GetAttributeValue <EntityReference>(field.Item2) == null ? false : true; if (checkValue) { newRecord[field.Item2] = new EntityReference(record.GetAttributeValue <EntityReference>(field.Item2).LogicalName, record.GetAttributeValue <EntityReference>(field.Item2).Id); } break; default: break; } } // take the id from the master and insert into lookupfield on child newRecord["sdu_masterrecord"] = new EntityReference(TargetEntityName, record.Id); newRecord["sdu_alternatekey"] = GenerateAlternateKey(service, newRecord, "sdu_brugeradministrationsndring", altKeyGen); //newRecord["sdu_omkostningssted"] = new EntityReference("sdu_bruger", record.GetAttributeValue<EntityReference>("sdu_omkostningssted").Id); var createdEntity = service.Create(newRecord); } }
/// <summary> /// Creates a table row from another table row using standard columns /// mapping /// </summary> /// <param name="service">Dataverse Organization service</param> /// <param name="entityLogicalname">Logical name of the targeted table</param> /// <param name="sourceRef">Reference to the source row</param> /// <param name="type">Mapping columns type</param> /// <param name="additionalColumns">Additional columns to add to the generated row</param> /// <returns>Created row</returns> public static Entity CreateFromInitialization(this IOrganizationService service, string entityLogicalname, EntityReference sourceRef, TargetFieldType type, Dictionary <string, object> additionalColumns = null) { var request = new InitializeFromRequest { EntityMoniker = sourceRef, TargetEntityName = entityLogicalname, TargetFieldType = type }; var response = (InitializeFromResponse)service.Execute(request); if (additionalColumns?.Count > 0) { foreach (var key in additionalColumns.Keys) { response.Entity[key] = additionalColumns[key]; } } response.Entity.Id = service.Create(response.Entity); return(response.Entity); }
/// <summary> /// This method first creates an account and a lead, then initializes a new /// account from the already existing account and a new opportunity from the /// already existing lead. /// </summary> /// <param name="serverConfig">Contains server connection information.</param> /// <param name="promptforDelete">When True, the user will be prompted to delete all /// created entities.</param> public void Run(ServerConnection.Configuration serverConfig, bool promptforDelete) { try { // Connect to the Organization service. // The using statement assures that the service proxy will be properly // disposed. using (_serviceProxy = new OrganizationServiceProxy(serverConfig.OrganizationUri, serverConfig.HomeRealmUri,serverConfig.Credentials, serverConfig.DeviceCredentials)) { // This statement is required to enable early-bound type support. _serviceProxy.EnableProxyTypes(); CreateRequiredRecords(); //<snippetInitializeFrom1> #region Initialize Account from Account Console.WriteLine(); Console.WriteLine(" Initializing new Account from the initial Account"); // Create the request object InitializeFromRequest initialize = new InitializeFromRequest(); // Set the properties of the request object initialize.TargetEntityName = Account.EntityLogicalName.ToString(); // Create the EntityMoniker initialize.EntityMoniker = _initialAccount.ToEntityReference(); // Execute the request InitializeFromResponse initialized = (InitializeFromResponse)_serviceProxy.Execute(initialize); if (initialized.Entity != null) Console.WriteLine(" New Account initialized successfully"); Console.WriteLine(); #endregion #region Initialize Opportunity from Lead Console.WriteLine(" Initializing an Opportunity from the initial Lead"); // Create the request object initialize.TargetEntityName = Opportunity.EntityLogicalName.ToString(); // Create the EntityMoniker initialize.EntityMoniker = _initialLead.ToEntityReference(); // Execute the request initialized = (InitializeFromResponse)_serviceProxy.Execute(initialize); if (initialized.Entity != null && initialized.Entity.LogicalName == Opportunity.EntityLogicalName) { var opportunity = (Opportunity)initialized.Entity; Console.WriteLine(" New Opportunity initialized successfully (Name={0})", opportunity.Name); } #endregion //</snippetInitializeFrom1> DeleteRequiredRecords(promptforDelete); } } // Catch any service fault exceptions that Microsoft Dynamics CRM throws. catch (FaultException<Microsoft.Xrm.Sdk.OrganizationServiceFault>) { // You can handle an exception here or pass it back to the calling method. throw; } }
/// <summary> /// Auto Map all values that are the same and properties that are of the same type as the Source Entity /// </summary> /// <param name="request">The request.</param> /// <returns></returns> private InitializeFromResponse ExecuteInternal(InitializeFromRequest request) { var entity = new Entity(request.TargetEntityName); InitializeFromLogic.GetPropertiesByAttributeWithMatchingRelationships(GetType(request.TargetEntityName), request.EntityMoniker.LogicalName, out Dictionary <string, PropertyInfo> propertiesByAttribute, out List <string> relationshipProperties); var prefixlessKeys = propertiesByAttribute.Keys .Where(k => k.Contains("_")) .Select(k => new { PrefixlessName = k.SubstringByString("_"), AttributeName = k }) .ToDictionaryList(k => k.PrefixlessName, k => k.AttributeName); var source = Retrieve(request.EntityMoniker.LogicalName, request.EntityMoniker.Id, new ColumnSet(true)); InitializeFromLogic.RemoveInvalidAttributes(source, request.TargetFieldType); foreach (var kvp in source.Attributes.Select(v => new { v.Key, v.Value, NameMatching = InitializeFromLogic.GetAttributeNameMatching(v.Key, propertiesByAttribute, prefixlessKeys) }) .Where(v => v.NameMatching != InitializeFromLogic.AttributeNameMatching.None) .OrderBy(v => v.NameMatching)) { var sourceKey = kvp.Key.Contains("_") && (kvp.NameMatching == InitializeFromLogic.AttributeNameMatching.PrefixlessSourceToDestination || kvp.NameMatching == InitializeFromLogic.AttributeNameMatching.PrefixlessSourceToPrefixlessDestionation) ? kvp.Key.SubstringByString("_") : kvp.Key; switch (kvp.NameMatching) { case InitializeFromLogic.AttributeNameMatching.Exact: case InitializeFromLogic.AttributeNameMatching.PrefixlessSourceToDestination: if (!entity.Attributes.ContainsKey(sourceKey)) { entity[sourceKey] = kvp.Value; } // else it has already been set by a better match, skip break; case InitializeFromLogic.AttributeNameMatching.SourceToPrefixlessDestination: case InitializeFromLogic.AttributeNameMatching.PrefixlessSourceToPrefixlessDestionation: foreach (var destinationKey in prefixlessKeys[sourceKey]) { if (!entity.Attributes.ContainsKey(destinationKey)) { entity[destinationKey] = kvp.Value; } // else it has already been set by a better match, skip } break; } } foreach (var relationship in relationshipProperties) { entity[relationship] = request.EntityMoniker; } return(new InitializeFromResponse { ["Entity"] = entity }); }
private static EntityReference BusinessLogic(CodeActivityContext executionContext, EntityReference lead) { ITracingService tracingService = executionContext.GetExtension <ITracingService>(); var returnedReference = new EntityReference(); try { //Create the context IWorkflowContext context = executionContext.GetExtension <IWorkflowContext>(); IOrganizationServiceFactory serviceFactory = executionContext.GetExtension <IOrganizationServiceFactory>(); IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId); #region License Validation OrganizationRequest Req = new OrganizationRequest("hdn_ValidateLicense"); Req["ProductName"] = "BareBonesSalesCore"; //pass in the Solution Name OrganizationResponse Response = service.Execute(Req); if (Response.Results.ContainsKey("IsValid") && Response.Results["IsValid"].ToString() != "True") { var errorText = "The license for Bare Bones Sales Core is invalid. "; if (Response.Results.Contains("ErrorMessage")) { errorText = errorText + Response.Results["ErrorMessage"]; } throw new InvalidPluginExecutionException(errorText); } #endregion // pull the input parameters var leadDetails = service.Retrieve(lead.LogicalName, lead.Id, new ColumnSet("hdn_email", "hdn_lastname", "hdn_website", "hdn_company", "hdn_topic", "hdn_description")); if (leadDetails != null) { var contactId = new EntityReference("contact"); if (leadDetails.Contains("hdn_email")) { var query2 = new QueryExpression("contact"); query2.ColumnSet = new ColumnSet("emailaddress1"); query2.Criteria.AddFilter(LogicalOperator.And); query2.Criteria.AddCondition("emailaddress1", ConditionOperator.Equal, leadDetails.GetAttributeValue <string>("hdn_email")); var contacts = service.RetrieveMultiple(query2); if (contacts.Entities.Count > 0) { contactId.Id = contacts.Entities[0].Id; } } if (contactId.Id == new Guid()) { tracingService.Trace("creating lead"); if (leadDetails.Contains("hdn_lastname")) { var initialize = new InitializeFromRequest(); initialize.TargetEntityName = "contact"; initialize.EntityMoniker = lead; // Execute the request var initialized = (InitializeFromResponse)service.Execute(initialize); if (initialized.Entity != null && initialized.Entity.LogicalName == "contact") { ; } var contact = initialized.Entity; var contactGuid = service.Create(contact); contactId.Id = contactGuid; } } var accountId = new EntityReference("account"); if (leadDetails.Contains("hdn_website")) { var query3 = new QueryExpression("account"); query3.ColumnSet = new ColumnSet("websiteurl"); query3.Criteria.AddFilter(LogicalOperator.And); query3.Criteria.AddCondition("websiteurl", ConditionOperator.Equal, leadDetails.GetAttributeValue <string>("hdn_website")); var accounts = service.RetrieveMultiple(query3); if (accounts.Entities.Count > 0) { accountId.Id = accounts.Entities[0].Id; } } if (accountId.Id == Guid.Empty) { if (leadDetails.Contains("hdn_company")) { var initializeAccount = new InitializeFromRequest(); initializeAccount.TargetEntityName = "account"; initializeAccount.EntityMoniker = lead; // Execute the request var initializedAccount = (InitializeFromResponse)service.Execute(initializeAccount); if (initializedAccount.Entity != null && initializedAccount.Entity.LogicalName == "account") { ; } var account = initializedAccount.Entity; if (contactId.Id != Guid.Empty) { account["primarycontactid"] = contactId; } var accountGuid = service.Create(account); accountId.Id = accountGuid; } } var initializeOpp = new InitializeFromRequest(); initializeOpp.TargetEntityName = "hdn_opportunity"; initializeOpp.EntityMoniker = lead; // Execute the request var initializedOpp = (InitializeFromResponse)service.Execute(initializeOpp); if (initializedOpp.Entity != null && initializedOpp.Entity.LogicalName == "hdn_opportunity") { var newEntity = initializedOpp.Entity; if (accountId.Id != Guid.Empty) { newEntity.Attributes["hdn_customer"] = accountId; } else { if (contactId.Id != Guid.Empty) { newEntity.Attributes["hdn_customer"] = contactId; } } if (contactId.Id != Guid.Empty) { newEntity.Attributes["hdn_contact"] = contactId; } //newEntity.Attributes["hdn_topic"] = leadDetails.GetAttributeValue<string>("hdn_topic"); var guid = service.Create(newEntity); //finally with the opportunity created lets qualify the lead var updateLead = new Entity(lead.LogicalName, lead.Id); updateLead.Attributes.Add("statuscode", new OptionSetValue(752240000)); updateLead.Attributes.Add("statecode", new OptionSetValue(1)); service.Update(updateLead); return(new EntityReference("hdn_opportunity", guid)); } } } catch (InvalidPluginExecutionException ex) { throw; } catch (Exception ex) { tracingService.Trace(ex.Message); tracingService.Trace(ex.StackTrace); throw; } return(returnedReference); }
[STAThread] // Required to support the interactive login experience static void Main(string[] args) { CrmServiceClient service = null; try { service = SampleHelpers.Connect("Connect"); if (service.IsReady) { // Create any entity records that the demonstration code requires SetUpSample(service); #region Demonstrate Console.WriteLine(); Console.WriteLine(" Initializing new Account from the initial Account"); // Create the request object var initialize = new InitializeFromRequest(); // Set the properties of the request object initialize.TargetEntityName = Account.EntityLogicalName.ToString(); // Create the EntityMoniker initialize.EntityMoniker = _initialAccount.ToEntityReference(); // Execute the request InitializeFromResponse initialized = (InitializeFromResponse)service.Execute(initialize); if (initialized.Entity != null) { Console.WriteLine(" New Account initialized successfully"); } Console.WriteLine(); Console.WriteLine(" Initializing an Opportunity from the initial Lead"); // Create the request object initialize.TargetEntityName = Opportunity.EntityLogicalName.ToString(); // Create the EntityMoniker initialize.EntityMoniker = _initialLead.ToEntityReference(); // Execute the request initialized = (InitializeFromResponse)service.Execute(initialize); if (initialized.Entity != null && initialized.Entity.LogicalName == Opportunity.EntityLogicalName) { var opportunity = (Opportunity)initialized.Entity; Console.WriteLine(" New Opportunity initialized successfully (Name={0})", opportunity.Name); } #endregion Demonstrate #region Clean up CleanUpSample(service); #endregion Clean up } else { const string UNABLE_TO_LOGIN_ERROR = "Unable to Login to Microsoft Dataverse"; if (service.LastCrmError.Equals(UNABLE_TO_LOGIN_ERROR)) { Console.WriteLine("Check the connection string values in cds/App.config."); throw new Exception(service.LastCrmError); } else { throw service.LastCrmException; } } } catch (Exception ex) { SampleHelpers.HandleException(ex); } finally { if (service != null) { service.Dispose(); } Console.WriteLine("Press <Enter> to exit."); Console.ReadLine(); } }
/// <summary> /// This method first creates an account and a lead, then initializes a new /// account from the already existing account and a new opportunity from the /// already existing lead. /// </summary> /// <param name="serverConfig">Contains server connection information.</param> /// <param name="promptforDelete">When True, the user will be prompted to delete all /// created entities.</param> public void Run(ServerConnection.Configuration serverConfig, bool promptforDelete) { try { // Connect to the Organization service. // The using statement assures that the service proxy will be properly // disposed. using (_serviceProxy = new OrganizationServiceProxy(serverConfig.OrganizationUri, serverConfig.HomeRealmUri, serverConfig.Credentials, serverConfig.DeviceCredentials)) { // This statement is required to enable early-bound type support. _serviceProxy.EnableProxyTypes(); CreateRequiredRecords(); #region Initialize Account from Account Console.WriteLine(); Console.WriteLine(" Initializing new Account from the initial Account"); // Create the request object InitializeFromRequest initialize = new InitializeFromRequest(); // Set the properties of the request object initialize.TargetEntityName = Account.EntityLogicalName.ToString(); // Create the EntityMoniker initialize.EntityMoniker = _initialAccount.ToEntityReference(); // Execute the request InitializeFromResponse initialized = (InitializeFromResponse)_serviceProxy.Execute(initialize); if (initialized.Entity != null) { Console.WriteLine(" New Account initialized successfully"); } Console.WriteLine(); #endregion #region Initialize Opportunity from Lead Console.WriteLine(" Initializing an Opportunity from the initial Lead"); // Create the request object initialize.TargetEntityName = Opportunity.EntityLogicalName.ToString(); // Create the EntityMoniker initialize.EntityMoniker = _initialLead.ToEntityReference(); // Execute the request initialized = (InitializeFromResponse)_serviceProxy.Execute(initialize); if (initialized.Entity != null & amp; & initialized.Entity.LogicalName == Opportunity.EntityLogicalName) { var opportunity = (Opportunity)initialized.Entity; Console.WriteLine(" New Opportunity initialized successfully (Name={0})", opportunity.Name); } #endregion DeleteRequiredRecords(promptforDelete); } } // Catch any service fault exceptions that Microsoft Dynamics CRM throws. catch (FaultException <Microsoft.Xrm.Sdk.OrganizationServiceFault> ) { // You can handle an exception here or pass it back to the calling method. throw; } }