関連付け列
原文の記事の投稿日: 2011 年 5 月 2 日 (月曜日)
こんにちは。SharePoint Designer チーム PM の JongHwa Lim です。ごぶさたしています。昨年 4 月以来、新しい投稿がなかったので、このサイトはもう終了しているものと思われていたかもしれませんが、再開します。これからは毎月少なくとも 1 回は新しい記事を投稿して、読者とユーザーの皆様とつながり続けていきたいと考えています。
今回は、サイト再開の手始めに (また、今後の投稿のウォーミング アップも兼ねて)、SharePoint Designer 2010 (SPD) の小さいながらとても便利な新機能を紹介します。
関連付け列を必要とするのはどんな場合か
まず、前提となる状況を想定しましょう。SPD を使い慣れているワークフロー作成者が、多数のリストやドキュメント ライブラリで使用するワークフローを作成する必要があり、ワークフロー固有のフィールドも必要だとします。どうすればこれを実装できるでしょうか。この目的を実現しようとする場合、次のような複数の方法が考えられます。
· リスト ワークフロー
o まず思いつくのがリスト ワークフローです。リストに直接、ワークフロー固有のフィールドを追加します。SharePoint Designer ではデザイン時にフィールドを確認できるので、それらのフィールドを使用するワークフロー ロジックを作成できます。
o しかし、他のリストやドキュメント ライブラリでこのワークフローを再利用する場合、この方法ではうまくいきません。
· 再利用可能なワークフロー
o SPD のワークフローにもう少し詳しければ、再利用可能なワークフローなら再利用の問題を解決できると考えるでしょう。しかし、ワークフロー デザイナーを開いてみると、設定可能なフィールドはタイトルのみであり、読み取り可能なフィールドも、コンテンツ タイプ、作成日時、作成者、ID、更新日時、更新者、およびタイトルのみになっています。
o ワークフロー ロジックの作成に必要なフィールドを使用できません。
· 基本コンテンツ タイプを使用する再利用可能なワークフロー
o SPD ワークフローの上級ユーザーなら、再利用可能なワークフローの基本コンテンツ タイプの概念を理解しているでしょう。
o まず、新しいコンテンツ タイプを作成し、そのコンテンツ タイプに必要なフィールドを追加します。次に、[再利用可能なワークフローの作成] (Create Reusable Workflow) ダイアログ ボックスで、基本コンテンツ タイプとして作成したコンテンツ タイプを指定します。
o ワークフロー デザイナーでフィールドを確認できるので、必要な作業ができます。このワークフローにコンテンツ タイプを関連付け、そのコンテンツ タイプをリストやドキュメント ライブラリに追加すれば、再利用の問題もありません。
o しかし、新しいフィールドが必要になった場合はどうでしょうか。新しいフィールドが必要になるたびに、サーバーや SPD でサイト コンテンツ タイプやサイト列の UI を変更しなければならなくなります。
o 弱点はほかにもあります。[テンプレートとして保存] (Save as Template) を使用してワークフローを移動すると、基本コンテンツ タイプがユーザー設定コンテンツ タイプである場合や、コンテンツ タイプにユーザー設定のサイト列が含まれている場合には、パッケージ化解除したワークフローからは基本コンテンツ タイプの一部の情報が失われます。
· 再利用可能なワークフローと関連付け列
o 基本コンテンツ タイプの概念を理解している SPD 熟練者なら、関連付け列のことも知っているでしょう。
o ワークフローの作成を開始する時点で、必要なフィールドを最初から関連付け列として作成します。既存のサイト列または新規の列のどちらにするかを選択できます。ワークフロー デザイナー、サイト コンテンツ タイプ、サイト列の UI を行ったり来たりする必要はありません。1 つの場所ですべての作業が完結します。
o しかも、再利用に関する問題も発生しません。再利用可能なワークフローの定義にフィールドも付随し、ワークフロー パッケージで対応されるからです。
関連付け列とは
関連付け列に関するヘルプ ファイルを既に検索した読者もいらっしゃるでしょう。たとえば、次のような記述があります。
· 既定では、再利用可能なワークフローに特定のリストまたはライブラリのコンテキストは含まれません。そのため、再利用可能なワークフローでは、リストとライブラリの間で共通の列 (作成日時、作成者など) のみが既定で提供されます。
再利用可能なワークフローを関連付けたリストまたはライブラリに特定の列が必要な場合は、そのような列を関連付け列として追加できます。再利用可能なワークフローがリストやライブラリに関連付けられると、関連付け列がそのリストやライブラリに自動的に追加されます。
· 関連付け列
再利用可能なワークフローが関連付けられるリストまたはライブラリ内に特定の列が必要な場合、これらの列を関連付け列として追加できます。再利用可能なワークフローがリストやライブラリに関連付けられると、自動的に、関連付け列がそのリストやライブラリに追加されます。
· (リボン ボタンのツールチップ)
ワークフローがリストに関連付けられたときに、そのリストに追加される列を定義します。このオプションは、サイトのワークフローでは使用できません。
これらの記述はどれも、関連付け列とその用途について的確に述べています。関連付け列は、再利用可能なワークフローを作成するとき、現在のアイテムのフィールドを更新する適切な方法がないという現実的な問題を解決するために導入されました。SharePoint Designer 2010 より以前は "再利用可能なワークフロー" の概念がなかったので、関連付け列もありませんでした。関連付け列がないときは、代わりに基本コンテンツ タイプを使用するしかありませんでした。しかし、その場合の関連付けは基本コンテンツ タイプやそこから継承されるコンテンツ タイプに限定されるので、関連付けとデザイン時 UX に関するさまざまな制約が発生し、作成者はワークフロー デザイナーからサイト コンテンツ タイプやサイト列 UI へ行き来しなければなりませんでした。
関連付け列の作成方法
関連付け列の作成は簡単です。ここで手順の一例を紹介します。まず、次に示す [関連付け列] (Association Columns) というリボン ボタンをクリックします。
クリックすると、次のような警告ダイアログ ボックスが表示されます。
[OK] をクリックすると、関連付け列のメイン ダイアログ ボックスが表示されます。
[サイト列の選択] (Select Site Column) と [新しい列の追加] (Add New Column) のどちらかを選択します。サイト列を選択する場合は、次のダイアログ ボックスが表示されます。
[住所] (Address) フィールドを選択すると、そのフィールドがメイン ダイアログ ボックスに追加されます。
新しい列を追加する場合は、次の UI が表示され、新しい列を定義できます。
この例では、[承認者のコメント] (Comments from Approvers) という複数行テキスト フィールドを作成しました。
新しい列を選択すると [変更] (Modify) が有効になりますが、既存の列を選択するとこれは無効になります。
[OK] をクリックすると、関連付け列の設定作業は完了です。デザイナー画面に [住所] (Address) フィールドと [承認者のコメント] (Comments from Approvers) フィールドが表示されます。
しくみ
関連付け列は内部的にサイト列を使用します。UI に [サイト列の選択] (Select Site Column) ボタンが表示されるのはそのためです。新しく作成した場合もサイト列から選択した場合も、関連付け列は wfconfig ファイルに保存され、デザイン時に使用できるようになります。
ただし、ワークフローを発行する前に wfconfig を確認しても、フィールド定義は次のようになっています。サイト列は発行時に作成されて、wfconfig 内のフィールド定義に反映されるからです。
したがって、発行後に関連付け列のダイアログ ボックスをもう一度表示すると、[新しい列] (New Column) が [既存の列] (Existing Column) に変わって変更が不可になっています。
また、再利用可能なワークフローをリストやドキュメント ライブラリに関連付けると、そのリストやドキュメント ライブラリに関連付け列が追加されるので、再利用可能なワークフローでそのフィールドを参照しても問題なく動作します。
パッケージ化
再利用可能なワークフローをパッケージ化し、別のサイトでパッケージ化解除すると、関連付け列も一緒にパッケージ化、パッケージ化解除されて維持されます。これに対し、ユーザー設定の基本コンテンツ タイプと基本コンテンツ タイプ内のユーザー設定サイト列は完全にはパッケージ化されないので、移動時に情報が失われる可能性があります。
制限
再利用可能なワークフローをコンテンツ タイプに関連付けた場合、そのコンテンツ タイプをリストやドキュメント ライブラリに追加すると、関連付け列がリストやドキュメント ライブラリに追加されます。関連付け列は、コンテンツ タイプには直接追加されません。
これはローカライズされたブログ投稿です。原文の記事は、「Association Columns」をご覧ください。