clrh 20140301

41
2014/03/01 CLR/H in TOKYO #1 Re-Venge WF でワークフロー Ahf(小尾 智之)

Upload: tomoyuki-obi

Post on 12-Jul-2015

244 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: Clrh 20140301

2014/03/01 CLR/H in TOKYO #1 Re-Venge

WF でワークフロー

Ahf(小尾 智之)

Page 2: Clrh 20140301

2014/03/01 CLR/H in TOKYO #1 Re-Venge

self introduction VB 使い WF メイニア CLR/H スタッフ

てすとぶろぐ http://blogahf.blogspot.jp/

@twit_ahf

Tomoyuki.Obi @IT エンジニアライフ 地方からの戯言

プロレス好き DDT / BJW / K-DOJO みちのくプロレス

Page 3: Clrh 20140301

2014/03/01 CLR/H in TOKYO #1 Re-Venge

https://www.facebook.com/groups/175020096009440/

Page 4: Clrh 20140301

2014/03/01 CLR/H in TOKYO #1 Re-Venge

agenda

• Workflow Foundation とは

• WF で構築するワークフロー

Page 5: Clrh 20140301

2014/03/01 CLR/H in TOKYO #1 Re-Venge

Workflow Foundation 概略

Page 6: Clrh 20140301

2014/03/01 CLR/H in TOKYO #1 Re-Venge

Workflow Foundation #とは

実行基盤

非開発者向け 高い視認性

コンポーネント指向

Page 7: Clrh 20140301

2014/03/01 CLR/H in TOKYO #1 Re-Venge

これまでの流れ

WF 3.x

WF 4

WF 4.03

WF 4.5

.NET 3.0 の新機能として登場

完全リニューアル。WF 3.x と互換性無

状態遷移フローの復活

バージョニング、アノテーション等追加

WF Manager 基本アクティビティ増加

Page 8: Clrh 20140301

2014/03/01 CLR/H in TOKYO #1 Re-Venge

アクティビティ / ワークフロー

アクティビティ デザイナー

IIS Workflow Manager

ワークフロー デザイナー

SQL Server VB / C# / PowerShell

Page 9: Clrh 20140301

2014/03/01 CLR/H in TOKYO #1 Re-Venge

シーケンシャルワークフロー

• 上から下へ制御が流れる • 制御を戻すことはできない

Page 10: Clrh 20140301

2014/03/01 CLR/H in TOKYO #1 Re-Venge

フローチャートワークフロー

• 制御を自由に設定できる

Page 11: Clrh 20140301

2014/03/01 CLR/H in TOKYO #1 Re-Venge

ステートマシンワークフロー

• 受注済→発注済→出荷済 というような状態変化を表す

Page 12: Clrh 20140301

2014/03/01 CLR/H in TOKYO #1 Re-Venge

アクティビティ

• VB や C# / PowerShell Workflow または既存アクティビティを組合せ

• カプセル化した処理=アクティビティ

• アクティビティ=ワークフロー

–ビルドしたワークフローをアクティビティ として利用可能

Page 13: Clrh 20140301

2014/03/01 CLR/H in TOKYO #1 Re-Venge

アクティビティデザイナー

WPF によるユーザー コントロール作成と同じ

Page 14: Clrh 20140301

2014/03/01 CLR/H in TOKYO #1 Re-Venge

デザイナーのメリット

WPF 画面の作成と同様 WPF でできることは 同じく実現可能

デザイナー上での入力 プロパティダイアログを 見なくても設定可能

インテリセンス対応 WF 固有の

ExpressionTextbox ではインテリセンス自作可能

Page 15: Clrh 20140301

2014/03/01 CLR/H in TOKYO #1 Re-Venge

WF サービス

WF サービスプロジェクトの初期状態

メッセージの受信と結果の送信が既に用意されている

間に処理を挟むことで サービスとして作成

Page 16: Clrh 20140301

2014/03/01 CLR/H in TOKYO #1 Re-Venge

WF と PowerShell

Workflow Foundation

PowerShell Workflow

