public override void ExecuteExtention(MigrateRecordsRequest request, MigrateRecordsResponse response,
                                              ServiceRequestController controller)
        {
            var exportService = new ExportXmlService(new XrmRecordService(request.SourceConnection));

            var exportedEntities = new List <Entity>();

            exportService.ProcessExport(request.RecordTypesToMigrate, request.IncludeNotes, request.IncludeNNRelationshipsBetweenEntities, controller.Controller
                                        , (entity) => exportedEntities.Add(entity)
                                        , (entity) => exportedEntities.Add(entity));

            var removeDuplicates = new List <Entity>();

            foreach (var entity in exportedEntities)
            {
                if (!removeDuplicates.Any(e => e.Id == entity.Id && e.LogicalName == entity.LogicalName))
                {
                    removeDuplicates.Add(entity);
                }
            }

            var importService      = new DataImportService(new XrmRecordService(request.TargetConnection));
            var matchOption        = request.MatchByName ? DataImportService.MatchOption.PrimaryKeyThenName : DataImportService.MatchOption.PrimaryKeyOnly;
            var dataImportResponse = importService.DoImport(removeDuplicates, controller, request.MaskEmails, matchOption: matchOption, includeOwner: request.IncludeOwner);

            response.ConnectionMigratedInto = request.TargetConnection;
            response.LoadDataImport(dataImportResponse);
            response.Message = "The Record Migration Has Completed";
        }
        public void DeploymentImportXmlMultipleFilesForSameRecordTest()
        {
            var type = Entities.jmcg_testentity;

            PrepareTests();
            var workFolder = ClearFilesAndData(type);

            var recordName1 = CreateTestRecord(TestEntityType, new Dictionary <string, object>
            {
                { Fields.jmcg_testentity_.jmcg_name, "TestName1" }
            });
            var recordName2 = CreateTestRecord(TestEntityType, new Dictionary <string, object>
            {
                { Fields.jmcg_testentity_.jmcg_name, "TestName2" }
            });

            var exportService = new ExportXmlService(XrmRecordService);
            var exportRequest = new ExportXmlRequest
            {
                Folder = new Folder(workFolder),
                RecordTypesToExport = new[] { new ExportRecordType()
                                              {
                                                  RecordType = new RecordType(TestEntityType, TestEntityType)
                                              } }
            };
            var exportResponse = exportService.Execute(exportRequest, new ServiceRequestController(Controller));

            Assert.IsTrue(exportResponse.Success);

            recordName1.SetField(Fields.jmcg_testentity_.jmcg_name, "TestName1 - Updated!");
            recordName1    = UpdateFieldsAndRetreive(recordName1, Fields.jmcg_testentity_.jmcg_name);
            exportResponse = exportService.Execute(exportRequest, new ServiceRequestController(Controller));
            Assert.IsTrue(exportResponse.Success);

            Assert.AreEqual(3, FileUtility.GetFiles(workFolder).Count());

            var app = CreateAndLoadTestApplication <ImportXmlModule>();

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

            var dialog         = app.NavigateToDialog <ImportXmlModule, ImportXmlDialog>();
            var entryViewmodel = app.GetSubObjectEntryViewModel(dialog);

            //select the excel file with the errors and submit form
            app.EnterAndSaveObject(importRequest, entryViewmodel);

            //check validation results displayed
            var validationResults = dialog.Controller.UiItems.First() as ObjectDisplayViewModel;

            Assert.IsNotNull(validationResults);
            Assert.IsTrue(validationResults.GetObject() is ImportXmlValidationDialog.DuplicateImportXmlRecords);

            Assert.AreEqual(2, ((ImportXmlValidationDialog.DuplicateImportXmlRecords)validationResults.GetObject()).Duplicates.Count());
        }
        public void DeploymentImportXmlMaskEmailsTest()
        {
            PrepareTests();
            var workFolder = ClearFilesAndData();

            DeleteAll(Entities.account);

            var entity = CreateAccount();

            Assert.IsFalse(entity.GetStringField(Fields.account_.emailaddress1).Contains("_AT_"));

            var accountsExport = new ExportRecordType()
            {
                Type       = ExportType.AllRecords,
                RecordType = new RecordType(Entities.account, Entities.account)
            };

            var exportRequest = new ExportXmlRequest
            {
                Folder = new Folder(workFolder),
                RecordTypesToExport = new[] { accountsExport }
            };
            var exportService   = new ExportXmlService(XrmRecordService);
            var ecxportResponse = exportService.Execute(exportRequest, new ServiceRequestController(Controller));

            Assert.IsFalse(ecxportResponse.HasError);

            var importRequest = new ImportXmlRequest
            {
                Folder     = new Folder(workFolder),
                MaskEmails = true
            };
            var application     = CreateAndLoadTestApplication <ImportXmlModule>();
            var immportResponse = application.NavigateAndProcessDialog <ImportXmlModule, ImportXmlDialog, ImportXmlResponse>(importRequest);

            Assert.IsFalse(immportResponse.HasError);

            entity = XrmService.GetFirst(Entities.account);
            Assert.IsTrue(entity.GetStringField(Fields.account_.emailaddress1).Contains("_AT_"));

            importRequest = new ImportXmlRequest
            {
                Folder     = new Folder(workFolder),
                MaskEmails = false
            };
            application     = CreateAndLoadTestApplication <ImportXmlModule>();
            immportResponse = application.NavigateAndProcessDialog <ImportXmlModule, ImportXmlDialog, ImportXmlResponse>(importRequest);
            Assert.IsFalse(immportResponse.HasError);

            entity = XrmService.GetFirst(Entities.account);
            Assert.IsFalse(entity.GetStringField(Fields.account_.emailaddress1).Contains("_AT_"));
        }
        public void DeploymentImportXmlCreateMultipleWithSameNameTest()
        {
            var type = Entities.jmcg_testentity;

            PrepareTests();
            var workFolder = ClearFilesAndData(type);

            var recordName1a = CreateTestRecord(TestEntityType, new Dictionary <string, object>
            {
                { Fields.jmcg_testentity_.jmcg_name, "TestName1" }
            });
            var recordName1b = CreateTestRecord(TestEntityType, new Dictionary <string, object>
            {
                { Fields.jmcg_testentity_.jmcg_name, "TestName1" }
            });
            var recordName2 = CreateTestRecord(TestEntityType, new Dictionary <string, object>
            {
                { Fields.jmcg_testentity_.jmcg_name, "TestName2" }
            });

            var exportService = new ExportXmlService(XrmRecordService);
            var exportRequest = new ExportXmlRequest
            {
                Folder = new Folder(workFolder),
                RecordTypesToExport = new[] { new ExportRecordType()
                                              {
                                                  RecordType = new RecordType(TestEntityType, TestEntityType)
                                              } }
            };
            var exportResponse = exportService.Execute(exportRequest, new ServiceRequestController(Controller));

            Assert.IsTrue(exportResponse.Success);

            DeleteAll(type);

            var application = CreateAndLoadTestApplication <ImportXmlModule>();

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

            var response = application.NavigateAndProcessDialog <ImportXmlModule, ImportXmlDialog, ImportXmlResponse>(importRequest);

            Assert.IsFalse(response.HasError);

            var records = XrmRecordService.RetrieveAll(type, new string[0]);

            Assert.AreEqual(3, records.Count());
        }
        public override void ExecuteExtention(MigrateRecordsRequest request, MigrateRecordsResponse response,
                                              LogController controller)
        {
            var exportService = new ExportXmlService(new XrmRecordService(request.SourceConnection));

            var exportedEntities = new List <Entity>();

            exportService.ProcessExport(request.RecordTypesToMigrate, request.IncludeNotes, request.IncludeNNRelationshipsBetweenEntities, controller
                                        , (entity) => exportedEntities.Add(entity)
                                        , (entity) => exportedEntities.Add(entity));

            var importService = new ImportXmlService(new XrmRecordService(request.TargetConnection));

            importService.DoImport(exportedEntities, controller, request.MaskEmails);
        }
        public void DeploymentImportXmlMultipleTest()
        {
            PrepareTests();
            var types      = new[] { Entities.jmcg_testentitytwo, Entities.jmcg_testentitythree, Entities.jmcg_testentity };
            var workFolder = ClearFilesAndData(types);

            var importService = new ImportXmlService(XrmRecordService);

            var createRecords = new List <Entity>();

            foreach (var type in types)
            {
                createRecords.Add(CreateTestRecord(type, importService));
            }

            var exportService = new ExportXmlService(XrmRecordService);
            var exportRequest = new ExportXmlRequest
            {
                Folder = new Folder(workFolder),
                RecordTypesToExport = types.Select(t => new ExportRecordType()
                {
                    RecordType = new RecordType(t, t)
                })
            };
            var response = exportService.Execute(exportRequest, new ServiceRequestController(Controller));

            Assert.IsFalse(response.HasError);

            foreach (var type in types)
            {
                DeleteAll(type);
            }

            var application = CreateAndLoadTestApplication <ImportXmlModule>();

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

            var importResponse = application.NavigateAndProcessDialog <ImportXmlModule, ImportXmlDialog, ImportXmlResponse>(importRequest);

            Assert.IsFalse(importResponse.HasError);
        }
        public void DeploymentImportXmlKnowledgeArticleTest()
        {
            PrepareTests();

            var type = "knowledgearticle";

            if (XrmRecordService.RecordTypeExists(type))
            {
                DeleteAll(type);

                var workFolder = ClearFilesAndData();

                //create or get a knowledge article
                var knowledgeArticle = XrmService.GetFirst(type, "articlepublicnumber", PopulateStringValue);
                if (knowledgeArticle == null)
                {
                    knowledgeArticle = CreateRecordAllFieldsPopulated("knowledgearticle");
                }

                //export to xml
                var export = new ExportRecordType()
                {
                    Type       = ExportType.AllRecords,
                    RecordType = new RecordType(type, type)
                };

                var exportRequest = new ExportXmlRequest
                {
                    Folder = new Folder(workFolder),
                    RecordTypesToExport = new[] { export }
                };
                var exportService   = new ExportXmlService(XrmRecordService);
                var ecxportResponse = exportService.Execute(exportRequest, new ServiceRequestController(Controller));
                Assert.IsFalse(ecxportResponse.HasError);

                //okay we will delete then create one with the same article number
                XrmService.Delete(knowledgeArticle);
                knowledgeArticle = CreateRecordAllFieldsPopulated("knowledgearticle");

                var kaCount = XrmService.RetrieveAllEntityType(type).Count();

                //import should match them
                var importRequest = new ImportXmlRequest
                {
                    Folder     = new Folder(workFolder),
                    MaskEmails = true
                };
                var application     = CreateAndLoadTestApplication <ImportXmlModule>();
                var immportResponse = application.NavigateAndProcessDialog <ImportXmlModule, ImportXmlDialog, ImportXmlResponse>(importRequest);
                Assert.IsFalse(immportResponse.HasError);
                Assert.AreEqual(kaCount, XrmService.RetrieveAllEntityType(type).Count());

                //now lets just verify for create (delete it prioor to import)
                XrmService.Delete(knowledgeArticle);
                importRequest = new ImportXmlRequest
                {
                    Folder     = new Folder(workFolder),
                    MaskEmails = true
                };
                application     = CreateAndLoadTestApplication <ImportXmlModule>();
                immportResponse = application.NavigateAndProcessDialog <ImportXmlModule, ImportXmlDialog, ImportXmlResponse>(importRequest);
                Assert.IsFalse(immportResponse.HasError);
                Assert.AreEqual(kaCount, XrmService.RetrieveAllEntityType(type).Count());
            }
        }
        public void DeploymentImportXmlTypesTest()
        {
            var query = new QueryExpression();

            PrepareTests();
            var types      = new[] { Entities.jmcg_testentitytwo, Entities.jmcg_testentitythree, Entities.jmcg_testentity };
            var workFolder = ClearFilesAndData(types);

            var importService = new ImportXmlService(XrmRecordService);

            var t1_1 = CreateTestRecord(Entities.jmcg_testentity, importService);
            var t1_2 = CreateTestRecord(Entities.jmcg_testentity, importService);
            var t1_3 = CreateTestRecord(Entities.jmcg_testentity, importService);

            var t2_1 = CreateTestRecord(Entities.jmcg_testentitytwo, importService);
            var t2_2 = CreateTestRecord(Entities.jmcg_testentitytwo, importService);
            var t2_3 = CreateTestRecord(Entities.jmcg_testentitytwo, importService);

            var t3_1 = CreateTestRecord(Entities.jmcg_testentitythree, importService);
            var t3_2 = CreateTestRecord(Entities.jmcg_testentitythree, importService);
            var t3_3 = CreateTestRecord(Entities.jmcg_testentitythree, importService);

            var t1RequestAll = new ExportRecordType()
            {
                Type       = ExportType.AllRecords,
                RecordType = new RecordType(Entities.jmcg_testentity, Entities.jmcg_testentity)
            };
            var t2RequestFetch = new ExportRecordType()
            {
                Type       = ExportType.FetchXml,
                RecordType = new RecordType(Entities.jmcg_testentitytwo, Entities.jmcg_testentitytwo),
                FetchXml   = @"<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false' count='2' >
                      <entity name='" + Entities.jmcg_testentitytwo + @"'>
                      </entity>
                    </fetch>"
            };
            var t3RequestSpecific = new ExportRecordType()
            {
                Type       = ExportType.SpecificRecords,
                RecordType = new RecordType(Entities.jmcg_testentitythree, Entities.jmcg_testentitythree),
                SpecificRecordsToExport = new[]
                {
                    new LookupSetting()
                    {
                        Record = new Lookup(Entities.jmcg_testentitythree, t3_1.Id.ToString(), "t3_1")
                    },
                    new LookupSetting()
                    {
                        Record = new Lookup(Entities.jmcg_testentitythree, t3_2.Id.ToString(), "t3_2")
                    },
                }
            };

            var exportRequest = new ExportXmlRequest
            {
                Folder = new Folder(workFolder),
                RecordTypesToExport = new[] { t1RequestAll, t2RequestFetch, t3RequestSpecific }
            };
            var exportService  = new ExportXmlService(XrmRecordService);
            var exportResponse = exportService.Execute(exportRequest, new ServiceRequestController(Controller));

            Assert.IsFalse(exportResponse.HasError);

            var entities = importService.LoadEntitiesFromXmlFiles(workFolder);

            Assert.AreEqual(7, entities.Count());

            var importRequest = new ImportXmlRequest
            {
                Folder = new Folder(workFolder)
            };
            var importResponse = importService.Execute(importRequest, new ServiceRequestController(Controller));

            Assert.IsFalse(importResponse.HasError);
        }
        public void DeploymentImportXmlSimpleTest()
        {
            var type = TestEntityType;

            PrepareTests();
            var workFolder = ClearFilesAndData(type);

            var importService = new ImportXmlService(XrmRecordService);

            var fields       = GetFields(type, importService);
            var updateFields = GetUpdateFields(type, importService);

            var record        = CreateTestRecord(type, importService);
            var createdEntity = XrmService.Retrieve(record.LogicalName, record.Id);

            var exportService = new ExportXmlService(XrmRecordService);
            var exportRequest = new ExportXmlRequest
            {
                Folder = new Folder(workFolder),
                RecordTypesToExport = new[] { new ExportRecordType()
                                              {
                                                  RecordType = new RecordType(TestEntityType, TestEntityType)
                                              } }
            };
            var exportResponse = exportService.Execute(exportRequest, new ServiceRequestController(Controller));

            Assert.IsTrue(exportResponse.Success);

            XrmService.Delete(record);

            var application = CreateAndLoadTestApplication <ImportXmlModule>();

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

            var response = application.NavigateAndProcessDialog <ImportXmlModule, ImportXmlDialog, ImportXmlResponse>(importRequest);

            Assert.IsFalse(response.HasError);

            var createdRecord = XrmService.Retrieve(type, createdEntity.Id);

            foreach (var updateField in updateFields)
            {
                Assert.IsTrue(XrmEntity.FieldsEqual(createdEntity.GetField(updateField),
                                                    createdRecord.GetField(updateField)));
            }

            foreach (var field in fields)
            {
                record.SetField(field, CreateNewEntityFieldValue(field, type, record));
            }

            XrmService.Update(record);
            record = XrmService.Retrieve(record.LogicalName, record.Id);

            importRequest = new ImportXmlRequest
            {
                Folder = new Folder(workFolder)
            };

            application = CreateAndLoadTestApplication <ImportXmlModule>();
            response    = application.NavigateAndProcessDialog <ImportXmlModule, ImportXmlDialog, ImportXmlResponse>(importRequest);
            Assert.IsFalse(response.HasError);

            var updatedRecord = XrmService.Retrieve(type, record.Id);

            foreach (var updateField in updateFields)
            {
                Assert.IsTrue(XrmEntity.FieldsEqual(createdEntity.GetField(updateField),
                                                    updatedRecord.GetField(updateField)));
            }
        }
        public void DeploymentImportXmlAssociationsAndNotesTest()
        {
            PrepareTests();
            var types      = new[] { Entities.jmcg_testentity };
            var workFolder = ClearFilesAndData(types);

            var importService = new ImportXmlService(XrmRecordService);

            var createRecords = new List <Entity>();

            foreach (var type in types)
            {
                for (var i = 0; i < 2; i++)
                {
                    createRecords.Add(CreateTestRecord(type, importService));
                }
            }
            //if throws error ensure the test entity allows notes
            XrmService.Associate(Relationships.jmcg_testentity_.jmcg_testentity_jmcg_testentity.Name, Entities.jmcg_testentity, createRecords[0].Id, true, Entities.jmcg_testentity, createRecords[1].Id);
            var aNote = CreateTestRecord(Entities.annotation, new Dictionary <string, object>
            {
                { Fields.annotation_.objectid, createRecords[0].ToEntityReference() },
                { Fields.annotation_.subject, "Test Scripting" },
                { Fields.annotation_.notetext, "Just For Importing Testing" },
            });


            var exportService = new ExportXmlService(XrmRecordService);
            var exportRequest = new ExportXmlRequest
            {
                Folder = new Folder(workFolder),
                RecordTypesToExport = types.Select(t => new ExportRecordType()
                {
                    RecordType = new RecordType(t, t)
                }),
                IncludeNNRelationshipsBetweenEntities = true,
                IncludeNotes = true
            };
            var response = exportService.Execute(exportRequest, new ServiceRequestController(Controller));

            Assert.IsFalse(response.HasError);

            foreach (var type in types)
            {
                DeleteAll(type);
            }

            var application = CreateAndLoadTestApplication <ImportXmlModule>();

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

            var importResponse = application.NavigateAndProcessDialog <ImportXmlModule, ImportXmlDialog, ImportXmlResponse>(importRequest);

            Assert.IsFalse(importResponse.HasError);

            var rMetadata = XrmService.GetRelationshipMetadata(Relationships.jmcg_testentity_.jmcg_testentity_jmcg_testentity.Name);

            foreach (var record in createRecords)
            {
                var loaded = Refresh(record);
                if (createRecords[0].Id == loaded.Id)
                {
                    var notes = XrmService.RetrieveAllAndClauses(Entities.annotation, new[]
                    {
                        new ConditionExpression(Fields.annotation_.objectid, ConditionOperator.Equal, loaded.Id)
                    });
                    Assert.AreEqual(1, notes.Count());
                    var associated = XrmService.GetAssociatedIds(rMetadata.SchemaName, rMetadata.Entity1IntersectAttribute, loaded.Id, rMetadata.Entity2IntersectAttribute);
                    Assert.AreEqual(1, associated.Count());
                    Assert.AreEqual(createRecords[1].Id, associated.First());
                }
            }
        }
        public void DeploymentImportXmlPortalTypeConfigTest()
        {
            PrepareTests();
            var types      = new[] { Entities.jmcg_testentitytwo, Entities.jmcg_testentitythree, Entities.jmcg_testentity };
            var workFolder = ClearFilesAndData(types);

            //okay this script is to verify importing microsoft portal types
            //which aren't so simple as to just match by name
            //as for example webpage have a root page, and language specific page(s)

            //create a web page with an access control rule
            RecreatePortalData();

            var parentWebPage = XrmService.RetrieveAllAndClauses(Entities.adx_webpage, new[]
            {
                new ConditionExpression(Fields.adx_webpage_.adx_rootwebpageid, ConditionOperator.Null)
            }).First();

            //export to xml
            var exportApp     = new ExportXmlService(XrmRecordService);// CreateAndLoadTestApplication<ExportXmlModule>();
            var exportRequest = new ExportXmlRequest
            {
                Folder = new Folder(workFolder),
                IncludeNNRelationshipsBetweenEntities = true,
                RecordTypesToExport = new[]
                {
                    new ExportRecordType()
                    {
                        RecordType = new RecordType(Entities.adx_webrole, Entities.adx_webrole)
                    },
                    new ExportRecordType()
                    {
                        RecordType = new RecordType(Entities.adx_webpage, Entities.adx_webpage)
                    },
                    new ExportRecordType()
                    {
                        RecordType = new RecordType(Entities.adx_websitelanguage, Entities.adx_websitelanguage)
                    },
                    new ExportRecordType()
                    {
                        RecordType = new RecordType(Entities.adx_webpageaccesscontrolrule, Entities.adx_webpageaccesscontrolrule)
                    },
                    new ExportRecordType()
                    {
                        RecordType = new RecordType(Entities.adx_webform, Entities.adx_webform)
                    },
                    new ExportRecordType()
                    {
                        RecordType = new RecordType(Entities.adx_webformstep, Entities.adx_webformstep)
                    },
                    new ExportRecordType()
                    {
                        RecordType = new RecordType(Entities.adx_webformmetadata, Entities.adx_webformmetadata)
                    },
                }
            };

            var exportResponse = exportApp.Execute(exportRequest, new ServiceRequestController(Controller));

            Assert.IsFalse(exportResponse.HasError);

            //lets recreate all the web page data so the ids don't match when importing
            //this will verify it matches them based on the root/unique field configs in XrmTypesConfig
            RecreatePortalData();

            var application   = CreateAndLoadTestApplication <ImportXmlModule>();
            var importRequest = new ImportXmlRequest
            {
                Folder = new Folder(workFolder)
            };

            var importResponse = application.NavigateAndProcessDialog <ImportXmlModule, ImportXmlDialog, ImportXmlResponse>(importRequest);

            Assert.IsFalse(importResponse.HasError);

            VerifyWebPageRecords();

            //lets just do several other things which will verify some other matching logic

            //delete the root page in the import files - this will verify the language specific page
            //will correctly resolve its parent independently
            //despite it having a different id and not being part of the import
            var parentWebPageFile = FileUtility.GetFiles(workFolder).First(f => f.Contains(parentWebPage.Id.ToString().Replace("-", "_")));

            File.Delete(parentWebPageFile);

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

            VerifyWebPageRecords();

            //delete both web pages in the import files - this will verify the web page access contorl rule
            //will correctly resolve its parent independently
            //despite it having a different id and not being part of the import
            var webPageFile = FileUtility.GetFiles(workFolder).Where(f => f.Contains(Entities.adx_webpage + "_"));

            foreach (var file in webPageFile)
            {
                File.Delete(file);
            }

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

            VerifyWebPageRecords();

            //lets do the same but delete the web page access control rule
            //first to verify it also matches the parent when creating
            XrmService.Delete(XrmService.GetFirst(Entities.adx_webpageaccesscontrolrule));
            importResponse = application.NavigateAndProcessDialog <ImportXmlModule, ImportXmlDialog, ImportXmlResponse>(importRequest);
            Assert.IsFalse(importResponse.HasError);

            VerifyWebPageRecords();
        }
        public void DeploymentImportXmlProductsAndPricingTest()
        {
            PrepareTests();

            //created csv files for all the relevant data so lets just hook into that to generate test data
            GenerateProductData();

            //export to xml
            var exportApp     = new ExportXmlService(XrmRecordService);// CreateAndLoadTestApplication<ExportXmlModule>();
            var exportRequest = new ExportXmlRequest
            {
                Folder = new Folder(WorkFolder),
                IncludeNNRelationshipsBetweenEntities = true,
                RecordTypesToExport = new[]
                {
                    new ExportRecordType()
                    {
                        RecordType = new RecordType(Entities.product, Entities.product)
                    },
                    new ExportRecordType()
                    {
                        RecordType = new RecordType(Entities.pricelevel, Entities.pricelevel)
                    },
                    new ExportRecordType()
                    {
                        RecordType = new RecordType(Entities.productpricelevel, Entities.productpricelevel)
                    },
                    new ExportRecordType()
                    {
                        RecordType = new RecordType(Entities.uom, Entities.uom)
                    },
                    new ExportRecordType()
                    {
                        RecordType = new RecordType(Entities.uomschedule, Entities.uomschedule)
                    },
                }
            };
            //verify no errors
            var exportResponse = exportApp.Execute(exportRequest, new ServiceRequestController(Controller));

            Assert.IsFalse(exportResponse.HasError);

            //delete all the data so when we import the xml it is creating new
            DeleteProductData();

            //import the xml
            var application   = CreateAndLoadTestApplication <ImportXmlModule>();
            var importRequest = new ImportXmlRequest
            {
                Folder = new Folder(WorkFolder)
            };
            //verify no errors
            var importResponse = application.NavigateAndProcessDialog <ImportXmlModule, ImportXmlDialog, ImportXmlResponse>(importRequest);

            Assert.IsFalse(importResponse.HasError);

            //okay lets get the last created price list item
            var query = XrmService.BuildQuery(Entities.productpricelevel, null, null, null);

            query.Orders.Add(new OrderExpression(Fields.productpricelevel_.createdon, OrderType.Descending));
            var latestPriceListItem = XrmService.RetrieveFirst(query);
            //verify it has a price
            var initialPrice = latestPriceListItem.GetMoneyValue(Fields.productpricelevel_.amount);

            Assert.IsTrue(initialPrice > 0);
            //now lets set it something else so we can verify it gets updated after the second run
            latestPriceListItem.SetMoneyField(Fields.productpricelevel_.amount, initialPrice.Value + 1);
            latestPriceListItem = UpdateFieldsAndRetreive(latestPriceListItem, Fields.productpricelevel_.amount);

            //rerun the import
            application   = CreateAndLoadTestApplication <ImportXmlModule>();
            importRequest = new ImportXmlRequest
            {
                Folder = new Folder(WorkFolder)
            };

            importResponse = application.NavigateAndProcessDialog <ImportXmlModule, ImportXmlDialog, ImportXmlResponse>(importRequest);
            Assert.IsFalse(importResponse.HasError);
            //verify the price list item we updated is changed
            latestPriceListItem = Refresh(latestPriceListItem);
            Assert.AreEqual(initialPrice, latestPriceListItem.GetMoneyValue(Fields.productpricelevel_.amount));
        }
