ワークフロー内の関連付けと開始のフォーム データにアクセスする
最終更新日: 2010年5月7日
適用対象: SharePoint Server 2010
ワークフロー インスタンスが開始されると、ユーザーから収集された関連付けと開始のデータはすべて、SPWorkflowActivationProperties オブジェクトに格納されます。このオブジェクトには、OnWorkflowActivated アクティビティの WorkflowProperties プロパティによってアクセスできます。このオブジェクトには、すべてのワークフローの標準的な情報に加え、ワークフロー定義 XML や、ワークフローの関連付けフォームおよび開始フォームからのカスタム データが格納されます。WorkflowProperties プロパティに指定する SPWorkflowActivationProperties オブジェクト変数にアクセスすることで、ワークフローに渡される情報を使用できます。
SPWorkflowActivationProperties オブジェクトには、HistoryListId、ItemId、TaskListId、WorkflowId などの、SharePoint Foundation のすべてのワークフロー インスタンスにおいて標準であるプロパティのセットが格納されます。
さらに、このオブジェクトには AssociationData プロパティと InitiationData プロパティによって表現される文字列も含まれます。これらのプロパティはそれぞれ、ワークフローの関連付けと開始のカスタム プロパティを格納します。
Microsoft Office InfoPath フォームの場合、これらのプロパティは、データの収集に使用されたフォームのスキーマに準拠する XML 文字列を返します。これらのカスタム プロパティにアクセスするには、XML 文字列を解析するコードを記述する必要があります。
ワークフロー開発者は、XML 文字列を解析してそこに含まれるカスタム プロパティを識別するために使用するメソッドを決定できます。この手順のためには、Visual Studio のコマンド ライン ツールである xsd.exe を使用して、ワークフロー フォームのスキーマに基づいたクラスを生成します。次に、SPWorkflowActivationProperties オブジェクトの InitiationData プロパティによって返された XML 文字列を逆シリアル化することで、その型のオブジェクト内に、受け取ったフォーム データを格納します。
For more information about setting activity properties, see the Windows Workflow Foundation SDK.
ワークフロー内の関連付けまたは開始のフォーム データにアクセスするには
InfoPath の関連付けフォームまたは開始フォームのスキーマを抽出します。
InfoPath で、保存して発行したワークフロー フォームを開きます。
フォームをソース ファイルとして保存するため、[ファイル] メニューの [ソース ファイルとして保存] をクリックします。フォーム ソース ファイルを保存する場所に移動し、[OK] をクリックします。
InfoPath はスキーマ ファイルなどのフォーム ソース ファイルのコレクションを、指定された場所に保存します。フォーム スキーマ ファイルの名前は常に myschema.xsd になります。
コマンドライン ツールの xsd.exe を使用して、フォーム スキーマ ファイル (.xsd) に基づいた新しいクラス ファイルを生成します。
Visual Studio コマンド プロンプトを開きます。[スタート] ボタンをクリックし、[すべてのプログラム]、[Microsoft Visual Studio 2010]、[Visual Studio Tools] の順にポイントし、[Visual Studio 2010 コマンド プロンプト (2010)] をクリックします。
注意
既定では、Visual Studio 2010 は xsd.exe コマンド ライン ツールを次の場所にインストールします。C: は、Visual Studio 2010 をインストールしたドライブを表します。C:\Program Files\Microsoft Visual Studio 10\SDK\v2.0\Bin
フォーム スキーマ (.xsd) ファイルの場所に移動し、次のコマンドを実行します : xsd myschema.xsd /c /o:output_directory
xsd.exe ツールは、フォーム スキーマに基づいて新しいクラス ファイルを生成します。このファイルにはスキーマ ファイルと同じ、myschema.cs という名前が付けられます。ファイル内のクラスにはスキーマのルート要素と同じ名前が付けられます (これはフォーム フィールド コレクションと同じ名前です)。
注意
既定の名前の myfields を使用するのではなく、フォーム フィールド コレクションに一意の名前を指定すると、フォーム スキーマ ファイルから生成されるクラスにも一意の名前が付けられるようにするのに有用です。これは特に、複数のフォームを使用するワークフローのプログラミングを行っている場合に重要です。
Visual Studio で、作業対象のワークフロー プロジェクトを開き、そこに新しいクラス ファイルを追加します。
ワークフローの関連付けまたは開始のデータを使用して、新しいクラスの新しいインスタンスをシリアル化するコードをワークフローに追加します。
たとえば次のコードは、workflowProps という名前の SPWorkflowActivationProperties オブジェクト変数の InitiationData プロパティにある、InitForm 型の新しいオブジェクトをシリアル化します。この例は、開始データの収集に使用される InfoPath フォームのスキーマと一致するスキーマを持つ、InitForms というクラスを、開発者が作成済みであることを前提にしています。
using System.Xml.Serialization; using System.Xml; … XmlSerializer serializer = new XmlSerializer(typeof(InitForm)); XmlTextReader reader = new XmlTextReader(new System.IO.StringReader(workflowProps.InitiationData)); InitForm initform = (InitForm) serializer.Deserialize(reader);
Imports System.Xml.Serialization Imports System.Xml … Dim serializer As New XmlSerializer(GetType(InitForm)) Dim reader As New XmlTextReader(New System.IO.StringReader(workflowProps.InitiationData)) Dim initform As InitForm = CType(serializer.Deserialize(reader), InitForm)
フォーム スキーマに基づいて、クラスのプロパティとしてカスタム プロパティにアクセスするコードをワークフローに追加します。
次のコードは、前の例に基づいて構築されています。このコードは、InitForm オブジェクトの 3 つのカスタム プロパティにアクセスし、それらを文字列変数に代入しています。
assignee = initform.assignee; instructions = initform.instructions; comments = initform.comments;
assignee = initform.assignee instructions = initform.instructions comments = initform.comments
関連項目
タスク
[方法] InfoPath ワークフロー フォームをデザインする
[方法] 関連付けデータと初期データを使用するワークフロー フォームを設計する