カスタム ワークフローの作成 (マスター データ サービス)

マスター データ サービス は、ビジネス ルールを使用して基本的なワークフロー ソリューションを作成します (たとえば、指定した条件に基づいてデータを自動的に更新および検証し、電子メール通知を送信するなど)。 組み込みのワークフロー アクションよりも複雑な処理が必要な場合は、カスタム ワークフローを使用します。 カスタム ワークフローは、ユーザーが作成する .NET アセンブリです。 作成したワークフロー アセンブリが呼び出された際には、記述したコードを通じて、状況に応じた任意のアクションを実行できます。 たとえば、複数階層の承認や複雑な意思決定ツリーなど、複合イベント処理を必要とするワークフローの場合は、マスター データ サービス を構成することで、データを分析し、データの承認のための送信先を決定するカスタム ワークフローを開始できます。

カスタム ワークフローの処理方法

カスタム ワークフローの処理には、マスター データ マネージャー Web アプリケーション、SQL Server MDS Workflow Integration Service、およびワークフロー ハンドラー アセンブリの 3 つの主要コンポーネントが関与します。 これらのコンポーネントは、カスタム ワークフローを次のように処理します。

  1. ユーザーが マスター データ マネージャー を使用して、ワークフローを開始するエンティティを検証します。

  2. マスター データ マネージャー は、ビジネス ルール条件を満たすメンバーを マスター データ サービス データベース内の Service Broker キューに送ります。

  3. SQL Server MDS Workflow Integration Service は、一定の間隔で マスター データ サービス データベース内のストアド プロシージャを呼び出します。

  4. このストアド プロシージャは、Service Broker キュー内にレコードを見つけると、それらを SQL Server MDS Workflow Integration Service に返します。

  5. SQL Server MDS Workflow Integration Services は、それらのデータをワークフロー ハンドラー アセンブリにルーティングします。

注意

注: SQL Server MDS Workflow Integration Service は単純な処理をトリガーするためのものです。 カスタム コードで複雑な処理を行う必要がある場合は、個別のスレッド内か、またはワークフロー プロセスの外部で処理を完了してください。

カスタム ワークフロー向けのマスター データ サービスの構成

カスタム ワークフローを作成するには、カスタム コードの記述と マスター データ サービス の構成を行って、ワークフロー データをワークフロー ハンドラーに渡す必要があります。 カスタム ワークフロー処理を有効にするには、次の手順を実行します。

  1. Microsoft.MasterDataServices.WorkflowTypeExtender.IWorkflowTypeExtender を実装する .NET アセンブリ作成します。

  2. マスター データ サービス データベースに接続してワークフロー ハンドラーにタグを関連付けるよう、SQL Server MDS Workflow Integration Services を構成します。

  3. SQL Server MDS Workflow Integration Service を開始します。

  4. ワークフロー ハンドラーの名前でタグ付けされたワークフローを開始する マスター データ マネージャー 内で、ビジネス ルールを作成します。

  5. そのビジネス ルールを、カスタム ワークフローをトリガーするメンバーに適用します。

ワークフロー ハンドラー アセンブリの作成

カスタム ワークフローは、Microsoft.MasterDataServices.WorkflowTypeExtender.IWorkflowTypeExtender インターフェイスを実装する .NET クラス ライブラリ アセンブリです。 SQL Server MDS Workflow Integration Service は、StartWorkflow メソッドを呼び出してコードを実行します。 StartWorkflow を実装するコード例については、「カスタム ワークフローの例 (Master Data Services)」を参照してください。

カスタム ワークフローを処理するために SQL Server MDS Workflow Integration Service から呼び出すことができるアセンブリを、Visual Studio 2010 を使用して作成するには、次の手順を実行します。

  1. Visual Studio 2010 で、目的の言語を使用する新しい [クラス ライブラリ] プロジェクトを作成します。 C# クラス ライブラリを作成するには、[Visual C#\Windows] プロジェクト タイプを選択し、[クラス ライブラリ] テンプレートを選択します。 プロジェクトの名前 (MDSWorkflowTest など) を入力し、[OK] をクリックします。

  2. Microsoft.MasterDataServices.WorkflowTypeExtender.dll への参照を追加します。 このアセンブリは、<インストール フォルダー>\Master Data Services\WebApplication\bin にあります。

  3. C# コード ファイルに、'using Microsoft.MasterDataServices.Core.Workflow;' を追加します。

  4. クラス宣言で、Microsoft.MasterDataServices.WorkflowTypeExtender.IWorkflowTypeExtender を継承します。 クラス宣言は次のようになります: 'public class WorkflowTester : IWorkflowTypeExtender'

  5. Microsoft.MasterDataServices.WorkflowTypeExtender.IWorkflowTypeExtender インターフェイスを実装します。 StartWorkflow メソッドは、ワークフローを開始するために SQL Server MDS Workflow Integration Service によって呼び出されます。

  6. <インストール フォルダー>\Master Data Services\WebApplication\bin 内にある SQL Server MDS Workflow Integration Service 実行可能ファイル (Microsoft.MasterDataServices.Workflow.exe) の場所に、アセンブリをコピーします。

