OData QueryFeed workflow activity (Refresh)

I just updated the OData QueryFeed workflow activity sample.

My original entity properties TablePartPublisherDesigner had style names hard-coded in the activity designer. This was okay to demonstrate the concept of an activity publisher. However, I wanted a way for the client hosting the workflow designer to supply style names for any TablePartPublisherDesigner.  After some research, I decided to use the workflow designer ModelService to get an enumeration of ModelItems from the ModelItemTree. A LINQ statement returns a collection of ModelItems of type TablePartPublisher. From this collection, the ViewService.GetView(modelItem) is used to get each TablePartPublisherDesigner. Once I had each TablePartPublisherDesigner, I was able to add style names to each activity designer from within the workflow designer client.

With this approach, a client application can supply expression data to an activity designer.

The source code at https://msftdbprodsamples.codeplex.com/releases/view/94486 shows how this is done.

The result is an activity with expression items set by the client host:

Excel Host Word Host
image image

Here is some of the code:

modelService = workflowDesigner.Context.Services.GetService<ModelService>();

//Set StyleNames

IEnumerable<ModelItem> activityCollection = modelService.Find(modelService.Root, typeof(Activity)) ;

var tablePartPublisherDesigners = from mi in activityCollection
                                  where mi.ItemType == typeof(Microsoft.Samples.SqlServer.Activities.ActivityPublishers.TablePartPublisher)
                                  select mi;

foreach (ModelItem mi in tablePartPublisherDesigners)
{
    this.SetStyleNames(workflowDesigner.Context.Services.GetService<ViewService>().GetView(mi) as TablePartPublisherDesigner);
}

private void SetStyleNames(TablePartPublisherDesigner activityPublisher)
    {
        switch (this.ClientName)
        {
            case "Word":
                {
                    activityPublisher.StyleNames.Add("Light Shading - Accent 5");
                    activityPublisher.StyleNames.Add("Light Shading - Accent 2");
                    activityPublisher.StyleNames.Add("Medium List 2 - Accent 5");
                    activityPublisher.StyleNames.Add("Medium Grid 1 - Accent 4");
                    activityPublisher.StyleNames.Add("Colorful List");
                    break;
                }
            default:
                {
                    activityPublisher.StyleNames.Add("TableStyleMedium9");
                    activityPublisher.StyleNames.Add("TableStyleMedium10");
                    activityPublisher.StyleNames.Add("TableStyleMedium20");
                    activityPublisher.StyleNames.Add("TableStyleMedium24");
                    activityPublisher.StyleNames.Add("TableStyleMedium28");
                    break;
                }
        }
    }