workflow Get-Sample { Dir }

実行

Xaml に変換

Page 17: Clrh 20140301

2014/03/01 CLR/H in TOKYO #1 Re-Venge

次世代の WF

Workflow Manager

Workflow のホスティングを行うアプリケーション

オンプレミス/クラウド上を問わずに簡易に ワークフローホスティングを行うアプリケーション

IIS の設定等が不要 セキュリティ要件が厳しめに変更され

WF 4.x アクティビティの一部が利用不可 基本演算を行うアクティビティなどが大量に追加 別名 Azure Workflow Services(ただしアイコンはない)

Page 18: Clrh 20140301

2014/03/01 CLR/H in TOKYO #1 Re-Venge

WF でワークフロー

Page 19: Clrh 20140301

2014/03/01 CLR/H in TOKYO #1 Re-Venge

ワークフロー?

• 日本でのワークフローは「稟議申請」 などのドキュメントワークフローが主

• 「申請」「承認」「決裁」など

• 途中の承認経路が所属や内容によって変化

• 申請内容によって経路が変化する事も

特徴:実行される期間が長い

Page 20: Clrh 20140301

2014/03/01 CLR/H in TOKYO #1 Re-Venge

サンプルの構成

Workflow

WorkflowApplicationクラスを利用

セルフホスト

メールを送付

Page 21: Clrh 20140301

2014/03/01 CLR/H in TOKYO #1 Re-Venge

承認?

Aさん

Bさん

決裁

申請

却下

承認?

承認ワークフロー

ここで処理の中断が必要

Page 22: Clrh 20140301

2014/03/01 CLR/H in TOKYO #1 Re-Venge

アクティビティの仕様

• 簡単な承認アクティビティ

• 承認者の情報や結果は変数を利用

• 処理内容

–承認者に稟議内容を書いたメールを飛ばす

–処理の中断(呼び出されるまで待機)

Page 23: Clrh 20140301

2014/03/01 CLR/H in TOKYO #1 Re-Venge

メールの送信

