Visual Studio で Office SharePoint Server 2007 Workflow を作成するチュートリアル (第1回: デザイン編) 【Beta2版】


環境:Office SharePoint Server 2007 Beta 2

(Beta2TR については、ここ を参照)

こんにちは。

今日から連載で、毎日、SharePoint ワークフローについて記載します。(但し、土日は自転車で出かけるのでお休みします、、、)

SharePoint Server 2007 から実装可能なワークフローには、大きく 2 種類の実現方法があります。1 つは、高度開発者がアクティビティも含めた細かな動作を実装をすることができる Visual Studio を使ったワークフロー実装で、もう 1 方が Office SharePoint Designer を使ったどちらかと言えば管理者や利用者が一般に使用するワークフロー設定機能です。双方のコンセプトと後者の使い方については、Office Developer Center (Japan) http://www.microsoft.com/japan/msdn/office/ よりリンクして参照できますので、ご確認ください。ここでは、このうちの前者の Visual Studio を使ったワークフロー実装について、InfoPath フォームを使ったタスクフォーム実装など含めた実用的な実装と配置の方法を説明しています。
ここでご紹介する情報は、MSDN の

http://msdn2.microsoft.com/en-us/library/ms564355.aspx
(これは、米国の Office developer Conference で実施されたデモと同様です)

http://msdn2.microsoft.com/en-us/library/ms563325.aspx
http://msdn2.microsoft.com/en-us/library/ms550938.aspx

http://msdn2.microsoft.com/en-us/library/ms550782.aspx

に掲載されているものベースとなっていますが、現状は上述の通り情報がやや分散していますので、これらすべての情報を通して「動かすことができるサンプル」を構築できるようなコンテンツとして編集しました。環境があれば、この手順に沿ってそのまま構築と動作確認が可能です。(また、上記に記載していない細かな配置の手順などについても記載しています。) またこのシリーズの最後には、サンプルで作成した(動く)プロジェクトのサンプルも添付する予定です。(無論、皆さんの環境で動かすには、コードを環境にあわせて変更してから動かしてもらう必要があります。)

内容は、1回で書ききれないくらいになりますので、以下にわけて掲載したいと思います。

第1回 デザイン編
第2回 コード実装編
第3回 配置・インストール編
第4回 動作の確認とデバッグ編

では、早速、第1回のワークフローデザインと、ワークフローで使用する InfoPath フォームデザインを中心に、以下に説明していきます。
尚、このサンプルでは、すべて英語版を使用しています。

まず、この開発をおこなう際の事前準備として、以下の環境のインストールが必要です。特に、Starter Kit は必ずインストールしておいてください。

【事前に必要な環境】

WinFX Runtime Components Beta 2
Office Sharepoint Server 2007 Beta 2
Office Professional 2007 Beta 2 (InfoPath のフォーム作成で使用)
Visual Studio 2005
Windows Workflow Foundation Runtime Components Beta 2.2 and Visual Studio 2005 Extensions for Windows Workflow Foundation Beta 2.2
Workflow Developer Starter Kit for Windows SharePoint Services v3 Beta 2
(または ECM Starter Kit)

ここでは、シナリオとして、以下のような動作をするワークフローを作成してみましょう。(ここではワークフローで使用される標準的なフォームを使用します。)

【このサンプルワークフローのシナリオ】

SharePoint のドキュメントライブラリでワークフローを開始する際に InfoPath のフォーム (Initiation Form) に値を入力し、Submit をおこなうと、ワークフローが開始され、入力した内容に基づき承認処理のアクティビティに移る。
この承認用のアクティビティでは、上述の Initiation Form に入力された値を表示した承認用のフォーム (Task Form) を表示し、ここで承認完了のチェックがおこなわれるまで、この承認処理は何度もループする。承認がおこなわれると、所定のログ (ヒストリー) が SharePoint に書き込まれ、ワークフローは終了する。

では、以下に開発していきましょう。

【ステップ:開発環境の作成】

