リスト ワークフロー、サイト ワークフロー、および再利用可能なワークフローのパッケージ化、およびパッケージを展開する方法

原文の記事の投稿日: 2012 年 8 月 30 日 (木曜日)

こんにちは。SharePoint Designer (SPD) チームのプログラム マネージャー、JongHwa Lim です。jonghwal の写真

今日は、SharePoint Designer 2010 と SharePoint Server 2010 から大幅に強化されたワークフロー パッケージ機能を紹介します。SharePoint Designer 2010 のパッケージ機能は、開発環境でワークフローを開発し、それを運用環境に展開するというシナリオでよく使用されていましたが、残念ながら、再利用可能なワークフローでしか利用することができませんでした。

SharePoint Designer 2013、SharePoint Server 2013、および Azure Workflow Service では、リスト ワークフロー、サイト ワークフロー、再利用可能なワークフローの 3 つのワークフローすべてがサポートされます。これは、素晴らしいことです。もう再利用可能なワークフローに縛られる必要はありません。パッケージ機能のために、リスト ワークフローを再利用可能なワークフローに移行しなければならなかったのは、もう過去の話です。

例があるとわかりやすいので、ここではサンプル ワークフローを作成し、そのワークフローをターゲット サイトで再利用する方法を説明します。

例: [休暇申請] (Vacation Request) リスト ワークフロー

開発環境でリスト ワークフローを作成するとします。ワークフローには [休暇] (Vacation) リストと [休暇申請] (Vacation Request) リストの 2 つのリストがあります。[休暇] (Vacation) リストには、すべての従業員の残存休暇日数が登録されています。[休暇申請] (Vacation Request) リストでは申請アイテムを作成し、休暇承認を申請します。

必要なリストを作成する (開発環境)

繰り返しになりますが、2 つのリストが必要なので、ここでは以下の 2 つのリストを作成しました。"タスク リスト" と "履歴リスト" の既定の設定が使用されることに注意してください。

clip_image001

clip_image002

[休暇申請] (Vacation Request) リストのワークフローを作成する

必要なリストの準備ができたので、SPD を使用してサーバーに接続し、[リスト ワークフロー] (List Workflow) をクリックして、[休暇申請] (Vacation Request) を選択します。以下のダイアログ ボックスが表示されたら、ワークフロー名を入力し、プラットフォームの種類として [SharePoint 2013 ワークフロー] (SharePoint 2013 Workflow) を選択します。

clip_image003

ロジックを入力し、ワークフローを発行する

SPD キャンバスでは、テキスト ベースのデザイナーを選択できます。Visio Professional がインストールされている場合は、ビジュアル デザイナーを選択してワークフローを作成することもできます。このブログではテキスト ベースのデザイナーを使用しますが、今後のブログ投稿でビジュアル デザイナーを説明する予定です。ビジュアル デザイナーに興味のある方は、そちらの投稿をご覧ください。

次のロジックを追加します。気を付けなければならない点は少しありますが、一般的には非常に簡単です。ロジックは 5 つのステージで構成されます。それぞれのタイトルを見れば、そのステージの目的がわかりますが、ここでは、各ステージについてさらに詳しく説明します。

  • [残存休暇の有無を確認] (Check if remaining vacation exists) ステージ - 申請者の残存休暇日数を取得し、申請された休暇日数と比較します
  • [承認プロセス] (Approval Process) ステージ - 申請された休暇日数の承認を申請します
  • [承認済み] (Approved) ステージ - 承認されたら、新しく計算された値で [休暇] (Vacation) リストを更新します
  • [拒否] (Rejected) ステージ - 拒否メールを送信します
  • [残存休暇不足] (insufficient vacation) ステージ - 残存休暇日数が足りないことを通知するメールを送信します

image

clip_image005

気を付けなければならないのは、[休暇] (Vacation) リストから残存休暇日数を取得する、または [休暇] (Vacation) リストを更新するときに使用する以下のルックアップ UI です。

clip_image006

clip_image007

必要に応じて、"アイテムの作成時に自動的に開始" オプションをオンにします。

clip_image008

ワークフローを発行するとき、ワークフローの関連付けが作成されます。また、裏では状態列が作成されます。