SDK にサンプルとして用意済み(C# のみ)

Page 24: Clrh 20140301

2014/03/01 CLR/H in TOKYO #1 Re-Venge

ブックマーク

処理状態の一時停止

実行中のインスタンスを永続化

再開指示があるまで待機

しおりをはさむかのように どこまで処理が進んでいるかを記録する

Page 25: Clrh 20140301

2014/03/01 CLR/H in TOKYO #1 Re-Venge

ブックマークのコード Protected Overloads Overrides Sub Execute( ByVal context As System.Activities.NativeActivityContext) Dim bookName = context.GetValue(Me.BookmarkName) If bookName.Trim = "" Then Return context.CreateBookmark(bookName, New BookmarkCallback(AddressOf OnResume)) End Sub ‘‘‘ <summary>ブックマークから呼ばれるコールバック</summary>

Private Sub OnResume( ByVal context As NativeActivityContext, ByVal bookmark As Bookmark, ByVal value As Object) context.SetValue(Me.HostedValue, value) End Sub ブックマーク名はワークフローの中で

一意でなくてはならない

Page 26: Clrh 20140301

2014/03/01 CLR/H in TOKYO #1 Re-Venge

Persist と Unload

Persist インスタンスは生存

Unload インスタンスは破棄

どちらで永続化するかの指定は ホスト・アプリケーション側の指定による

Page 27: Clrh 20140301

2014/03/01 CLR/H in TOKYO #1 Re-Venge

ブックマークからの再開

‘ブックマークからの再開 (WorkflowApplication).ResumeBookmark( "BookmarkName", value)

Args1:再開したいブックマーク名 Args2:引き渡す値

'ワークフローの実行 (WorkflowApplication).Run() executionWFId = (WorkflowApplication).Id 'ワークフローの再読込 (WorkflowApplication).Load(executionWFId)

Page 28: Clrh 20140301

2014/03/01 CLR/H in TOKYO #1 Re-Venge

引数の受け渡し

ワークフロー開始時にホスト側から引数を受け渡せる

Dim wfApps As WorkflowApplication Dim wfArgs = New Dictionary(Of String, Object) wfApps = New WorkflowApplication(wfFile, wfArgs) wfApps.Run()

Dictionary(String, Object) Args1:引数名(大小文字の区別あり) Args2:引数

Page 29: Clrh 20140301

2014/03/01 CLR/H in TOKYO #1 Re-Venge

ホストでのイベント

Aborted

OnUnhandled Exception

Completed

wfApps.Aborted = Sub(e As WorkflowApplicationAbortedEventArgs) Console.WriteLine(e.Reason) End Sub

ワークフローの中断

予期せぬ例外発生

ワークフローの終了

Page 30: Clrh 20140301

2014/03/01 CLR/H in TOKYO #1 Re-Venge

Demo

Page 31: Clrh 20140301

2014/03/01 CLR/H in TOKYO #1 Re-Venge

カスタマイズ

• 承認者の順序を入れ替える • 新たに承認者を追加する

ワークフロー上アクティビティを追加 / 移動させればよい

Page 32: Clrh 20140301

2014/03/01 CLR/H in TOKYO #1 Re-Venge

Aさん Bさん

決裁

申請

却下

承認?

こういうのは?

Page 33: Clrh 20140301

2014/03/01 CLR/H in TOKYO #1 Re-Venge

並行処理なアクティビティ

Parallel アクティビティを利用すると並列な階層を作成できる

中に配置するアクティビティは通常の承認アクティビティをそのまま利用できる

Page 34: Clrh 20140301

2014/03/01 CLR/H in TOKYO #1 Re-Venge

Demo

Page 35: Clrh 20140301

2014/03/01 CLR/H in TOKYO #1 Re-Venge

ASP.NET との共用

ASP.NET と共用することで簡単に ワークフローを外部から利用可能にできる

RESTful な API

ResumeBookmark

こまめに Unload することが必要

http://kuma.jp/(id)/(value)

Page 36: Clrh 20140301

2014/03/01 CLR/H in TOKYO #1 Re-Venge

参考)永続化環境構築

• 永続化用データベース

–データベースは自分で作成

– [Windows]¥Microsoft.NET¥Framework¥v4.0.30319¥SQL¥ja

• SqlWorkflowInstanceStoreSchema.sql

• SqlWorkflowInstanceStoreLogic.sql

• 上記以外は別目的のスクリプトなので未使用

• SqlWorkflowInstanceStoreSchemaUpgrade.sql – WF4 → WF4.5 へのアップデート用

Page 37: Clrh 20140301

2014/03/01 CLR/H in TOKYO #1 Re-Venge

実行後の状態

Page 38: Clrh 20140301

2014/03/01 CLR/H in TOKYO #1 Re-Venge

参考)永続化の設定

(WorkflowApplication).InstanceStore = New DurableInstancing.SqlWorkflowInstanceStore([接続文字列])

WorkflowApplication 実行時に 一定の条件を満たすと上記設定にて 指定した永続化ストアに永続化を行う

注:一定の条件 Persist アクティビティの呼び出し 一定時間の待機状態(Delayなど)

Page 39: Clrh 20140301

2014/03/01 CLR/H in TOKYO #1 Re-Venge

まとめ

• WF を利用するのは簡単

• アイデア次第で使える場面も

• コードで書くのではなく デザイナーで組み合わせる

•使うのは開発者じゃない!

Page 40: Clrh 20140301

2014/03/01 CLR/H in TOKYO #1 Re-Venge

Appendix

• Workflow Designer Express (http://wfdesignerexpress.codeplex.com/)

• The Activity Designer (http://blogs.msdn.com/b/tilovell/)

• AppFabric Team Blog (http://blogs.msdn.com/b/appfabric/)

• MS 松崎さん Blog (http://blogs.msdn.com/b/tsmatsuz/)

Page 41: Clrh 20140301

2014/03/01 CLR/H in TOKYO #1 Re-Venge

ご清聴ありがとうございました