WorkflowDesignerLoader.PerformLoad(IDesignerSerializationManager) Method

Definition

Loads the designer from a design document.

C#
protected override void PerformLoad(System.ComponentModel.Design.Serialization.IDesignerSerializationManager serializationManager);

Parameters

serializationManager
IDesignerSerializationManager

Class that implements the IDesignerSerializationManager interface, which manages design-time serialization.

Examples

The following example shows how to override the PerformLoad method to deserialize a workflow and load it in the designer using the AddObjectGraphToDesignerHost helper method.

C#
protected override void PerformLoad(IDesignerSerializationManager serializationManager)
{
    IDesignerHost designerHost = (IDesignerHost)GetService(typeof(IDesignerHost));
    Activity rootActivity = null;

    // If a WorkflowType already exists, create an instance instead of reading from file
    if (WorkflowType != null)
    {
        rootActivity = (Activity)Activator.CreateInstance(WorkflowType);
    }
    else
    {
        // Create a text reader out of the doc data
        TextReader reader = new StringReader(this.xoml);
        try
        {
            using (XmlReader xmlReader = XmlReader.Create(reader))
            {
                WorkflowMarkupSerializer xomlSerializer = new WorkflowMarkupSerializer();
                rootActivity = xomlSerializer.Deserialize(xmlReader) as Activity;
            }
        }
        finally
        {
            reader.Close();
        }
    }

    if (rootActivity != null && designerHost != null)
    {
        AddObjectGraphToDesignerHost(designerHost, rootActivity);
    }
}

private static void AddObjectGraphToDesignerHost(IDesignerHost designerHost, Activity activity)
{
    Guid Definitions_Class = new Guid("3FA84B23-B15B-4161-8EB8-37A54EFEEFC7");

    if (designerHost == null)
        throw new ArgumentNullException("designerHost");
    if (activity == null)
        throw new ArgumentNullException("activity");

    string rootSiteName = activity.QualifiedName;
    if (activity.Parent == null)
    {
        string fullClassName = activity.UserData[Definitions_Class] as string;
        if (fullClassName == null)
            fullClassName = activity.GetType().FullName;
        rootSiteName = (fullClassName.LastIndexOf('.') != -1) ? fullClassName.Substring(fullClassName.LastIndexOf('.') + 1) : fullClassName;
        designerHost.Container.Add(activity, rootSiteName);
    }
    else
    {
        designerHost.Container.Add(activity, activity.QualifiedName);
    }

    if (activity is CompositeActivity)
    {
        foreach (Activity activity2 in GetNestedActivities(activity as CompositeActivity))
            designerHost.Container.Add(activity2, activity2.QualifiedName);
    }
}

private static Activity[] GetNestedActivities(CompositeActivity compositeActivity)
{
    if (compositeActivity == null)
        throw new ArgumentNullException("compositeActivity");

    IList<Activity> childActivities = null;
    ArrayList nestedActivities = new ArrayList();
    Queue compositeActivities = new Queue();
    compositeActivities.Enqueue(compositeActivity);
    while (compositeActivities.Count > 0)
    {
        CompositeActivity compositeActivity2 = (CompositeActivity)compositeActivities.Dequeue();
        childActivities = compositeActivity2.Activities;

        foreach (Activity activity in childActivities)
        {
            nestedActivities.Add(activity);
            if (activity is CompositeActivity)
                compositeActivities.Enqueue(activity);
        }
    }
    return (Activity[])nestedActivities.ToArray(typeof(Activity));
}

Applies to

Proizvod Verzije
.NET Framework 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1