/// <summary> /// Serializes a specified DynamicActivity object into a string. /// </summary> /// <param name="da">The specified DynamicActivity object.</param> /// <returns>A string as result of serialization.</returns> public string Serialize(DynamicActivity da) { StringBuilder stringBuilder = new StringBuilder(); using (StringWriter writer = new StringWriter(stringBuilder)) { ActivitySerializer serializer = new ActivitySerializer(); serializer.Serialize(writer, da); } string workflowXaml = stringBuilder.ToString(); return(workflowXaml); }
/// <summary> /// Adds used extended arguments to DynamicActivity.Properties and remove unused extended /// arguments from DynamicActivity.Properties. /// </summary> /// <param name="da">The DynamicActivity to which we apply extended arguments</param> public void ApplyExtendedArguments(DynamicActivity da) { // Get serialized XAML ActivitySerializer serializer = Owner.Storage.Serializer; string xaml = serializer.Serialize(da); foreach (IRuleSignatureExtension extension in Extensions) { foreach (RuleArgument arg in extension.GetSystemInArguments()) { string argumentName = arg.Name; string keyword = String.Format("[{0}]", argumentName); bool isUsed = xaml.Contains(keyword); if (isUsed) { // Make sure the corresponding property exists. if (!da.Properties.Contains(argumentName)) { da.Properties.Add(new DynamicActivityProperty { Name = argumentName, Type = typeof(InArgument <>).MakeGenericType(arg.ArgumentType) }); } } else { // Make sure the property is removed. if (da.Properties.Contains(argumentName)) { da.Properties.Remove(argumentName); } } } } }