Пример #1
0
        public Entity CreateRecordAllFieldsPopulated(string type)
        {
            var entity          = new Entity(type);
            var fieldsToExlcude = new[] { "traversedpath", "parentarticlecontentid", "rootarticleid", "previousarticlecontentid" };
            var fields          = XrmService.GetFields(type)
                                  .Where(f => !fieldsToExlcude.Contains(f));

            foreach (var field in fields)
            {
                if (XrmService.IsWritable(field, type))
                {
                    var fieldType = XrmService.GetFieldType(field, type);
                    switch (fieldType)
                    {
                    case AttributeTypeCode.BigInt:
                    {
                        entity.SetField(field, 1);
                        break;
                    }

                    case AttributeTypeCode.Boolean:
                    {
                        entity.SetField(field, true);
                        break;
                    }

                    case AttributeTypeCode.CalendarRules:
                    {
                        break;
                    }

                    case AttributeTypeCode.Customer:
                    {
                        entity.SetField(field, CreateAccount());
                        break;
                    }

                    case AttributeTypeCode.DateTime:
                    {
                        var now            = DateTime.UtcNow;
                        var noMilliSeconds = new DateTime(now.Year, now.Month, now.Day, now.Hour, now.Minute, now.Second,
                                                          DateTimeKind.Utc);
                        entity.SetField(field, noMilliSeconds);
                        break;
                    }

                    case AttributeTypeCode.Decimal:
                    {
                        entity.SetField(field, (decimal)1);
                        break;
                    }

                    case AttributeTypeCode.Double:
                    {
                        entity.SetField(field, (double)1);
                        break;
                    }

                    case AttributeTypeCode.EntityName:
                    {
                        break;
                    }

                    case AttributeTypeCode.Integer:
                    {
                        var options = XrmService.GetPicklistKeyValues(type, field);
                        if (options != null && options.Any())
                        {
                            entity.SetField(field, options.First().Key);
                        }
                        else
                        {
                            entity.SetField(field, 1);
                        }
                        break;
                    }

                    case AttributeTypeCode.Lookup:
                    {
                        var target         = XrmService.GetLookupTargetEntity(field, type);
                        var typesToExlcude = new[]
                        {
                            "equipment", "transactioncurrency", "pricelevel", "service", "systemuser", "incident",
                            "campaign", "territory", "sla", "bookableresource", "msdyn_taxcode", "languagelocale"
                        };
                        if (!typesToExlcude.Contains(target))
                        {
                            entity.SetField(field, CreateTestRecord(target).ToEntityReference());
                        }
                        break;
                    }

                    case AttributeTypeCode.ManagedProperty:
                    {
                        break;
                    }

                    case AttributeTypeCode.Memo:
                    {
                        entity.SetField(field, "blah blah blah \n blah");
                        break;
                    }

                    case AttributeTypeCode.Money:
                    {
                        entity.SetField(field, new Money(1));
                        break;
                    }

                    case AttributeTypeCode.Owner:
                    {
                        entity.SetField(field, new EntityReference("systemuser", CurrentUserId));
                        break;
                    }

                    case AttributeTypeCode.PartyList:
                    {
                        entity.AddActivityParty(field, "systemuser", CurrentUserId);
                        break;
                    }

                    case AttributeTypeCode.Picklist:
                    {
                        entity.SetField(field, new OptionSetValue(XrmService.GetOptions(field, type).First().Key));
                        break;
                    }

                    case AttributeTypeCode.State:
                    {
                        break;
                    }

                    case AttributeTypeCode.Status:
                    {
                        break;
                    }

                    case AttributeTypeCode.String:
                    {
                        entity.SetField(field, PopulateStringValue);
                        break;
                    }

                    case AttributeTypeCode.Uniqueidentifier:
                    {
                        break;
                    }

                    case AttributeTypeCode.Virtual:
                    {
                        break;
                    }
                    }
                }
            }
            return(CreateAndRetrieve(entity));
        }
