Ejemplo n.º 1
0
        private static void MonitorJobProgress(IEnhancedOrgService service, Guid importJobId)
        {
            var       progress = 0;
            ImportJob job      = null;

            do
            {
                Thread.Sleep(5000);

                try
                {
                    job = service.Retrieve("importjob", importJobId,
                                           new ColumnSet(ImportJob.Fields.Progress, ImportJob.Fields.CompletedOn))
                          .ToEntity <ImportJob>();

                    var currentProgress = (int?)job.Progress ?? 0;

                    if (currentProgress - progress > 5)
                    {
                        log.Log($"... imported {progress = currentProgress}% ...");
                    }
                }
                catch
                {
                    // ignored
                }
            }while (job?.CompletedOn == null);
        }
Ejemplo n.º 2
0
        private static bool IsSolutionUpdated(string solutionSolutionName, string solutionVersion,
                                              IEnhancedOrgService service)
        {
            solutionSolutionName.RequireNotEmpty(nameof(solutionSolutionName));
            solutionVersion.RequireNotEmpty(nameof(solutionVersion));
            service.Require(nameof(service));

            var versionString = RetrieveSolutionVersion(solutionSolutionName, service);

            if (string.IsNullOrWhiteSpace(versionString))
            {
                return(true);
            }

            var existingVersion = new Version(versionString);
            var givenVersion    = new Version(solutionVersion);
            var isUpdated       = givenVersion > existingVersion;

            if (isUpdated)
            {
                log.Log("Solution updated!");
            }

            return(isUpdated);
        }
Ejemplo n.º 3
0
 public CrmImporter(IEnhancedOrgService service, CrmLog log, MigrationMetadataHelper metadataHelper)
 {
     this.service        = service;
     context             = new OrganizationServiceContext(service);
     this.log            = log;
     this.metadataHelper = metadataHelper;
 }
Ejemplo n.º 4
0
        private void CheckContext(bool noCache = false)
        {
            ShowBusy("Checking context ...");

            var connectionString = settings.GetOrganizationCrmConnectionString();

            UpdateStatus($"Connection string: '{Regex.Replace(connectionString, @"Password\s*?=.*?(?:;{0,1}$|;)", "Password=********;")}'.", true);
            ShowBusy("Connecting to CRM ...");
            var connection = ConnectionHelper.GetConnection(connectionString, noCache);

            assemblyRegistration.Context
                = context = new XrmServiceContext(connection)
                {
                MergeOption = MergeOption.PreserveChanges
                };
            assemblyRegistration.Service = service = connection;
        }
        public void ReleaseService(IEnhancedOrgService enhancedService)
        {
            lock (crmServicesQueue)
            {
                if (enhancedService is EnhancedOrgServiceBase enhancedOrgServiceBase)
                {
                    var releasedServices = enhancedOrgServiceBase.ClearServicesQueue();

                    foreach (var service in releasedServices)
                    {
                        crmServicesQueue.Enqueue(service);
                    }
                }
            }

            if (enhancedService is TServiceInterface thisService)
            {
                servicesQueue.Enqueue(thisService);
            }
        }
Ejemplo n.º 6
0
        private static string RetrieveSolutionVersion(string solutionName, IEnhancedOrgService service)
        {
            solutionName.RequireNotEmpty(nameof(solutionName));
            service.Require(nameof(service));

            var query =
                new QueryExpression
            {
                EntityName = Solution.EntityLogicalName,
                ColumnSet  = new ColumnSet(Solution.Fields.Version),
                Criteria   = new FilterExpression()
            };

            query.Criteria.AddCondition(Solution.Fields.Name, ConditionOperator.Equal, solutionName);

            log.Log($"Retrieving solution version for solution '{solutionName}'...");
            var solution = service.RetrieveMultiple(query).Entities.FirstOrDefault()?.ToEntity <Solution>();

            log.Log($"Version: {solution?.Version}.");

            return(solution?.Version);
        }
