Presentation is loading. Please wait.

Presentation is loading. Please wait.

1 Building you build process with Windows Workflow Foundation Abid Quereshi.

Similar presentations

Presentation on theme: "1 Building you build process with Windows Workflow Foundation Abid Quereshi."— Presentation transcript:

1 1 Building you build process with Windows Workflow Foundation Abid Quereshi

2 2 Agenda Existing build technologies Promise of Workflow Foundation Demonstration – reusing Nant scripts Demonstration - Custom Task Authoring Modes Serialization and Deserialization Designer Re-Hosting

3 3 Cruise Control MS Build Nant/Ant Visual Build Automated Build Studio DB Change management tools (DB Ghost, Embarcadero) Make files, batch files, any other Existing build technologies

4 4 Motivation for new way of building software Existing build technologies Objectives Visual Configuration (script free) Real-time distributed feedback Parallel Task processing Cheap

5 5 Promise of Windows Workflow Foundation Design by markup Access to high level programming language - Threading, tracing, events End user configuration Possibilities that WF provides

6 6 Promise of Windows Workflow Foundation Co-ordinate work performed by people and software Long-running and stateful Based on extensible models Transparent and dynamic throughout their life cycle The Four Workflow Tenants:

7 7 Promise of Windows Workflow Foundation Build technologies New software development technologies and platforms Configuration Motive for a Dynamic Build process

8 8 Promise of Windows Workflow Foundation Scenario Checkout Start Compile in Release configuration Compile in Debug configuration Deploy Stop ConfigMode = Release?

9 9 Promise of Windows Workflow Foundation Reuse of existing scripts and build technologies Example of a code only workflow Build script encapsulation demo

10 10 Authoring Modes Promise of Windows Workflow Foundation Code Only Markup (XAML) + Compiled Code Beside Full Visual Studio Support Some Visual Studio Support + Prayer Markup + Assembly binding

11 11 Custom Activities Workflow Customization Part of Workflow tenants (Based on extensible models) Reusable components Possibility of Software Build DSL

12 12 Domain Specific Language Workflow Customization Limited form of computer language designed for a specific class of problems. Library(Framework) + Configuration (Process, algorithm or how to perform a process) Most Frameworks in a particular platform address technical concerns DSL’s address business concerns (Higher level level of abstraction)

13 13 Domain Specific Language Workflow Customization DSL’s typically come with a code generation tool Constraint syntax Accessible to non-developers

14 14 Domain Specific Language Workflow Customization May require a Parser Schemas help to validate instructions Algorithm Syntax - what is being said – is limited

15 15 Domain Specific Language Workflow Customization Algorithm Syntax - what is being said – is limited How it is being said may take two forms Internal DSL - syntax of instruction is a subset of host general purpose language code External DSL – often a configuration file

16 16 Custom Workflow Workflow Customization SequentialWorkflowActivity SequenceActivity CompositeActivity Activity DependencyObject MyCustomWorkflow MyCustomActivity System.Workflow.ComponentModel

17 17 Activity Class Workflow Customization Methods to override: Execute Cancel Initialize These are called by the WF runtime – not manually Activity DependencyObject Execute(ActivityExecutionContext):ActivityExecutionContext Cancel(ActivityExecutionContext):ActivityExecutionContext Initialize(IServiceProvider)

18 18 Activity Class State Workflow State Compensating Closed Faulting Canceling Executing Initialized

19 19 Dependency Object & Dependency Properties Workflow State DependencyObject Activity data storage mechanism Allows activities to project their properties onto their children Essential provision for WF tenent (Long-running and stateful)

20 20 Dependency Object Workflow State Hash table Essential provision for WF tenant (Long-running and stateful) Add a public static instance of Dependency Property to manage that property for all instances of the activity Implement.NET Property that accesses an activities Dependency Property

21 21 Dependency Properties Workflow State Must derive from DependencyObject Register property then define property