Пример #2
0
 public static void AddToParty(this Entity entity, string type, Guid id)
 {
     entity.AddActivityParty("to", type, id);
 }
Пример #3
0
        public void PopulateField(string field, Entity entity)
        {
            var type      = entity.LogicalName;
            var fieldType = XrmService.GetFieldType(field, type);

            switch (fieldType)
            {
            case AttributeTypeCode.BigInt:
            {
                entity.SetField(field, 1);
                break;
            }

            case AttributeTypeCode.Boolean:
            {
                entity.SetField(field, true);
                break;
            }

            case AttributeTypeCode.CalendarRules:
            {
                break;
            }

            case AttributeTypeCode.Customer:
            {
                entity.SetField(field, CreateAccount());
                break;
            }

            case AttributeTypeCode.DateTime:
            {
                var now            = DateTime.UtcNow;
                var noMilliSeconds = new DateTime(now.Year, now.Month, now.Day, now.Hour, now.Minute, now.Second,
                                                  DateTimeKind.Utc);
                entity.SetField(field, noMilliSeconds);
                break;
            }

            case AttributeTypeCode.Decimal:
            {
                entity.SetField(field, (decimal)1);
                break;
            }

            case AttributeTypeCode.Double:
            {
                entity.SetField(field, (double)1);
                break;
            }

            case AttributeTypeCode.EntityName:
            {
                break;
            }

            case AttributeTypeCode.Integer:
            {
                entity.SetField(field, 1);
                break;
            }

            case AttributeTypeCode.Lookup:
            {
                var target         = XrmService.GetLookupTargetEntity(field, type);
                var typesToExlcude = new[]
                {
                    "equipment", "transactioncurrency", "pricelevel", "service", "systemuser", "incident",
                    "campaign", "territory"
                };
                if (!typesToExlcude.Contains(target))
                {
                    entity.SetField(field, CreateTestRecord(target).ToEntityReference());
                }
                break;
            }

            case AttributeTypeCode.ManagedProperty:
            {
                break;
            }

            case AttributeTypeCode.Memo:
            {
                entity.SetField(field, "blah blah blah \n blah");
                break;
            }

            case AttributeTypeCode.Money:
            {
                entity.SetField(field, new Money(1));
                break;
            }

            case AttributeTypeCode.Owner:
            {
                entity.SetField(field, new EntityReference("systemuser", CurrentUserId));
                break;
            }

            case AttributeTypeCode.PartyList:
            {
                entity.AddActivityParty(field, "systemuser", CurrentUserId);
                break;
            }

            case AttributeTypeCode.Picklist:
            {
                entity.SetField(field, new OptionSetValue(XrmService.GetOptions(field, type).First().Key));
                break;
            }

            case AttributeTypeCode.State:
            {
                break;
            }

            case AttributeTypeCode.Status:
            {
                break;
            }

            case AttributeTypeCode.String:
            {
                entity.SetField(field, "1234");
                break;
            }

            case AttributeTypeCode.Uniqueidentifier:
            {
                break;
            }

            case AttributeTypeCode.Virtual:
            {
                break;
            }
            }
        }
Пример #4
0
 public static void AddFromParty(this Entity entity, string type, Guid id)
 {
     entity.AddActivityParty("from", type, id);
 }
