public IEnumerable <SolutionImportResult> ImportSolutions(IEnumerable <string> solutionFiles, LogController controller, XrmRecordService xrmRecordService) { var solutionFilesDictionary = new Dictionary <string, byte[]>(); foreach (var item in solutionFiles) { solutionFilesDictionary.Add(new FileInfo(item).Name, File.ReadAllBytes(item)); } var solutionImportService = new SolutionImportService(xrmRecordService); return(solutionImportService.ImportSolutions(solutionFilesDictionary, controller)); }
private void DeploySolution(DeploySolutionRequest request, LogController controller, DeploySolutionResponse response) { var tasksDone = 0; var totalTasks = 4; var sourceXrmRecordService = new XrmRecordService(request.SourceConnection, ConnectionFactory); var service = sourceXrmRecordService.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 }); } tasksDone++; 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); tasksDone++; controller.UpdateProgress(tasksDone, totalTasks, "Exporting Solution " + request.Solution.Name); var targetXrmRecordService = new XrmRecordService(request.TargetConnection, ConnectionFactory); var importSolutionService = new SolutionImportService(targetXrmRecordService); var importResponse = importSolutionService.ImportSolutions(new Dictionary <string, byte[]> { { uniqueName, exportResponse.ExportSolutionFile } }, controller); response.AddResponseItems(importResponse.Select(i => new DeploySolutionResponseItem(i)).ToArray()); response.ConnectionDeployedInto = request.TargetConnection; 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 }); } response.Message = $"The Solution Has Been Deployed Into {request.TargetConnection}"; }