まず、Visual Studio を起動してください。上記の Starter Kit がインストールされていると、SharePoint ワークフロー用のプロジェクトテンプレートがいくつか登録されているはずです。では、その中から、C# の SharePoint Sequential Workflow Library のプロジェクトテンプレートを使ってプロジェクトを作成しましょう。
SharePoint ワークフローでは、そのベースとして .NET Framework 3.0 からの Windows Workflow Foundation (WF) が使用されていますが、以下に記載するように SharePoint 独自アクティビティやフレームワークと連携して WF の開発をおこなっていきます。

ワークフローのデザイナーを起動して、[ツールボックス] の中に SharePoint ワークフロー関連のアイテムが表示されていない場合には、ツールボックスを右クリックして [Add Tab] を選択してタブを追加した後で、[Choose Items] を選択して、Microsoft.Sharepoint.WorkflowActions のすべてのアイテムにチェックを付け、SharePoint 用のアイテムを取り込んでおいてください。

【ステップ:ワークフローのデザイン】

つぎに、以下の手順で、デザイナーを使ってワークフローをデザインします。

  • 上記で追加したツールボックス上のアイテム [CreateTask] をドラッグアンドドロップして、デザイナーの [onWorkflowActivated1] の直後に追加挿入してください。
    このタスクは、SharePoint 上の「タスク」 (Task) を新規作成してくれる組み込みのアクティビティになります。
  • [OnTaskChanged] アイテムを上記で作成された [CreateTask1] の直後に追加します。
    このアクティビティは、SharePoint の「タスク」が更新された際に実行される組み込みタスクです。
  • [CompleteTask] アイテムを [onTaskChanged1] の直後に追加します。
  • [LogToHistoryListActivity] アイテムを [CompleteTask] の直後に追加します。
    このアクティビティは、SharePoint のヒストリー情報をロギングしてくれるアクティビティです。
  • Windows Workflow 標準の [While] アイテムを [onTaskChanged1] の直後に追加します。
  • [onTaskChanged1] を While の中の [Drop an Activity Here] にドラッグアンドドロップします。

ひとまず、ワークフローのデザインは終了です。次回以降、プロパティ設定やコード実装をおこなっていきますので、このプロジェクトをすべて保存しておいてください。(While の条件なども未設定ですので、まだ、ビルドはきっとエラーになります。)

【ステップ:ワークフロー用の InfoPath フォームのデザイン (開発)】

SharePoint ワークフローでは、ワークフローをドキュメントライブラリなどに関連付けた際に管理者向けに表示される属性設定用のフォーム (Association Form) や、ワークフローの開始時にワークフロータスクの担当者の設定などをおこなうための起動用のフォーム (Initiation Form) や、各タスクの実行時にタスク実行者に向けて表示するフォーム (Task Form) など、フォームのフレームワークがあらかじめ決められています。(他にもさまざまなフォームがあります。) そして、これらすべてのフォームについて、InfoPath のフォームと連携してカスタムでフォームを作成 (開発) できるようになっています。

そこで、ここでは、以下の手順で、上述したシナリオを実現するため、Initiation Form と Task Form を作成していきます。
フォームのデザインは自由ですが、フォームで設定した情報をワークフローに渡したり、逆にワークフローからフォームにデータを受け渡ししたりする際のルールが決まっているため、下記の手順でデータと関連付けをおこないます。

■ Initiation Form のデザイン (開発)

InfoPath 2007 を起動し、フォームを Browser Enabled のフォームとして新規作成します。
以下のコントロールを以下の名前で配置してください。(実務上のフォームらしくなるよう、ラベルや説明などは適当に配置してください。)

Name: asignee
Type: TextBox

Name: instructions
Type: TextBox

Type: Button (Submit用のボタン)

入力された値を SharePoint ワークフローに渡すには、以下の手順を実行して、Submit 用のボタンを押した際にサーバのホスト環境に XML の内容をポストさせるようにします。
まず、上述の Submit 用のボタンに rule (動作規則) を追加して、以下のように 2 つの action をこの rule に設定してください。

  • [Action: Submit using a data connection]

    Data connection:
      Create a new connection to
      Submit data
    How do you want to submit data:
      To the hosting environment, such as an ASP.NET page or a hosting application
    Name of data connection
      Submit
  • [Action: Close the form]