Ejemplo n.º 7
0
        private static ExportedSolution RetrieveSolution(SolutionConfig solutionConfig,
                                                         IEnhancedOrgService service)
        {
            solutionConfig.Require(nameof(solutionConfig));
            service.Require(nameof(service));

            var version = RetrieveSolutionVersion(solutionConfig.SolutionName, service);

            if (string.IsNullOrWhiteSpace(version))
            {
                throw new NotFoundException($"Couldn't retrieve solution version of solution"
                                            + $" '{solutionConfig.SolutionName}'.");
            }

            var request =
                new ExportSolutionRequest
            {
                Managed      = solutionConfig.IsManaged,
                SolutionName = solutionConfig.SolutionName
            };

            log.Log($"Exporting solution '{solutionConfig.SolutionName}'...");
            var response = (ExportSolutionResponse)service.Execute(request);

            log.Log($"Exported!");

            var exportXml = response.ExportSolutionFile;

            return(new ExportedSolution
            {
                SolutionName = solutionConfig.SolutionName,
                Version = version,
                IsManaged = solutionConfig.IsManaged,
                Data = exportXml
            });
        }
Ejemplo n.º 8
0
        private static bool ImportSolution(ExportedSolution solution, IEnhancedOrgService service)
        {
            solution.Require(nameof(solution));
            service.Require(nameof(service));

            var importJobId = Guid.NewGuid();

            var request =
                new ExecuteAsyncRequest
            {
                Request =
                    new ImportSolutionRequest
                {
                    CustomizationFile = solution.Data,
                    ConvertToManaged  = solution.IsManaged,
                    OverwriteUnmanagedCustomizations = false,
                    PublishWorkflows = true,
                    SkipProductUpdateDependencies = true,
                    ImportJobId = importJobId
                }
            };

            log.Log($"Importing solution '{solution.SolutionName}' ...");

            service.Execute(request);

            MonitorJobProgress(service, importJobId);

            var job = service.Retrieve("importjob", importJobId,
                                       new ColumnSet(ImportJob.Fields.Progress, ImportJob.Fields.Data))
                      .ToEntity <ImportJob>();

            var importXmlLog = job.GetAttributeValue <string>("data");

            if (importXmlLog.IsNotEmpty())
            {
                var isFailed = ProcessErrorXml(importXmlLog);

                if (isFailed)
                {
                    return(false);
                }
            }

            log.Log($"Imported!");
            log.Log("Publishing customisations ...");

            for (var i = 0; i < 3; i++)
            {
                Thread.Sleep(5000);

                try
                {
                    service.Execute(new PublishAllXmlRequest());
                    log.Log("Finished publishing customisations.");
                    break;
                }
                catch (Exception e)
                {
                    log.Log(e);

                    if (i < 2)
                    {
                        log.LogWarning("Retrying publish ...");
                    }
                }
            }

            return(true);
        }
Ejemplo n.º 9
0
 public ApiControllerBase(IEnhancedOrgService service, CrmLog log)
 {
     this.service = service;
     this.log     = log;
 }
Ejemplo n.º 10
0
 public ImportController(IEnhancedOrgService service, CrmLog log)
 {
     this.service = service;
     this.log     = log;
     crmImporter  = new CrmImporter(service, log, new MigrationMetadataHelper(service, log));
 }
Ejemplo n.º 11
0
 public EntitiesController(IEnhancedOrgService service, CrmLog log)
     : base(service, log)
 {
     migrationMetadataHelper = new MigrationMetadataHelper(service, log);
 }
 public MigrationMetadataHelper(IEnhancedOrgService service, CrmLog log)
 {
     this.service = service;
     this.log     = log;
 }
 public CrmExporter(IEnhancedOrgService service, CrmLog log, MigrationMetadataHelper metadataHelper)
 {
     this.service        = service;
     this.log            = log;
     this.metadataHelper = metadataHelper;
 }