private bool DoImportSolution(SolutionBlockImport import, string filename, Version version)
        {
            container.StartSection(MethodBase.GetCurrentMethod().Name);
            var       result       = false;
            var       activatecode = import.ActivateServersideCode;
            var       overwrite    = import.OverwriteCustomizations;
            Exception ex           = null;

            SendLine(container, "Importing solution: {0} Version: {1}", filename, version);
            var fileBytes = File.ReadAllBytes(filename);
            var impSolReq = new ImportSolutionRequest()
            {
                CustomizationFile = fileBytes,
                OverwriteUnmanagedCustomizations = overwrite,
                PublishWorkflows = activatecode,
                ImportJobId      = Guid.NewGuid()
            };

            if (/*crmsvc is CrmServiceProxy && */ container.GetCrmVersion().Major >= 6) //((CrmServiceProxy)crmsvc).CrmVersion.Major >= 6)
            {                                                                           // CRM 2013 or later, import async
                result = DoImportSolutionAsync(impSolReq, ref ex);
            }
            else
            {   // Pre CRM 2013, import sync
                result = DoImportSolutionSync(impSolReq, ref ex);
            }
            if (!result && stoponerror)
            {
                if (ex != null)
                {
                    throw ex;
                }
                else
                {
                    throw new Exception("Solution import failed");
                }
            }
            container.Log($"Returning: {result}");
            container.EndSection();
            return(result);
        }
Beispiel #2
0
        private SolutionImportConditions CheckIfImportRequired(SolutionBlockImport import, string name, Version thisversion)
        {
            log.StartSection("CheckIfImportRequired");
            var result         = SolutionImportConditions.Create;
            var overwritesame  = import.OverwriteSameVersion;
            var overwritenewer = import.OverwriteNewerVersion;
            var cSolutions     = GetExistingSolutions();

            foreach (var cdSolution in cSolutions)
            {
                if (cdSolution.Property("uniquename", "") == name)
                {   // Now we have found the same solution in target environment
                    result = SolutionImportConditions.Update;
                    var existingversion = new Version(cdSolution.Property("version", "1.0.0.0"));
                    log.Log("Existing solution has version: {0}", existingversion);
                    var comparison = thisversion.CompareTo(existingversion);
                    if (!overwritesame && comparison == 0)
                    {
                        result = SolutionImportConditions.Skip;
                        SendLine("Solution {0} {1} already exists in target", name, thisversion);
                    }
                    else if (!overwritenewer && comparison < 0)
                    {
                        result = SolutionImportConditions.Skip;
                        SendLine("Existing solution {0} {1} is newer than {2}", name, existingversion, thisversion);
                    }
                    else if (existingversion == thisversion)
                    {
                        SendLine("Updating version {0}", thisversion);
                    }
                    else
                    {
                        SendLine("Replacing version {0} with {1}", existingversion, thisversion);
                    }
                    break;
                }
            }
            log.Log("Import Condition: {0}", result);
            log.EndSection();
            return(result);
        }
        private void ValidatePreReqs(IExecutionContainer container, SolutionBlockImport import, Version thisversion)
        {
            if (import.PreRequisites == null)
            {
                container.Log("No prereqs for solution import");
                return;
            }
            container.StartSection("ValidatePreReqs");
            var cSolutions = GetExistingSolutions(container);

            foreach (var prereq in import.PreRequisites)
            {
                var valid    = false;
                var name     = prereq.Name;
                var comparer = prereq.Comparer;
                var version  = new Version();
                container.Log("Prereq: {0} {1} {2}", name, comparer, version);

                if (comparer == SolutionVersionComparers.eqthis || comparer == SolutionVersionComparers.gethis)
                {
                    version  = thisversion;
                    comparer = comparer == SolutionVersionComparers.eqthis ? SolutionVersionComparers.eq : comparer == SolutionVersionComparers.gethis ? SolutionVersionComparers.ge : comparer;
                }
                else if (comparer != SolutionVersionComparers.any)
                {
                    version = new Version(prereq.Version.Replace('*', '0'));
                }

                foreach (var cdSolution in cSolutions.Entities)
                {
                    if (cdSolution.GetAttribute("uniquename", "") == name)
                    {
                        container.Log("Found matching solution");
                        switch (comparer)
                        {
                        case SolutionVersionComparers.any:
                            valid = true;
                            break;

                        case SolutionVersionComparers.eq:
                            valid = new Version(cdSolution.GetAttribute("version", "1.0.0.0")).Equals(version);
                            break;

                        case SolutionVersionComparers.ge:
                            valid = new Version(cdSolution.GetAttribute("version", "<undefined>")) >= version;
                            break;

                        default:
                            throw new ArgumentOutOfRangeException("Comparer", comparer, "Invalid comparer value");
                        }
                    }
                    if (valid)
                    {
                        break;
                    }
                }
                if (valid)
                {
                    SendLine(container, "Prerequisite {0} {1} {2} is satisfied", name, comparer, version);
                }
                else
                {
                    SendLine(container, "Prerequisite {0} {1} {2} is NOT satisfied", name, comparer, version);
                    throw new Exception("Prerequisite NOT satisfied (" + name + " " + comparer + " " + version + ")");
                }
            }
            container.EndSection();
        }