22 22 Dependency Properties Workflow State public static DependencyProperty MyDepPropProperty = DependencyProperty.Register( “MyDepProp", typeof(String), typeof(MyClass) ); Property name Property Type Owner Type

23 23 Dependency Properties Workflow State public String CompilationMode { get { return (String)(base.GetValue(MyClass. MyDepPropProperty)); } set { base.SetValue(MyClass.MyDepPropProperty, value); }

24 24 Parameter Passing Workflow State Dictionary Args = new Dictionary (); Args.Add("RepositorySource", "C:\\Projects\\BuildManager\\Repository"); Args.Add("CompilationMode", "Release"); Args.Add("Application", "C:\\Projects\\BuildManager\\Checkout\\BuildMeWinApp\\BuildMeWinA pp.sln"); Args.Add("Target", "C:\\Projects\\BuildManager\\BuildTarget"); WorkflowInstance instance = workflowRuntime.CreateWorkflow(typeof(BuildTasks.Builder), Args);

25 25 Custom Workflow Domain specific activities Domain specific workflow Example of Code+Markup workflow Build custom workflow demo

26 26 Markup Authoring Modes

27 27 XOML Authoring Modes Extensible Orchestration Markup Language (XOML) files, a special case of XAML file types, which specify the workflow logic within an application.

28 28 Binding Authoring Modes

29 29 Authoring Modes Binding gives a dependency property an ActivityBind object to evaluate when asked for its value ActivityBind can point to other fields, properties, or methods of activities inside a workflow. One activity could bind its input properties to a previous activity's outputs. Binding makes the data flow a part of the workflow model.

30 30 Markup-only workflows Authoring Modes Allows for declarative programming Facilitates the highest degree of encapsulation Facilitates usage of code-generation tool Requires mechanism to serialize and deserialize WF

31 31 Serialization Create a XAML workflow markup file from an in- memory workflow model Deserialization Reads markup and creates in-memory object containing definition of workflow model

32 32 Serialization private static void SerializeToMarkup(Activity workflow, String fileName) { try { using (XmlWriter xmlWriter = XmlWriter.Create(fileName)) { WorkflowMarkupSerializer mrkupSerializer = new WorkflowMarkupSerializer(); mrkupSerializer.Serialize(xmlWriter, workflow); } catch (Exception e) { Console.WriteLine("Exception during serialization: {0}" e.Message); }

33 33 Serialization Deserializer needs knowledge of the types referenced in the markup ServiceContainer, TypeProvider, DesignSerializationManager Deserialization

34 34 Serialization Activity workflow = null; ServiceContainer container = new ServiceContainer(); Add a TypeProvider to resolve BuildTask references TypeProvider provider = new TypeProvider(container); provider.AddAssembly(typeof(SharedWorkflows.MarkupOnlyBaseWorkflow).Assembly); container.AddService(typeof(ITypeProvider), provider); Add ServiceContainer with the TypeProvider to serialization manager DesignerSerializationManager dsm = new DesignerSerializationManager(container); XmlReader xmlReader = XmlReader.Create(fileName) WorkflowMarkupSerializer markupSerializer = new WorkflowMarkupSerializer(); workflow = markupSerializer.Deserialize(dsm, xmlReader) as Activity;

35 35 Designer Re-Hosting Code generation tool Configurable by end user

36 36 Introduction Designer Re-hosting The logic of a build process is often simple enough for to allow drag and drop process design by non- developers WF allows for re-hosting the workflow designer in a windows application (outside of the Visual Studio environment) Powerful proposition

37 37 Designer Classes System.ComponentModel.Design.DesignSurface General-purpose design canvas System.Workflow.ComponentModel.Design. WorkflowDesignerLoader Serialization/Deserialization Loading of services used by the designer System.Workflow.ComponentModel.Design.WorkflowView Implements visual representation of your workflow model

38 38 Designer Classes IDesignerHost Persisted Workflow Models (.xoml files) Design Surface MyDesignerLoader: WorkflowDesignerLoader Load services and populate visual tree IRootDesigner WorkflowView BeginLoad method GetServices method GetDesigner method GetView method

39 39 Property Attributes Designer Re-hosting Description Category Browsable DesignerSerializationVisibility

40 40 Designer Re-hosting Abstract Must be implemented in a derived class Responsible for loading workflow from peristable tore.xoml and populating tree of visual objects in the designer and Vise-Versa WorkflowDesignerLoader

41 41 Designer Re-hosting Services IMenuCommandService ITypeProvider IToolboxService IPropertyValueUIService IEventBindingService

42 42 Designer Re-hosting Demo Simple workflow Workflow with conditional branch

43 43 Conclusion Revisiting Objectives Visual Configuration (script free) Real-time distributed feedback Parallel Task processing Cheap

44 44 Conclusion Real-time distributed feedback Limitation is due to fact that WF Markup is a subset of XAML – the markup parser is not extensible Parallel Task processing Parallel task activity is not multithreaded This can be implemented but it’s not out-of-the box functionality

45 45 Conclusion References Pro WF Windows Workflow in.NET 3.0, Apress, Bruce Bukovics Professional Windows Workflow Foundation, Wrox, Todd Kitta Introduction to Domain Specific Languages, Martin Fowler,

46 46 Blank Slide Serialization

Download ppt "1 Building you build process with Windows Workflow Foundation Abid Quereshi."

Similar presentations

Ads by Google