Cmdlets/NewPatch.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(VerbsCommon.New, "Patch")] public class NewPatch: Cmdlet { [Parameter(Position = 1, Mandatory = true)] public string ConnectionString { get; set; } [Parameter(Position = 2, Mandatory = true)] public string ParentSolutionName { get; set; } CrmServiceClient _client; protected override void BeginProcessing() { _client = new CrmServiceClient(ConnectionString); } protected override void ProcessRecord() { //https://github.com/WaelHamze/xrm-ci-framework/blob/master/MSDYNV9/Xrm.Framework.CI/Xrm.Framework.CI.PowerShell.Cmdlets/AddXrmSolutionPatch.cs Entity solution = new Entity("solution"); QueryExpression query = new QueryExpression { EntityName = "solution", ColumnSet = new ColumnSet("uniquename", "version"), Criteria = new FilterExpression { FilterOperator = LogicalOperator.Or, Conditions = { new ConditionExpression("uniquename", ConditionOperator.Equal, ParentSolutionName), new ConditionExpression("uniquename", ConditionOperator.Like, $"{ParentSolutionName}_Patch%") } } }; query.AddOrder("version", OrderType.Descending); 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, versions[1], dot, Convert.ToInt32(versions[2]) + 1, dot, 0); CloneAsPatchRequest request = new CloneAsPatchRequest { ParentSolutionUniqueName = ParentSolutionName, DisplayName = ParentSolutionName, VersionNumber = version }; CloneAsPatchResponse cloneResponse = _client.Execute(request) as CloneAsPatchResponse; WriteVerbose($"Patch {cloneResponse.SolutionId} created!"); } protected override void EndProcessing() { } } } |