Exemplo n.º 13
0
        private void CreateDeploymentPackage(CreatePackageRequest request, ServiceRequestController controller, CreatePackageResponse response)
        {
            var folderPath = request.FolderPath.FolderPath;

            var tasksDone  = 0;
            var totalTasks = 4;

            var xrmRecordService = XrmRecordService;
            var service          = xrmRecordService.XrmService;
            var solution         = service.Retrieve(Entities.solution, new Guid(request.Solution.Id));

            tasksDone++;
            if (solution.GetStringField(Fields.solution_.version) != request.ThisReleaseVersion)
            {
                controller.UpdateProgress(tasksDone, totalTasks, "Setting Release Version " + request.ThisReleaseVersion);
                solution.SetField(Fields.solution_.version, request.ThisReleaseVersion);
                service.Update(solution, new[] { Fields.solution_.version });
            }
            controller.UpdateProgress(tasksDone, totalTasks, "Exporting Solution " + request.Solution.Name);

            var uniqueName = (string)solution.GetStringField(Fields.solution_.uniquename);
            var req        = new ExportSolutionRequest();

            req.Managed      = request.ExportAsManaged;
            req.SolutionName = uniqueName;

            var exportResponse = (ExportSolutionResponse)service.Execute(req);

            var version     = solution.GetStringField(Fields.solution_.version);
            var versionText = version == null ? null : version.Replace(".", "_");
            var fileName    = string.Format("{0}_{1}{2}.zip", uniqueName, versionText,
                                            request.ExportAsManaged ? "_managed" : null);

            FileUtility.WriteToFile(folderPath, fileName, exportResponse.ExportSolutionFile);
            ++tasksDone;
            if (request.DataToInclude != null && request.DataToInclude.Any())
            {
                controller.UpdateProgress(tasksDone, totalTasks, "Exporting Data " + request.Solution.Name);
                var dataExportService = new ExportXmlService(xrmRecordService);
                dataExportService.ExportXml(request.DataToInclude,
                                            new Folder(GetDataExportFolder(folderPath)), request.IncludeNotes,
                                            request.IncludeNNRelationshipsBetweenEntities, controller.Controller);
            }
            tasksDone++;
            if (solution.GetStringField(Fields.solution_.version) != request.SetVersionPostRelease)
            {
                controller.UpdateProgress(tasksDone, totalTasks, "Setting New Solution Version " + request.SetVersionPostRelease);
                solution.SetField(Fields.solution_.version, request.SetVersionPostRelease);
                service.Update(solution, new[] { Fields.solution_.version });
            }
            if (request.DeployPackageInto != null)
            {
                if (response.HasError)
                {
                    throw new Exception("Package Deployment Aborted Due To Errors During Creating");
                }
                else
                {
                    var deployRequest = new DeployPackageRequest
                    {
                        FolderContainingPackage = request.FolderPath,
                        Connection = request.DeployPackageInto
                    };
                    var deployService         = new DeployPackageService();
                    var deployPackageResponse = new DeployPackageResponse();
                    deployService.ExecuteExtention(deployRequest, deployPackageResponse, controller);
                    response.LoadDeployPackageResponse(deployPackageResponse);
                }
            }
        }