SQL Server MDS Workflow Integration Service の構成

マスター データ サービス 構成ファイルを編集して、マスター データ サービス データベース用の接続情報を含め、ワークフロー ハンドラー アセンブリにタグを関連付けるには、次の手順を実行します。

  1. <インストール フォルダー>\Master Data Services\WebApplication\bin にある Microsoft.MasterDataServices.Workflow.exe.config を見つけます。

  2. "ConnectionString" 設定に、マスター データ サービス データベース接続情報を追加します。 SQL Server インストールで大文字と小文字を区別する照合順序が使用されている場合、データベースの名前は、データベース内と同様の大文字/小文字で入力する必要があります。 たとえば、設定タグの全体は次のようになります。

    <setting name="ConnectionString" serializeAs="String">
        <value>Server=myServer;Database=myDatabase;Integrated Security=True</value>
    </setting>
    
  3. "ConnectionString" 設定下で "WorkflowTypeExtenders" 設定を追加して、ワークフロー ハンドラー アセンブリにタグ名を関連付けます。 次に例を示します。

    <setting name="WorkflowTypeExtenders" serializeAs="String">
        <value>TEST=MDSWorkflowTestLib.WorkflowTester, MDSWorkflowTestLib</value>
    </setting>
    

    <value> タグの内部テキストは、<ワークフロー タグ>=<アセンブリ修飾型のワークフロー タイプ名> という形式になります。 <ワークフロー タグ> は、マスター データ マネージャー 内でビジネス ルールを作成する際に、ワークフロー ハンドラー アセンブリを識別するために使用する名前です。 <アセンブリ修飾型のワークフロー タイプ名> は、名前空間で修飾されたワークフロー クラス名と、その後のコンマ、さらにその後の、アセンブリの表示名で指定します。 アセンブリに厳密な名前が指定されている場合は、バージョン情報と PublicKeyToken も含める必要があります。 異なる種類のワークフローを使用するために複数のワークフロー ハンドラーを作成した場合は、複数の <setting> タグを含めることができます。

注意

サーバーの構成によっては、Microsoft.MasterDataServices.Workflow.exe.config ファイルを保存する際に、"アクセスが拒否されました" というエラーが返されることがあります。 その場合は、サーバー上のユーザー アカウント制御 (UAC) を一時的に無効にしてください。 これを行うには、コントロール パネルを開き、[システムとセキュリティ] をクリックします。 [アクション センター] で、[ユーザー アカウント制御設定の変更] をクリックします。 [ユーザー アカウント制御の設定] ダイアログで、スライダー バーを一番下まで下げ、通知が返されないようにします。 コンピューターを再起動し、上記の手順を繰り返して、構成ファイルを編集します。 ファイルを保存したら、UAC 設定を既定のレベルにリセットしてください。

SQL Server MDS Workflow Integration Service の開始

既定では、SQL Server MDS Workflow Integration Service はインストールされていません。 使用する前に、まずこのサービスをインストールする必要があります。 最大限のセキュリティを確保するため、このサービス用のローカル ユーザーを作成し、そのユーザーに対して、ワークフロー操作の実行に必要な権限のみを付与してください。 ユーザーを作成し、サービスをインストールして、サービスを開始するには、次の手順を実行します。

  1. [ローカル ユーザーとグループ] マネージャーを使用して、ローカル ユーザー (この例では mds_workflow_service) を作成します。

  2. SQL Server Management Studio を使用して、mds_workflow_service ユーザーに、[mdm].[udpExternalActionsGet] ストアド プロシージャを実行する権限を付与します。 これを行うには、mds_workflow_service アカウント用の新規ログインを作成し、マスター データ サービス データベース内に新規ユーザーを作成して、そのユーザーを mds_workflow_service ログインにマップした後、そのユーザーに、[mdm].[udpExternalActionsGet] ストアド プロシージャに対する EXECUTE 権限を付与します。

  3. mds_workflow_service ユーザーに、ワークフロー ハンドラー アセンブリを実行する権限を付与します。 これを行うには、ワークフロー ハンドラー アセンブリの [プロパティ][セキュリティ] タブに mds_workflow_service ユーザーを追加し、その mds_workflow_service ユーザーに、READ および EXECUTE 権限を付与します。

  4. mds_workflow_service ユーザーに、SQL Server MDS Workflow Integration Service 実行可能ファイルを実行する権限を付与します。 これを行うには、Microsoft.MasterDataServices.Workflow.exe (<インストール フォルダー>\Master Data Services\WebApplication\bin 内) の [プロパティ][セキュリティ] タブに mds_workflow_service ユーザーを追加し、その mds_workflow_service ユーザーに READ および EXECUTE 権限を付与します。

  5. .NET インストール ユーティリティ (InstallUtil.exe) を使用して、SQL Server MDS Workflow Integration Service をインストールします。 InstallUtil.exe は、.NET インストール フォルダー (C:\Windows\Microsoft.NET\Framework\v4.0.30319\ など) にあります。 SQL Server MDS Workflow Integration Service は、管理者特権のコマンド プロンプトで次のコマンドを入力してインストールします。

    C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil Microsoft.MasterDataServices.Workflow.exe
    

    インストール中にユーザーの指定を求められたら、mds_workflow_service ユーザーを指定します。

  6. サービス スナップインを使用して、SQL Server MDS Workflow Integration Service を開始します。 これを行うには、サービス スナップインで SQL Server MDS Workflow Integration Service を見つけて選択し、[開始] リンクをクリックします。

