Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 2
0
        /// <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);
                        }
                    }
                }
            }
        }