カスタム ワークフローの作成 (Master Data Services)
Applies to: SQL Server - Windows only Azure SQL Managed Instance
マスター データ サービスでは、ビジネス ルールを使用して、指定した条件に基づいてデータを自動的に更新および検証し、電子メール通知を送信するなど、基本的なワークフロー ソリューションを作成します。 組み込みのワークフロー アクションよりも複雑な処理が必要な場合は、カスタム ワークフローを使用します。 カスタム ワークフローは、ユーザーが作成する .NET アセンブリです。 作成したワークフロー アセンブリが呼び出された際には、記述したコードを通じて、状況に応じた任意のアクションを実行できます。 たとえば、ワークフローで多層承認や複雑なデシジョン ツリーなどの複雑なイベント処理が必要な場合は、データを分析して承認のために送信する場所を決定するカスタム ワークフローを開始するようにマスター データ サービスを構成できます。
カスタム ワークフローの処理方法
カスタム ワークフローの処理には、マスター データ マネージャー Web アプリケーション、SQL Server MDS Workflow Integration Service、ワークフロー ハンドラー アセンブリの 3 つの主要なコンポーネントがあります。 これらのコンポーネントは、カスタム ワークフローを次のように処理します。
マスター データ マネージャーを使用して、ワークフローを開始するエンティティを検証します。
マスター データ マネージャーは、ビジネス ルールの条件を満たすメンバーを、マスター データ サービス データベース内の Service Broker キューに送信します。
SQL Server MDS Workflow Integration Service は、一定の間隔で、マスター データ サービス データベース内のストアド プロシージャを呼び出します。
このストアド プロシージャは、Service Broker キュー内にレコードを見つけると、それらを SQL Server MDS Workflow Integration Service に返します。
SQL Server MDS Workflow Integration Services は、それらのデータをワークフロー ハンドラー アセンブリにルーティングします。
Note
注: SQL Server MDS Workflow Integration Service は単純な処理をトリガーするためのものです。 カスタム コードで複雑な処理を行う必要がある場合は、個別のスレッド内か、またはワークフロー プロセスの外部で処理を完了してください。
カスタム ワークフロー向けの Master Data Services の構成
カスタム ワークフローを作成するには、カスタム コードを記述し、ワークフロー データをワークフロー ハンドラーに渡すマスター データ サービスを構成する必要があります。 カスタム ワークフロー処理を有効にするには、次の手順を実行します。
Microsoft.MasterDataServices.WorkflowTypeExtender.IWorkflowTypeExtender を実装する .NET アセンブリを作成します。
SQL Server MDS Workflow Integration Service を構成して、マスター データ サービス データベースに接続し、タグをワークフロー ハンドラーに関連付けます。
SQL Server MDS Workflow Integration Service を開始します。
マスター データ マネージャーで、ワークフロー ハンドラーの名前でタグ付けされたワークフローを開始するビジネス ルールを作成します。
そのビジネス ルールを、カスタム ワークフローをトリガーするメンバーに適用します。
ワークフロー ハンドラー アセンブリの作成
カスタム ワークフローは、 Microsoft.MasterDataServices.WorkflowTypeExtender.IWorkflowTypeExtender インターフェイスを実装する .NET クラス ライブラリ アセンブリです。 SQL Server MDS ワークフロー統合サービスは、 Microsoft.MasterDataServices.WorkflowTypeExtender.IWorkflowTypeExtender.StartWorkflow* メソッドを呼び出してコードを実行します。 Microsoft.MasterDataServices.WorkflowTypeExtender.IWorkflowTypeExtender.StartWorkflow* を実装するコード例については、「Custom Workflow Example (マスター データ サービス)を参照してください。
カスタム ワークフローを処理するために SQL Server MDS Workflow Integration Service から呼び出すことができるアセンブリを、Visual Studio 2010 を使用して作成するには、次の手順を実行します。
Visual Studio 2010 で、任意の言語を使用する新しい [クラス ライブラリ] プロジェクトを作成します。 C# クラス ライブラリを作成するには、[Visual C#\Windows] プロジェクト タイプを選択し、[クラス ライブラリ] テンプレートを選択します。 プロジェクトの名前 (MDSWorkflowTest など) を入力し、[OK] をクリックします。
Microsoft.MasterDataServices.WorkflowTypeExtender.dll への参照を追加します。 このアセンブリは、<インストール フォルダー>\マスター データ サービス\WebApplication\bin にあります。
C# コード ファイルに、'using Microsoft.MasterDataServices.Core.Workflow;' を追加します。
クラス宣言 Microsoft.MasterDataServices.WorkflowTypeExtender.IWorkflowTypeExtender から継承します。 クラス宣言は次のようになります: 'public class WorkflowTester : IWorkflowTypeExtender'
Microsoft.MasterDataServices.WorkflowTypeExtender.IWorkflowTypeExtender インターフェイスを実装します。 Microsoft.MasterDataServices.WorkflowTypeExtender.IWorkflowTypeExtender.StartWorkflow* メソッドは、ワークフローを開始するために SQL Server MDS ワークフロー統合サービスによって呼び出されます。
インストール フォルダー<\マスター データ サービス\WebApplication\bin 内の、Microsoft.MasterDataServices.Workflow.exeという名前の SQL Server MDS Workflow Integration Service 実行可能ファイル>の場所にアセンブリをコピーします。
SQL Server MDS Workflow Integration Service の構成
マスター データ サービス構成ファイルを編集して、マスター データ サービス データベースの接続情報を含め、次の手順に従ってタグをワークフロー ハンドラー アセンブリに関連付けます。
<インストール フォルダー>\マスター データ サービス\WebApplication\bin で Microsoft.MasterDataServices.Workflow.exe.config を検索します。
マスター データ サービスデータベース接続情報を "ConnectionString" 設定に追加します。 SQL Server のインストールで大文字と小文字が区別される照合順序を使用する場合は、データベースの名前をデータベースと同じ大文字と小文字で入力する必要があります。 たとえば、設定タグの全体は次のようになります。
<setting name="ConnectionString" serializeAs="String"> <value>Server=myServer;Database=myDatabase;Integrated Security=True</value> </setting>
"ConnectionString" 設定下で "WorkflowTypeExtenders" 設定を追加して、ワークフロー ハンドラー アセンブリにタグ名を関連付けます。 次に例を示します。
<setting name="WorkflowTypeExtenders" serializeAs="String"> <value>TEST=MDSWorkflowTestLib.WorkflowTester, MDSWorkflowTestLib</value> </setting>
<value> タグの内部テキストは、<Workflow タグの形式です>=<アセンブリ修飾ワークフロー型名>。 <ワークフロー タグ> は、マスター データ マネージャーでビジネス ルールを作成するときにワークフロー ハンドラー アセンブリを識別するために使用する名前です。 <assembly-qualified workflow type name> は、ワークフロー クラスの名前空間修飾名の後にコンマ、その後にアセンブリの表示名が続きます。 アセンブリに厳密な名前が指定されている場合は、バージョン情報と PublicKeyToken も含める必要があります。 さまざまな種類のワークフローに対して複数のワークフロー ハンドラーを作成している場合は、複数の <setting> タグを含めることができます。
Note
サーバーの構成によっては、Microsoft.MasterDataServices.Workflow.exe.config ファイルを保存する際に、"アクセスが拒否されました" というエラーが返されることがあります。 その場合は、サーバー上のユーザー アカウント制御 (UAC) を一時的に無効にしてください。 これを行うには、コントロール パネルを開き、[システムとセキュリティ] をクリックします。 [アクション センター] で、[ユーザー アカウント制御設定の変更] をクリックします。 [ユーザー アカウント制御の設定] ダイアログで、スライダー バーを一番下まで下げ、通知が返されないようにします。 コンピューターを再起動し、上記の手順を繰り返して、構成ファイルを編集します。 ファイルを保存したら、UAC 設定を既定のレベルにリセットしてください。
SQL Server MDS Workflow Integration Service の開始
既定では、SQL Server MDS Workflow Integration Service はインストールされていません。 使用する前に、まずこのサービスをインストールする必要があります。 最大限のセキュリティを確保するため、このサービス用のローカル ユーザーを作成し、そのユーザーに対して、ワークフロー操作の実行に必要な権限のみを付与してください。 ユーザーを作成し、サービスをインストールして、サービスを開始するには、次の手順を実行します。
[ローカル ユーザーとグループ] マネージャーを使用して、ローカル ユーザー (この例では mds_workflow_service) を作成します。
SQL Server Management Studio を使用して、mds_workflow_service ユーザーに、[mdm].[udpExternalActionsGet] ストアド プロシージャを実行する権限を付与します。 これを行うには、mds_workflow_service アカウントの新しいログインを作成し、マスター データ サービス データベースに新しいユーザーを作成し、このユーザーを mds_workflow_service ログインにマップして、[mdm]に対する EXECUTE アクセス許可をユーザーに付与します。udpExternalActionsGet] ストアド プロシージャ。
mds_workflow_service ユーザーに、ワークフロー ハンドラー アセンブリを実行する権限を付与します。 これを行うには、ワークフロー ハンドラー アセンブリの [プロパティ] の [セキュリティ] タブに mds_workflow_service ユーザーを追加し、その mds_workflow_service ユーザーに、READ および EXECUTE アクセス許可を付与します。
mds_workflow_service ユーザーに、SQL Server MDS Workflow Integration Service 実行可能ファイルを実行する権限を付与します。 これを行うには、mds_workflow_service Microsoft.MasterDataServices.Workflow.exeの Properties の Security タブに <インストール フォルダー>\マスター データ サービス\WebApplication\bin に追加し、mds_workflow_service ユーザーに READ および EXECUTE アクセス許可を付与します。
.NET インストール ユーティリティ (InstallUtil.exe) を使用して、SQL Server MDS Workflow Integration Service をインストールします。 InstallUtil.exeは、C:\Windows\Microsoft.NET\Framework\v4.0.30319\ などの .NET インストール フォルダーにあります。 SQL Server MDS Workflow Integration Service は、管理者特権のコマンド プロンプトで次のコマンドを入力してインストールします。
C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil Microsoft.MasterDataServices.Workflow.exe
インストール中にユーザーの指定を求められたら、mds_workflow_service ユーザーを指定します。
サービス スナップインを使用して、SQL Server MDS Workflow Integration Service を開始します。 これを行うには、サービス スナップインで SQL Server MDS Workflow Integration Service を見つけて選択し、[開始] リンクをクリックします。
ワークフロー ビジネス ルールの作成
マスター データ マネージャーを使用して、適用時にワークフローを開始するビジネス ルールを作成して発行します。 ビジネス ルールには、属性値を変更するアクションを必ず含めて、そのルールが一度適用された後、false と評価されるようにしてください。 たとえば、Price 属性値が 500 より大きく、Approved 属性値が空白の場合に、true と評価されるビジネス ルールがあるとします。 その場合、そのルールに次の 2 つのアクションを含めることができます。1 つは、Approved 属性値を Pending に設定するアクション。もう 1 つは、ワークフローを開始するアクションです。 また、"が変更されている" 条件を使用するルールを作成し、追跡グループを変更するための属性を追加する方法もあります。 ビジネス ルールの詳細については、「ビジネス ルール (マスター データ サービス)」を参照してください。
次の手順に従って、マスター データ マネージャーでカスタム ワークフローを開始するビジネス ルールを作成します。
マスター データ マネージャーのビジネス ルール エディターで、ビジネス ルールの条件を指定した後、External actions リストから Start Workflow アクションを THEN ペインの Action ラベルにドラッグします。
[アクションの編集] ペインの [ワークフローの種類] ボックスに、ワークフロー ハンドラー アセンブリを識別するタグを入力します。 これは、アセンブリの構成ファイルで指定したタグです (例: TEST)。
必要に応じて、[メッセージにメンバーのデータを含める] チェック ボックスをオンにします。 これをオンにすると、ワークフロー ハンドラーに渡される XML に、属性の名前と値が含められます。
[ワークフロー サイト] ボックスに、Web サイトの名前を入力します。 これは、使用するカスタム ワークフローには該当しない場合がありますが、追加のコンテキスト用に使用できます。
[ワークフロー名] ボックスに、Visual Studio からのワークフローの名前を入力します。 これは、使用するカスタム ワークフローには該当しない場合がありますが、追加のコンテキスト用に使用できます。
ビジネス ルールを作成およびパブリッシュします。
ビジネス ルールを適用してワークフローを開始する
データにビジネス ルールを適用して、ワークフローを開始します。 これを行うには、マスター データ マネージャーを使用して、検証するメンバーを含むエンティティを編集します。 [ビジネス ルールの適用] をクリックします。 ビジネス ルールに応答して、マスター データ マネージャーは、マスター データ サービス データベースの 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 をデバッグするには、次の手順に従います。
サービス スナップインを使用して、サービスを停止します。
コマンド プロンプトを開き、サービスの場所に移動した後、コマンド Microsoft.MasterDataServices.Workflow.exe -console を入力してサービスをコンソール モードで実行します。
マスター データ マネージャーで、メンバーを更新し、ビジネス ルールをもう一度適用します。 詳細なログがコンソール ウィンドウに表示されます。
Service Broker キューの表示
ワークフローの一部として渡されるマスター データを含んだ Service Broker キューは、mdm.microsoft/mdm/queue/externalaction です。 キューは、マスター データ サービス データベースの Service Broker ノードの下にある SQL Management Studio のオブジェクト エクスプローラーにあります。 ただし、サービスがキューを適切にクリアした場合、このキューは空になります。
参照
カスタム ワークフローの例 (マスター データ サービス)
カスタム ワークフロー XML の説明 (マスター データ サービス)