diff --git a/ChangeLog.md b/ChangeLog.md index f5a0133..4a443f1 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -8,6 +8,14 @@ All notable changes to MIMWAL project will be documented in this file. The "Unre ------------ +### Version 2.16.0320.0 + +#### Changed + +* The `[//Request/RequestParameter]` lookup for a SystemEvent request will resolve to request parameters in the parent request. + +------------ + ### Version 2.16.0315.0 #### Added diff --git a/src/VersionInfo.cs b/src/VersionInfo.cs index 827c613..17762b1 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.16.0315.0"; + internal const string Version = "2.16.0320.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.16.0315.0"; + internal const string FileVersion = "2.16.0320.0"; } } \ No newline at end of file diff --git a/src/WorkflowActivityLibrary/Common/ExpressionFunction.cs b/src/WorkflowActivityLibrary/Common/ExpressionFunction.cs index 75cb312..a5fa1ea 100644 --- a/src/WorkflowActivityLibrary/Common/ExpressionFunction.cs +++ b/src/WorkflowActivityLibrary/Common/ExpressionFunction.cs @@ -344,7 +344,7 @@ public object Run() /// Type of the object to be deserialized /// Serialized representation of the specified type /// The Object being deserialized. - private static T DeserializeObject(string xml) + internal static T DeserializeObject(string xml) where T : class { T t; diff --git a/src/WorkflowActivityLibrary/ComponentActivities/ResolveLookups.cs b/src/WorkflowActivityLibrary/ComponentActivities/ResolveLookups.cs index 2fc9df4..c73ddc9 100644 --- a/src/WorkflowActivityLibrary/ComponentActivities/ResolveLookups.cs +++ b/src/WorkflowActivityLibrary/ComponentActivities/ResolveLookups.cs @@ -760,7 +760,7 @@ private void ForEachRead_ChildInitialized(object sender, ReplicatorChildEventArg this.ReadResources = this.resources[this.resourceKey]; this.ReadAttributes = this.reads[this.resourceKey].ToArray(); - Logger.Instance.WriteVerbose(EventIdentifier.ResolveLookupsForEachReadChildInitialized, "ResourceKey: '{0}'. Read Attributes: '{1}'.", e.InstanceData, string.Join(",", this.ReadAttributes)); + Logger.Instance.WriteVerbose(EventIdentifier.ResolveLookupsForEachReadChildInitialized, "ResourceKey: '{0}'. Read Attributes: '{1}'.", e.InstanceData, string.Join(",", this.ReadAttributes)); } } finally @@ -813,7 +813,34 @@ private void ForEachResource_ChildCompleted(object sender, ReplicatorChildEventA foreach (string attribute in this.reads[this.resourceKey].Where(attribute => read.Resource[attribute] != null)) { - this.Publish(string.Format(CultureInfo.InvariantCulture, "{0}/{1}", this.resourceKey, attribute), read.Resource[attribute]); + // If the request is SystemEvent, RequestParameter of Request is published from the parent request. + if (this.resourceKey.Equals(LookupParameter.Request.ToString()) && this.Request.CurrentRequest.Operation == OperationType.SystemEvent && attribute == "RequestParameter") + { + RequestType parentRequest = this.ReadParentRequest.Resource as RequestType; + + if (parentRequest != null) + { + IList parentRequestParameters = parentRequest.RequestParameters; + List requestParameters = new List(); + if (parentRequestParameters.Count != 0) + { + foreach (string s in parentRequestParameters) + { + RequestParameter parentRequestParameter = ExpressionFunction.DeserializeObject(s); + if (parentRequestParameter.Target == this.Request.CurrentRequest.Target) + { + requestParameters.Add(s); + } + } + + this.Publish(string.Format(CultureInfo.InvariantCulture, "{0}/{1}", LookupParameter.Request.ToString(), attribute), requestParameters); + } + } + } + else + { + this.Publish(string.Format(CultureInfo.InvariantCulture, "{0}/{1}", this.resourceKey, attribute), read.Resource[attribute]); + } } } finally