diff --git a/ChangeLog.md b/ChangeLog.md index 6996b5f..40d6e8d 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -7,8 +7,17 @@ All notable changes to MIMWAL project will be documented in this file. The "Unre * Support for multi-valued attributes in `[//Effective]` lookup in AuthZ workflows. * Implement Approve Request Activity. * Support for `[//Value]` lookups in Query definitions across rest of the activities. +------------ + +### Version 2.19.0111.0 + +#### Changed + +* [Generate Unique Value Activity][GenerateUniqueValueActivity] now has the Conflict Filter search optimisation logic for the *starts-with* XPath function as documented in the [Wiki](https://github.com/Microsoft/MIMWAL/wiki/Generate-Unique-Value-Activity#conflict-filter) turned off by default. +To get the backward compatible behaviour, define the app setting GenerateUniqueValueActivity_OptimizeUniquenessKey = true in the FIMService app.config. ------------ + ### Version 2.18.1110.0 #### Changed @@ -278,3 +287,4 @@ All notable changes to MIMWAL project will be documented in this file. The "Unre [WordFunction]: https://github.com/Microsoft/MIMWAL/wiki/Word-Function [WrapXPathFilterFunction]: https://github.com/Microsoft/MIMWAL/wiki/WrapXPathFilter-Function [MIMWalFunctionsTable]: https://github.com/Microsoft/MIMWAL/wiki/Functions-Table +[GenerateUniqueValueActivity]: https://github.com/Microsoft/MIMWAL/wiki/Generate-Unique-Value-Activity diff --git a/src/VersionInfo.cs b/src/VersionInfo.cs index 6ff5905..9f9ea88 100644 --- a/src/VersionInfo.cs +++ b/src/VersionInfo.cs @@ -22,7 +22,7 @@ internal static class VersionInfo /// Build Number (MMDD) /// Revision (if any on the same day) /// - internal const string Version = "2.19.0110.0"; + internal const string Version = "2.19.0111.0"; /// /// File Version information for the assembly consists of the following four values: @@ -31,6 +31,6 @@ internal static class VersionInfo /// Build Number (MMDD) /// Revision (if any on the same day) /// - internal const string FileVersion = "2.19.0110.0"; + internal const string FileVersion = "2.19.0111.0"; } } \ No newline at end of file diff --git a/src/WorkflowActivityLibrary/Activities/GenerateUniqueValue.cs b/src/WorkflowActivityLibrary/Activities/GenerateUniqueValue.cs index 1695709..fc2926e 100644 --- a/src/WorkflowActivityLibrary/Activities/GenerateUniqueValue.cs +++ b/src/WorkflowActivityLibrary/Activities/GenerateUniqueValue.cs @@ -538,15 +538,24 @@ private void SetAttributesToReadForConflictResources() while (startIndex != -1) { int endIndex = filter.IndexOf(endToken, startIndex, StringComparison.OrdinalIgnoreCase); - string s = filter.Substring(startIndex + startTokenLength + 1, endIndex - (startIndex + startTokenLength + 1)).Trim(new char[] { ' ', '(', ',' }); - attributes.Add(s); + if (endIndex != -1) + { + string s = filter.Substring(startIndex + startTokenLength + 1, endIndex - (startIndex + startTokenLength + 1)).Trim(new char[] { ' ', '(', ',' }); + attributes.Add(s); + } + else + { + // just increment - should never be here as now this function should not get called unless this.optimizeUniquenessKey is set true via app.cong. Issue #61 + endIndex = startIndex + startTokenLength; + } + filter = filter.Substring(endIndex); startIndex = filter.IndexOf(startToken, StringComparison.Ordinal); } if (attributes.Count > 0) { - this.optimizeUniquenessKey = true; + ////this.optimizeUniquenessKey = true; // Now this flag can only be set by app.config. this.FindConflict.Attributes = attributes.ToArray(); Logger.Instance.WriteVerbose(EventIdentifier.GenerateUniqueValueSetAttributesToReadForConflictResources, "Filter: '{0}'. Attributes: '{1}'.", this.ConflictFilter, string.Join(";", attributes.ToArray())); }