Beispiel #1
0
        public static Entity Clone(this Entity e, Type t)
        {
            if (t == null)
            {
                return(e.Clone());
            }

            var cloned = Activator.CreateInstance(t) as Entity;

            cloned.Id          = e.Id;
            cloned.LogicalName = e.LogicalName;

            if (e.FormattedValues != null)
            {
                var formattedValues = new FormattedValueCollection();
                foreach (var key in e.FormattedValues.Keys)
                {
                    formattedValues.Add(key, e.FormattedValues[key]);
                }

                cloned.Inject("FormattedValues", formattedValues);
            }

            foreach (var attKey in e.Attributes.Keys)
            {
                if (e[attKey] != null)
                {
                    cloned[attKey] = CloneAttribute(e[attKey]);
                }
            }
            return(cloned);
        }
        public void When_an_entity_is_returned_formatted_values_are_also_cloned()
        {
            var context = new XrmFakedContext();
            var service = context.GetFakedOrganizationService();

            var account = new Account()
            {
                Id = Guid.NewGuid()
            };

            account["statecode"] = new OptionSetValue(0);

            var formattedValues = new FormattedValueCollection();

            formattedValues.Add("statecode", "Active");
            account.Inject("FormattedValues", formattedValues);

            context.Initialize(new List <Entity>()
            {
                account
            });

            using (var ctx = new XrmServiceContext(service))
            {
                var a = (from acc in ctx.CreateQuery <Account>()
                         select acc).FirstOrDefault();

                Assert.True(a.FormattedValues != null);
                Assert.True(a.FormattedValues.Contains("statecode"));
                Assert.Equal("Active", a.FormattedValues["statecode"]);
            }
        }
        public static Entity Clone(this Entity e, XrmFakedContext context = null)
        {
            var cloned = new Entity(e.LogicalName);

            cloned.Id          = e.Id;
            cloned.LogicalName = e.LogicalName;

            if (e.FormattedValues != null)
            {
                var formattedValues = new FormattedValueCollection();
                foreach (var key in e.FormattedValues.Keys)
                {
                    formattedValues.Add(key, e.FormattedValues[key]);
                }

                cloned.Inject("FormattedValues", formattedValues);
            }

            foreach (var attKey in e.Attributes.Keys)
            {
                cloned[attKey] = e[attKey] != null?CloneAttribute(e[attKey], context) : null;
            }
#if !FAKE_XRM_EASY && !FAKE_XRM_EASY_2013 && !FAKE_XRM_EASY_2015
            foreach (var attKey in e.KeyAttributes.Keys)
            {
                cloned.KeyAttributes[attKey] = e.KeyAttributes[attKey] != null?CloneAttribute(e.KeyAttributes[attKey]) : null;
            }
#endif
            return(cloned);
        }
Beispiel #4
0
        public void When_an_entity_is_returned_with_specific_columns_formatted_values_are_also_cloned()
        {
            var context = new XrmFakedContext();
            var service = context.GetFakedOrganizationService();

            var account = new Account()
            {
                Id = Guid.NewGuid()
            };

            account["statecode"] = AccountState.Active;

            var formattedValues = new FormattedValueCollection();

            formattedValues.Add("statecode", "Active");

            account.Inject("FormattedValues", formattedValues);

            context.Initialize(new List <Entity>()
            {
                account
            });

            var a = service.Retrieve("account", account.Id, new ColumnSet("statecode"));

            Assert.True(a.FormattedValues != null);
            Assert.True(a.FormattedValues.Contains("statecode"));
            Assert.Equal("Active", a.FormattedValues["statecode"]);
        }
        public void FormattedValueCollectionInObjectCanBeSerializedAndDeserialized()
        {
            FormattedValueCollectionContainer formattedValueCollectionContainer = new FormattedValueCollectionContainer();
            FormattedValueCollection          formattedValueCollection          = new FormattedValueCollection();

            formattedValueCollectionContainer.FormattedValueCollection = formattedValueCollection;
            formattedValueCollection.Add("Test", "test");
            JsonSerializer serializer   = new EntitySerializer();
            MemoryStream   memoryStream = new MemoryStream(new byte[9000], true);

            using (StreamWriter writer = new StreamWriter(memoryStream))
            {
                serializer.Serialize(new JsonTextWriter(writer), formattedValueCollectionContainer);
            }

            FormattedValueCollectionContainer deserializedFormattedValueCollectionContainer;

            memoryStream = new MemoryStream(memoryStream.ToArray());
            using (StreamReader reader = new StreamReader(memoryStream))
            {
                deserializedFormattedValueCollectionContainer = (FormattedValueCollectionContainer)serializer.Deserialize(new JsonTextReader(reader));
            }
            FormattedValueCollection deserializedFormattedValueCollection = (FormattedValueCollection)deserializedFormattedValueCollectionContainer.FormattedValueCollection;


            Assert.Equal(formattedValueCollectionContainer.GetType(), deserializedFormattedValueCollectionContainer.GetType());
            Assert.Equal(formattedValueCollection.Count, deserializedFormattedValueCollection.Count);
            Assert.Equal(formattedValueCollection.Keys.First(), deserializedFormattedValueCollection.Keys.First());
            Assert.Equal(formattedValueCollection.Values.First(), deserializedFormattedValueCollection.Values.First());
        }
        public void FormattedValueCollectionCanBeSerializedAndDeserializedWithoutSpecifyingType()
        {
            FormattedValueCollection formattedValueCollection = new FormattedValueCollection();

            formattedValueCollection.Add("Test", "test");

            JsonSerializer serializer = new JsonSerializer();

            serializer.TypeNameHandling = TypeNameHandling.Objects;
            serializer.ContractResolver = new XrmContractResolver();
            MemoryStream memoryStream = new MemoryStream(new byte[9000], true);

            using (StreamWriter writer = new StreamWriter(memoryStream))
            {
                serializer.Serialize(new JsonTextWriter(writer), formattedValueCollection);
            }

            FormattedValueCollection deserializedFormattedValueCollection;

            memoryStream = new MemoryStream(memoryStream.ToArray());
            using (StreamReader reader = new StreamReader(memoryStream))
            {
                deserializedFormattedValueCollection = (FormattedValueCollection)serializer.Deserialize(new JsonTextReader(reader));
            }

            Assert.Equal(formattedValueCollection.GetType(), deserializedFormattedValueCollection.GetType());
            Assert.Equal(formattedValueCollection.Count, deserializedFormattedValueCollection.Count);
            Assert.Equal(formattedValueCollection.Keys.First(), deserializedFormattedValueCollection.Keys.First());
            Assert.Equal(formattedValueCollection.Values.First(), deserializedFormattedValueCollection.Values.First());
        }
        public void SetValue(object target, object value)
        {
            FormattedValueCollection formattedValueCollection   = (FormattedValueCollection)target;
            IEnumerable <KeyValuePair <string, string> > values = (IEnumerable <KeyValuePair <string, string> >)value;

            foreach (var item in values)
            {
                formattedValueCollection.Add(item);
            }
        }