リストを STP パッケージにパッケージ化する

ターゲット サーバーに必要なリストとスキーマが確実に含まれるようにする方法はいくつかありますが、一番良いのは STP パッケージを使用することでしょう。そこで、[休暇] (Vacation) リストと [休暇申請] (Vacation Request) リストを STP パッケージにパッケージ化してみましょう。

これを行うには、以下に示すように、サーバー UI または SPD UI を使用します。

clip_image009

clip_image010

すると、次の画面が表示されます。この画面では名前を入力できるほか、コンテンツをパッケージ化するように選択することもできます。

clip_image011

SharePoint 2013 リスト ワークフローは、[コンテンツを含む] (Include Content) がオンかどうかに関係なく、パッケージ化されないことに注意してください。

成功すると、パッケージをダウンロードできる場所が表示されます。

clip_image012

リンクをクリックし、後で使用できるようにパッケージをダウンロードします。

成功したら、2 つの STP パッケージができるはずです。1 つは [休暇申請] (Vacation Request) リスト、もう 1 つは [休暇] (Vacations) リスト (残存休暇日数が含まれるリスト) のパッケージです。

ワークフローを WSP パッケージにパッケージ化する

リスト ワークフローをパッケージ化するには、ワークフローの概要ページに移動して、リボンの [テンプレートとして保存] (Save as Template) ボタンをクリックします。

clip_image013

次のダイアログが表示されます。

clip_image014

ナビゲーション ウィンドウに [サイトのリソース ファイル] (Site Assets) ライブラリが表示されます。リスト ワークフロー パッケージは、そのライブラリの中にあります (パッケージを表示するには、ページを更新しなければならないことがあります)。

リボンの [ファイルのエクスポート] (Export File) ボタンを使用して、そのパッケージをローカル コンピューターに保存します。

clip_image015

STP パッケージを展開する

ブラウザーでターゲット サイト (または運用環境) を開き、[サイトの設定] (Site Settings) に移動します。[Web デザイナー ギャラリー] (Web Designer Galleries) グループの下に、[リスト テンプレート] (List templates) メニューが表示されます。

clip_image016

[ファイル] (Files) メニューの [ドキュメントのアップロード] (Upload Dcument) を使用して、2 つの STP パッケージをアップロードします。

clip_image017

展開されたリスト テンプレートを使用してリストを作成する

展開されたリスト テンプレートから 2 つのリストを作成できます。サーバーのナビゲーション メニューで [サイト コンテンツ] (Site Contents) に移動し、[アプリケーションの追加] (add an app) をクリックしてください。[休暇] (Vacation) および [休暇申請] (Vacation Request) アイコンが表示されるはずです。

clip_image018

これらのメニューを使用して、[休暇] (Vacation) リストおよび [休暇申請] (Vacation Request) リストを作成します。

WSP パッケージを展開し、アクティブ化する

WSP パッケージを展開する作業は、STP リスト テンプレートの展開とは若干異なります。このパッケージは、[サイトの設定] (Site Settings) の [Web デザイナー ギャラリー] (Web Designer Galleries) グループの [ソリューション] (Solutions) ライブラリにアップロードする必要があります。

clip_image019

ダイアログが表示されるので、ここでパッケージ (ソリューション) をアクティブにします。

clip_image020

機能をアクティブにする

ソリューションをアクティブにすると、[サイトの設定] (Site Settings) の [サイトの操作] (Site Actions) の [サイト機能の管理] (Manage site features) に新しいサイト機能が表示されます。

clip_image021

これで終わりです。このワークフローは、パッケージ化するときに使用した名前を使って見つけることができます。[アクティブ化] (Activate) ボタンをクリックし、そのボタンが [非アクティブ化] (Deactivate) に変わるか、[アクティブ] (Active) アイコンが表示されるまで待ちます。ボタンの表示が変わるか、アイコンが表示されると、機能がアクティブ化されたことになります。

clip_image022

(オプション) SPD からワークフローを開く

ターゲット サイトのワークフローを更新したい場合もあるでしょう。心配いりません。ワークフローは開発環境のものとまったく同じです。展開されたワークフローは SPD に正確に表示されます。

clip_image023