つぎにポストする XML の内容をデザインします。
InfoPath の [Design Tasks] ペインの [Data Source] をクリックし、
以下の通り名前を変更してください。

InitForm (← Group Properties です。左記の通り変更してください。)
  asignee
  instructions

後ほど発行 (Publish) をしますので、まずはここまでで、一旦、このフォームテンプレートをディスクに保存しておきましょう。

■ Task Form のデザイン (開発)

同様に、タスクの中で使用される InfoPath のフォームを作成します。
InfoPath 2007 を実行してタスク用のフォームを Brrowser Enabled のフォームとして新規作成し、以下のコントロールを配置してください。(同様、実務上のフォームらしくなるよう、ラベルなどは適当に配置してください。)

Name: instructions
Type: TextBox

Name: isFinished
Type: CheckBox (True/False (boolean))

Type: Button (Submit用のボタン)

同様に、このフォームで、入力された値を Sharepoint サーバのホスト環境にポストするため、上述の Submit 用のボタンに以下の rule (動作規則) を追加して、以下のように 2 つの action を設定してください。

  • [Action: Submit using a data connection]

    Data connection:
      Create a new connection to
      Submit data
    How do you want to submit data:
      To the hosting environment, such as an ASP.NET page or a hosting application
    Name of data connection
      Submit
  • [Action: Close the form]

ポストする XML の内容をデザインするため、InfoPath の [Design Tasks] ペインの [Data Source] をクリックし、以下の通り名前を変更してください。

myFields (← デフォルトのままでOKです)
  instructions
  isFinished

例えば、ボタンを複数作成して(例:承認、却下、など)、押したボタンによってフローを変えたい場合には、上記のようにメインデータソース (myFields) に該当の値を作成しておき、ボタンの rule (動作規則) の action の 1 つとして、このデータに値を設定するようにしておくことで、ワークフロー側でどのボタンが押されたか判断することができます。(2007/07 追記)

つぎに、タスクフォームでは、逆にワークフローから必要なデータを受け取って表示する必要もあります。このため、つぎのように、InfoPath のフォームへ SharePoint ワークフローからデータを連携する際に使用されるメタデータを定義し関連付けます。
まず、以下の内容の ItemMetadata.xml という名前のファイル (テキストファイル) をディスク上に作成して保存してください。

<z:row xmlns:z="#RowsetSchema"
  ows_instructions="" />

つぎに、InfoPath の [Design Tasks] ペインで [Data Source] を選択し、[Manage Data Connection ...] をクリックします。表示される画面で [Add] をクリックし、表示されるウィザードで [Create a new connection to] と [Receive data] をチェックして次に進みます。
さらに、ウィザードで、[XML Document] を選択し、先程保存した ItemMetadata.xml のファイルを選択してください。ウィザードで、[Include the data as a resource file in the form template] を選択して次に進みます。さらに、テキストボックス [Enter a name for the data connection] に「ItemMetadata」と入力し、[Automatically retrieve data when form is opened] にチェックを付けてウィザードを終了します。

つぎに、以下の手順で、InfoPath のフォームと、今 追加したデータソースをデータバインドします。
InfoPath の画面で、instructions コントロールをダブルクリックして、表示されるプロパティダイアログボックスで [Data] タブを表示し、[Deafult Value] のフォーミュラボタン (fx ボタン) をクリックします。表示されるダイアログボックスで、[Insert a Field or Group] をクリックします。[Data Source] として先程追加した [ItemMetadata] を選択し、:ows_instructions を選択して確定してください。(ここではおこないませんが、Title、Assigned To など SharePoint ワークフローでデフォルトで定義されている属性についても同様の方法で連携することができます。)

このフォームも後ほど発行 (Publish) をしますので、ここまでで一旦、xsn ファイルとしてディスクに保存しておきましょう。

今日はここまでで終了です。

第2回 コード実装編
第3回 配置・インストール編
第4回 動作の確認とデバッグ編

 

Comments (1)

  1. こんにちは。 5日(日)の Community Ring は、休日にも関わらず多くの方にご参加いただきありがとうございます。また技術の輪を共に広げましょう。 ところでお約束のデモのソースコードを掲載します。

Skip to main content