Beispiel #8
0
        public void Test_Conversion_OptionSetValue_ToXml()
        {
            var fake = new XrmFakedContext();

            fake.ProxyTypesAssembly = typeof(Crm.Contact).Assembly;
            var executor        = new ExecuteFetchRequestExecutor();
            var formattedValues = new FormattedValueCollection();

            formattedValues.Add("new_contact", "Test");
            var element = executor.AttributeValueToFetchResult(new KeyValuePair <string, object>("new_contact", new OptionSetValue(1)), formattedValues, fake);

            Assert.NotNull(element);
            Assert.Equal(@"<new_contact name=""Test"" formattedvalue=""1"">1</new_contact>", element.ToString());
        }
Beispiel #9
0
        public void When_an_entity_is_returned_with_link_entity_and_specific_columns_formatted_values_are_also_cloned2()
        {
            var context = new XrmFakedContext();
            var service = context.GetFakedOrganizationService();

            var contact = new Contact()
            {
                Id = Guid.NewGuid()
            };

            contact["statecode"] = ContactState.Inactive;
            var contactFormattedValues = new FormattedValueCollection();

            contactFormattedValues.Add("statecode", "Inactive");

            contact.Inject("FormattedValues", contactFormattedValues);

            var account = new Account()
            {
                Id = Guid.NewGuid(),
                PrimaryContactId = contact.ToEntityReference()
            };

            account["statecode"] = AccountState.Active;

            var accountFormattedValues = new FormattedValueCollection();

            accountFormattedValues.Add("statecode", "Active");

            account.Inject("FormattedValues", accountFormattedValues);

            context.Initialize(new List <Entity>()
            {
                account,
                contact
            });

            var query = new QueryExpression("account");

            query.Criteria.AddCondition("accountid", ConditionOperator.Equal, account.Id);
            var linkedContact = query.AddLink("contact", "primarycontactid", "contactid");

            linkedContact.Columns.AddColumns("statecode");

            var a = service.RetrieveMultiple(query).Entities.FirstOrDefault();

            Assert.True(a.FormattedValues != null);
            Assert.True(a.FormattedValues.Contains("contact1.statecode"));
            Assert.Equal("Inactive", a.FormattedValues["contact1.statecode"]);
        }
Beispiel #10
0
        public static Entity Clone(this Entity e)
        {
            var cloned = new Entity(e.LogicalName);

            cloned.Id          = e.Id;
            cloned.LogicalName = e.LogicalName;

            if (e.FormattedValues != null)
            {
                var formattedValues = new FormattedValueCollection();
                foreach (var key in e.FormattedValues.Keys)
                {
                    formattedValues.Add(key, e.FormattedValues[key]);
                }

                cloned.Inject("FormattedValues", formattedValues);
            }

            foreach (var attKey in e.Attributes.Keys)
            {
                cloned[attKey] = e[attKey] != null?CloneAttribute(e[attKey]) : null;
            }
            return(cloned);
        }