Механізм управління потоками Windows Workflow Foundation. Частина 2, Різне, Програмування, статті

Читати частина 1

Після компіляції workflow-моделі вона може виконуватися всередині будь-якого процесу Windows, включаючи консольні додатки, віконні програми, Windows-служби, Web-сервіси та Web-сайти ASP.NET. При цьому кожен примірник workflow легко взаємодіє з хост-додатком (рис. 1).

Рис. 1. Функціонування примірників workflow, активностей і WRE в середовищі хост-додатки.

Приклад: як це працює


Кращий спосіб зрозуміти, як працює WF, – створити просте консольне workflow-додаток. У прикладі ми будемо обчислювати факторіал числа, що вводиться користувачем. Для цього ми скористаємося Visual Studio 2005, де виберемо шаблон Sequential Workflow Console Application. Після цього ми автоматично потрапляємо в workflow-конструктор (рис. 2), в якому можна працювати з графічними схемами.

Для розробки програми ми будемо також застосовувати панель Toolbox, на якій виведено список доступних активностей (рис. 3). Їх можна просто перетягувати мишею у вікно конструктора. Для початку ми перенесемо таким чином блок While (рис. 4), який реалізує повторюваний цикл. Далі додамо всередину блоку While блок Code – саме тут будуть читатися вводяться користувачем дані. Після While таким же чином додамо конструкцію IfElse, і в неї теж вставимо блоки Code. Зауважимо, що червоним знаком оклику будуть виділені властивості, які потрібно задати перед запуском процесу.

Рис. 2. Workflow-конструктор.

Рис. 3. В Toolbox видно список доступних активностей.

Рис. 4. Вставляємо блок While в процес.

Сам процес візуально представлений не тільки в workflow-конструкторі, а й в Solution Explorer. Звідти можна потрапити у вікно коду, де нам потрібно описати змінні:





Public class Workflow1
Inherits SequentialWorkflowActivity
Private num As Integer
Private firstTime As Boolean = True


Повернемося назад в конструктор. По червоному знаку ми бачимо, що властивість Condition не встановлено (рис. 5). Щоб встановити його, слід натиснути мітку Property “Condition” is not set. У вікні властивостей потрібно розкрити подспісок властивостей (рис. 6) і ввести ім’я умови WhileLoopCondition – ім’я підпрограми, яка буде задавати проекту умови в циклі. Можна вибрати й варіант декларативного опису умови – Declarative Rule Condition.

Код умови буде виглядати так:





Private Sub WhileLoopCondition( _
ByVal sender As System.Object, _
ByVal e As System.Workflow.Activities.ConditionalEventArgs)
If firstTime Then
e.Result = True
firstTime = False
Else
If num < 0 Then
e.Result = True
Else
e.Result = False
End If
End If
End Sub


Рис. 5. Ми бачимо знак помилки, так як умова переходу не встановлено.

Рис. 6. Установка властивості Condition для блоку While.

Для блоку codeActivity1 ми встановимо властивість Name як ReadNumber, а ExecuteCode як readNum. Сам код буде таким:





Private Sub readNum( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs)

Console.WriteLine(“Please enter a positive number”)
num = CInt(Console.ReadLine())
End Sub



Для ifElseBranchActivity1 встановимо властивість Condition як Zero і напишемо код:





Private Sub Zero( _
ByVal sender As System.Object, _
ByVal e As System.Workflow.Activities.ConditionalEventArgs)
If (num = 0) Then
e.Result = True
Else
e.Result = False
End If
End Sub


Для codeActivity2 задамо Name = ZeroFactorial, ExecuteCode = PrintResultForZero і введемо код:





Private Sub PrintResultForZero( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs)
Console.WriteLine(“0! is 1”)
End Sub


Зверніть увагу, що для правої гілки IfElse встановлювати властивість Condition не потрібно – досить визначити ліве умова.

Для елемента codeActivity3 встановимо Name = NonZeroFactorial, ExecuteCode = PrintResult і вставимо код:





Private Sub PrintResult( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs)
Dim fac As Integer = 1
For i As Integer = 1 To num
fac *= i
Next
Console.WriteLine(num & “! is ” & fac)
End Sub


Тепер наш workflow виглядає так (рис. 7). Далі в Solution Explorer виберемо Module1.vb, в якому сформуємо головне консольний додаток (лістинг 1). Зверніть увагу – ми додали рядок Console.Readline в код, щоб програма не закривалося негайно після завершення.

Читати частина 3

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*