ワークフロー ビジネス ルールの作成

マスター データ マネージャー を使用して、適用時にワークフローを開始するビジネス ルールを作成およびパブリッシュします。 ビジネス ルールには、属性値を変更するアクションを必ず含めて、そのルールが一度適用された後、false と評価されるようにしてください。 たとえば、Price 属性値が 500 より大きく、Approved 属性値が空白の場合に、true と評価されるビジネス ルールがあるとします。 その場合、そのルールに次の 2 つのアクションを含めることができます。1 つは、Approved 属性値を Pending に設定するアクション。もう 1 つは、ワークフローを開始するアクションです。 また、"has changed" 条件を使用するルールを作成し、追跡グループを変更するための属性を追加する方法もあります。 ビジネス ルールの詳細については、「ビジネス ルール (マスター データ サービス)」を参照してください。

カスタム ワークフローを開始するビジネス ルールを マスター データ マネージャー で作成するには、次の手順を実行します。

  1. マスター データ マネージャー のビジネス ルール エディターで、ビジネス ルールの条件を指定した後に、ワークフローの開始アクションを [外部アクション] ボックスの一覧から [THEN] ペインの [アクション] ラベルへドラッグします。

  2. [アクションの編集] ペインの [ワークフローの種類] ボックスに、ワークフロー ハンドラー アセンブリを識別するタグを入力します。 これは、アセンブリの構成ファイルで指定したタグです (例: TEST)。

  3. 必要に応じて、[メッセージにメンバーのデータを含める] チェック ボックスをオンにします。 これをオンにすると、ワークフロー ハンドラーに渡される XML に、属性の名前と値が含められます。

  4. [ワークフロー サイト] ボックスに、Web サイトの名前を入力します。 これは、使用するカスタム ワークフローには該当しない場合がありますが、追加のコンテキスト用に使用できます。

  5. [ワークフロー名] ボックスに、Visual Studio からのワークフローの名前を入力します。 これは、使用するカスタム ワークフローには該当しない場合がありますが、追加のコンテキスト用に使用できます。

  6. ビジネス ルールを作成およびパブリッシュします。

ビジネス ルールを適用してワークフローを開始する

データにビジネス ルールを適用して、ワークフローを開始します。 これを行うには、マスター データ マネージャー を使用して、検証するメンバーを含んだエンティティを編集します。 [ビジネス ルールの適用] をクリックします。 ビジネス ルールへの応答として、マスター データ マネージャー は、マスター データ サービス データベースの Service Broker キューに値を設定します。 SQL Server MDS Workflow Integration Service は、キューをチェックすると、指定されたワークフロー ハンドラー アセンブリにデータを送信し、キューをクリアします。 ワークフロー ハンドラー アセンブリは、コードに記述された任意のアクションを実行します。

カスタム ワークフローのトラブルシューティング

ワークフロー ハンドラー アセンブリがデータを受け取らなかった場合は、SQL Server MDS Workflow Integration Service をデバッグするか、または Service Broker キューを参照します。

SQL Server MDS Workflow Integration Service のデバッグ

SQL Server Workflow Integration Service をデバッグするには、次の手順に従います。

  1. サービス スナップインを使用して、サービスを停止します。

  2. コマンド プロンプトを開き、サービスの場所に移動した後、コマンド Microsoft.MasterDataServices.Workflow.exe -console を入力してサービスをコンソール モードで実行します。

  3. マスター データ マネージャー で、メンバーを更新し、ビジネス ルールを再度適用します。 詳細なログがコンソール ウィンドウに表示されます。

Service Broker キューの表示

ワークフローの一部として渡されるマスター データを含んだ Service Broker キューは、mdm.microsoft/mdm/queue/externalaction です。 キューは、SQL Management Studio の [オブジェクト エクスプローラー] で、マスター データ サービス データベースの Service Broker ノードに表示されます。 ただし、サービスがキューを適切にクリアした場合、このキューは空になります。

関連項目

概念

カスタム ワークフローの例 (Master Data Services)

カスタム ワークフロー XML の説明 (Master Data Services)