Cmdlets/MergeSolution.cs
using Microsoft.Crm.Sdk.Messages;
using Microsoft.Xrm.Sdk; using Microsoft.Xrm.Sdk.Query; using Microsoft.Xrm.Tooling.Connector; using System; using System.Linq; using System.Management.Automation; namespace Xrm.DevOps.Tools.Cmdlets { [Cmdlet(VerbsData.Merge, "Solution")] public class MergeSolution: Cmdlet { [Parameter(Position = 1, Mandatory = true)] public string ConnectionString { get; set; } [Parameter(Position = 2, Mandatory = true)] public string SolutionName { get; set; } CrmServiceClient _client; protected override void BeginProcessing() { _client = new CrmServiceClient(ConnectionString); } protected override void ProcessRecord() { Entity solution = new Entity("solution"); QueryExpression query = new QueryExpression { EntityName = "solution", ColumnSet = new ColumnSet("uniquename", "version"), Criteria = new FilterExpression { Conditions = { new ConditionExpression("uniquename", ConditionOperator.Equal, SolutionName), } } }; var response = _client.RetrieveMultiple(query); if (response.Entities.Count > 0) { solution = response.Entities.First(); } string[] versions = solution.GetAttributeValue<string>("version").Split('.'); char dot = '.'; string version = string.Concat(versions[0], dot, Convert.ToInt32(versions[1]) + 1, dot, Convert.ToInt32(versions[2]), dot, 0); CloneAsSolutionRequest request = new CloneAsSolutionRequest() { ParentSolutionUniqueName = SolutionName, DisplayName = SolutionName, VersionNumber = version }; CloneAsSolutionResponse cloneResponse = _client.Execute(request) as CloneAsSolutionResponse; WriteVerbose($"Solution {cloneResponse.SolutionId} created!"); } protected override void EndProcessing() { } } } |