Пример #5
0
        public void DeploymentImportActivityPartiesTest()
        {
            PrepareTests();

            var contact1 = XrmService.GetFirst(Entities.contact, Fields.contact_.fullname, "TESTEMAIL IMPORT 1")
                           ?? CreateTestRecord(Entities.contact, new Dictionary <string, object>
            {
                { Fields.contact_.firstname, "TESTEMAIL" },
                { Fields.contact_.lastname, "IMPORT 1" },
                { Fields.contact_.emailaddress1, "*****@*****.**" }
            });
            var contact2 = XrmService.GetFirst(Entities.contact, Fields.contact_.fullname, "TESTEMAIL IMPORT 2")
                           ?? CreateTestRecord(Entities.contact, new Dictionary <string, object>
            {
                { Fields.contact_.firstname, "TESTEMAIL" },
                { Fields.contact_.lastname, "IMPORT 2" },
                { Fields.contact_.emailaddress1, "*****@*****.**" }
            });
            var account = XrmService.GetFirst(Entities.account, Fields.account_.name, "TESTEMAILIMPORT")
                          ?? CreateTestRecord(Entities.account, new Dictionary <string, object>
            {
                { Fields.account_.name, "TESTEMAILIMPORT" },
                { Fields.account_.emailaddress1, "*****@*****.**" }
            });
            var queue = XrmService.GetFirst(Entities.queue, Fields.queue_.name, "TESTQUEUE")
                        ?? CreateTestRecord(Entities.queue, new Dictionary <string, object>
            {
                { Fields.queue_.name, "TESTQUEUE" },
                { Fields.queue_.emailaddress, "*****@*****.**" }
            });

            var email = new Entity(Entities.email);

            email.SetField(Fields.email_.subject, "Testing Import Email " + DateTime.Now.ToFileTime().ToString());
            email.AddFromParty(queue.LogicalName, queue.Id);
            email.AddToParty(contact1.LogicalName, contact1.Id);
            email.AddToParty(contact2.LogicalName, contact2.Id);
            email.AddToParty(account.LogicalName, account.Id);
            email.AddActivityParty(Fields.email_.to, "*****@*****.**");
            email = CreateAndRetrieve(email);

            XrmService.SetState(email, OptionSets.Email.ActivityStatus.Completed, OptionSets.Email.StatusReason.Sent);

            //okay lets xml export
            var exportXmlApplication = CreateAndLoadTestApplication <ExportXmlModule>();

            var instance = new ExportXmlRequest();

            instance.IncludeNNRelationshipsBetweenEntities = true;
            instance.Folder = new Folder(TestingFolder);
            instance.RecordTypesToExport = new[]
            {
                new ExportRecordType()
                {
                    Type       = ExportType.SpecificRecords,
                    RecordType = new RecordType(Entities.email, Entities.email),
                    SpecificRecordsToExport = new LookupSetting[]
                    {
                        new LookupSetting()
                        {
                            Record = new Lookup(email.LogicalName, email.Id.ToString(), email.GetStringField(Fields.email_.subject))
                        }
                    }
                }
            };

            var exportXmlResponse = exportXmlApplication.NavigateAndProcessDialog <ExportXmlModule, ExportXmlDialog, ExportXmlResponse>(instance);

            Assert.IsFalse(exportXmlResponse.HasError);

            //okay lets delete the email then import it
            XrmService.Delete(email);

            //do an xml import
            var importXmlApplication = CreateAndLoadTestApplication <ImportXmlModule>();

            var importRequest = new ImportXmlRequest
            {
                Folder = new Folder(TestingFolder)
            };

            var importXmlResponse = importXmlApplication.NavigateAndProcessDialog <ImportXmlModule, ImportXmlDialog, ImportXmlResponse>(importRequest);

            Assert.IsFalse(importXmlResponse.HasError);

            Assert.AreEqual(1, importXmlResponse.ImportSummary.Count());
            Assert.IsTrue(importXmlResponse.ImportSummary.All(i => i.Created == 1));
            Assert.IsTrue(importXmlResponse.ImportSummary.All(i => i.Updated == 0));
            Assert.IsTrue(importXmlResponse.ImportSummary.All(i => i.NoChange == 0));
            Assert.IsTrue(importXmlResponse.ImportSummary.All(i => i.Errors == 0));

            var importedEmail = XrmService.Retrieve(email.LogicalName, email.Id);

            Assert.AreEqual(OptionSets.Email.StatusReason.Sent, importedEmail.GetOptionSetValue(Fields.email_.statuscode));
            Assert.IsTrue(importedEmail.GetActivityParties(Fields.email_.from).Count() == 1);
            Assert.IsTrue(importedEmail.GetActivityParties(Fields.email_.from).Count(p => Entities.queue == p.GetLookupType(Fields.activityparty_.partyid)) == 1);
            Assert.IsTrue(importedEmail.GetActivityParties(Fields.email_.to).Count() == 4);
            Assert.IsTrue(importedEmail.GetActivityParties(Fields.email_.to).Count(p => Entities.contact == p.GetLookupType(Fields.activityparty_.partyid)) == 2);
            Assert.IsTrue(importedEmail.GetActivityParties(Fields.email_.to).Count(p => Entities.account == p.GetLookupType(Fields.activityparty_.partyid)) == 1);
            Assert.IsTrue(importedEmail.GetActivityParties(Fields.email_.to).Count(p => null == p.GetField(Fields.activityparty_.partyid) && p.GetStringField(Fields.activityparty_.addressused) == "*****@*****.**") == 1);

            importXmlResponse = importXmlApplication.NavigateAndProcessDialog <ImportXmlModule, ImportXmlDialog, ImportXmlResponse>(importRequest);
            Assert.IsFalse(importXmlResponse.HasError);

            Assert.AreEqual(1, importXmlResponse.ImportSummary.Count());
            Assert.IsTrue(importXmlResponse.ImportSummary.All(i => i.Created == 0));
            Assert.IsTrue(importXmlResponse.ImportSummary.All(i => i.Updated == 0));
            Assert.IsTrue(importXmlResponse.ImportSummary.All(i => i.NoChange == 1));
            Assert.IsTrue(importXmlResponse.ImportSummary.All(i => i.Errors == 0));

            importedEmail = XrmService.Retrieve(email.LogicalName, email.Id);
            XrmService.SetState(importedEmail, OptionSets.Email.ActivityStatus.Open);

            var toParties = importedEmail.GetActivityParties(Fields.email_.to);

            importedEmail.SetField(Fields.email_.to, toParties.Skip(1).ToArray());
            importedEmail = UpdateFieldsAndRetreive(importedEmail, Fields.email_.to);

            importXmlResponse = importXmlApplication.NavigateAndProcessDialog <ImportXmlModule, ImportXmlDialog, ImportXmlResponse>(importRequest);
            Assert.IsFalse(importXmlResponse.HasError);

            Assert.AreEqual(1, importXmlResponse.ImportSummary.Count());
            Assert.IsTrue(importXmlResponse.ImportSummary.All(i => i.Created == 0));
            Assert.IsTrue(importXmlResponse.ImportSummary.All(i => i.Updated == 1));
            Assert.IsTrue(importXmlResponse.ImportSummary.All(i => i.NoChange == 0));
            Assert.IsTrue(importXmlResponse.ImportSummary.All(i => i.Errors == 0));

            importedEmail = XrmService.Retrieve(email.LogicalName, email.Id);

            Assert.IsTrue(importedEmail.GetActivityParties(Fields.email_.from).Count() == 1);
            Assert.IsTrue(importedEmail.GetActivityParties(Fields.email_.from).Count(p => Entities.queue == p.GetLookupType(Fields.activityparty_.partyid)) == 1);
            Assert.IsTrue(importedEmail.GetActivityParties(Fields.email_.to).Count() == 4);
            Assert.IsTrue(importedEmail.GetActivityParties(Fields.email_.to).Count(p => Entities.contact == p.GetLookupType(Fields.activityparty_.partyid)) == 2);
            Assert.IsTrue(importedEmail.GetActivityParties(Fields.email_.to).Count(p => Entities.account == p.GetLookupType(Fields.activityparty_.partyid)) == 1);
            Assert.IsTrue(importedEmail.GetActivityParties(Fields.email_.to).Count(p => null == p.GetField(Fields.activityparty_.partyid) && p.GetStringField(Fields.activityparty_.addressused) == "*****@*****.**") == 1);
        }