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); }
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(); }