示例#1
0
        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);
        }
示例#2
0
        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);
            }
        }
示例#4
0
        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);
        }
示例#5
0
        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);
        }
示例#6
0
        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);
        }
示例#7
0
        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);
        }
示例#8
0
        /// <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());
            }
        }
示例#9
0
        /// <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);
        }
示例#10
0
        /// <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>());
        }
示例#11
0
        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);
            }
        }
示例#12
0
        /// <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);
        }
示例#13
0
        /// <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;
            }
        }
示例#14
0
        /// <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
            });
        }
示例#15
0
        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();
            }
        }
示例#17
0
        /// <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; &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;
            }
        }