clrh 20140301

Post on 12-Jul-2015

244 Views

Category:

Technology

2 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

WF でワークフロー

Ahf(小尾 智之)

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 みちのくプロレス

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

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

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

agenda

• Workflow Foundation とは

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

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

Workflow Foundation 概略

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

Workflow Foundation #とは

実行基盤

非開発者向け 高い視認性

コンポーネント指向

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 基本アクティビティ増加

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

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

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

IIS Workflow Manager

ワークフロー デザイナー

SQL Server VB / C# / PowerShell

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

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

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

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

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

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

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

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

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

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

アクティビティ

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

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

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

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

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

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

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

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

デザイナーのメリット

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

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

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

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

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

WF サービス

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

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

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

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

WF と PowerShell

Workflow Foundation

PowerShell Workflow

workflow Get-Sample { Dir }

実行

Xaml に変換

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

次世代の WF

Workflow Manager

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

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

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

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

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

WF でワークフロー

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

ワークフロー?

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

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

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

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

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

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

サンプルの構成

Workflow

WorkflowApplicationクラスを利用

セルフホスト

メールを送付

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

承認?

Aさん

Bさん

決裁

申請

却下

承認?

承認ワークフロー

ここで処理の中断が必要

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

アクティビティの仕様

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

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

• 処理内容

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

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

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

メールの送信

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

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

ブックマーク

処理状態の一時停止

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

再開指示があるまで待機

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

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 ブックマーク名はワークフローの中で

一意でなくてはならない

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

Persist と Unload

Persist インスタンスは生存

Unload インスタンスは破棄

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

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

ブックマークからの再開

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

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

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

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:引数

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

ワークフローの中断

予期せぬ例外発生

ワークフローの終了

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

Demo

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

カスタマイズ

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

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

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

Aさん Bさん

決裁

申請

却下

承認?

こういうのは?

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

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

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

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

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

Demo

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

ASP.NET との共用

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

RESTful な API

ResumeBookmark

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

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

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 へのアップデート用

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

実行後の状態

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

参考)永続化の設定

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

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

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

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

まとめ

• WF を利用するのは簡単

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

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

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

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/)

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

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

top related