このワークフローは問題なく開きます。概要ページの値は変更されず、もちろん、ロジックも保持されます。

image

(オプション) ワークフローを実行する

サーバーからワークフローを実行すると、同じ名前の列 ([ワークフローの状態] (workflow status) 列) が 2 つ表示される場合があります。これは既知の問題です。1 つはソース サーバー (STP からパッケージ化) の列で、もう 1 つはターゲット サイトで作成されたものです。リスト ビューを更新し、古い列を非表示にしてください。

STP パッケージに代わる手段

ターゲット サイトに必要なサイト (ワークフロー ロジックで使用されているリスト、およびワークフロー タスク リスト/ワークフロー履歴リスト) が含まれていれば、ソリューションは適切に展開されます。ただし、ワークフローで参照されるリストおよびリストの列は、同じリスト テンプレートとフィールドの種類を使用して作成することをお勧めします。種類が異なっていると、機能のアクティブ化中にパッケージでエラーが発生する可能性があります。または、実行時にワークフローでエラーが発生します。

[休暇] (Vacation) または [休暇申請] (Vacation Request) リストが存在しないサイトにワークフロー パッケージが展開された場合

サイト機能のアクティブ化に失敗します。

clip_image025

エラー メッセージには簡単な説明しか表示されませんが、ULS ログには次のようなヒントが示されます。

"ワークフロー XAML は次のエラーにより検証に失敗しました: テキスト '$ListId:Lists/Vacation;' から 'ListId' を作成できませんでした"

ただし、一度機能のアクティブ化に失敗すると、必要なリストを作成しても、機能を再アクティブ化できない場合があります。これは、ワークフローの定義が不完全に展開されているからです。この場合は、次の作業を行う必要があります。

  • SPD を開き、機能のアクティブ化中にエラーが発生したワークフロー定義を削除します
  • ソリューションを非アクティブ化し、ソリューションを削除します
  • ソリューションをアップロードし、アクティブにします
  • サイト機能をアクティブにします

これで問題が解決されるはずです。

既知の問題

ワークフロー パッケージの既知の問題を次に示します。

  • リストの相対 URL ("Lists/Vacation" など) は同じにする必要があります。特定の名前でリストを作成し、後からその名前を変更しても、リストの URL は変更されません。URL は元の表示名に基づいているからです。つまり、更新後のリスト名に基づいてワークフローをパッケージ化しても、ワークフローは引き続きターゲット サイトの古い名前に基づいてリスト URL を探します。したがって、ターゲット サイトでリストを再作成する場合、そのリストには、必ず最初に指定した名前を付ける必要があります。更新後の名前は使用しないようにしてください。これにより、リストの URL が保持されます。一度リストを作成したら、そのリスト名は、更新後の名前に変更できます。
  • Unicode または DBCS 名を持つワークフローは、"WorkflowSolution.wsp" というハードコードされた既定の名前で wsp ファイルにパッケージ化されます。
  • 更新されたソリューション リストを確認するには、サイトのアセットに移動した後、手動でページを更新する必要があります。
  • ターゲット サーバーにワークフロー タスク リストおよびワークフロー履歴リストがない場合、[ワークフロー設定] (Workflow Settings) ページでワークフローをクリックすると、以下のエラーが表示されます。このエラーは、ワークフローが作成されたことがないターゲット サーバーに、ワークフローが展開されたときに発生します。これを解決するには、SPD でダミーのワークフローを作成して発行し、ワークフロー タスク リストとワークフロー履歴リストを作成します。その後、展開されたワークフローを SPD で開き、ワークフロー タスク リストとワークフロー履歴リストの設定を調整して、ワークフローを再発行します。clip_image026
  • プロジェクトのワークフローは、通常のサイトのワークフローのようにパッケージ化されます。ただし、確実に動作させるには、EPT、ステージ、カスタム列などのプロジェクト エンティティもパッケージ化する必要があります。プロジェクト チームが提供するプロジェクト ワークフローのガイドラインを参照してください。

お読みいただき、ありがとうございました。

JongHwa

これはローカライズされたブログ投稿です。原文の記事は、「Packaging List, Site, and Reusable Workflow and How to Deploy the Package」をご覧ください。