リアルタイム ワークフローの作成

 

公開日: 2017年1月

対象: Dynamics 365 (online)、Dynamics 365 (on-premises)、Dynamics CRM 2016、Dynamics CRM Online

非同期ワークフローと同様、リアルタイムワークフローは、現実のビジネス プロセスをモデル化および自動化するのに使用できます。 必要に応じてユーザー入力を求めることもでき、特定のイベント状況に応じて自動で開始したり、ユーザーが手動で開始したりすることもできます。 リアルタイム ワークフローはビジネス ユーザー向けで、たとえばアナリストの場合は、.NET Framework プログラミングの経験を必要とせず、同様の機能を同期プラグインに実装できるようになります。Microsoft Dynamics 365 Web アプリケーションまたはコードでは、非同期またはリアルタイムにワークフローを作成できます。

リアルタイム ワークフローについてのいくつかの重要な点には、次の項目が含まれています。

  • 非同期ワークフローのような Workflow エンティティ レコードを使用して定義します。

  • 同期プラグインのときと同じように、イベント実行パイプラインのステージで実行されます。 リアルタイムワークフローは、コア操作の前(事前操作)、後(事後操作)、またはの実行中に実行できます。 コア操作の実行中に実行されるリアルタイム ワークフローは、ユーザー定義アクションの実装です。 リアルタイム ワークフローは、プラグインを処理するのと同様に、ステージ内でランク付けすることができます。詳細:パイプライン ステージ

  • オンデマンドで実行されるか、イベントに応答して実行されるように構成すると、リアルタイム ワークフローは後で実行するようキューに置かれず、すぐに実行されます。

  • ワークフローのログオン ユーザーまたは所有者のセキュリティ コンテキストで実行できます。 ただし、オンデマンド実行に設定されているワークフローでは、ログオン ユーザーのセキュリティ コンテキストで必ず実行します。

  • 遅延または待機アクティビティは許可されません。

  • ログ記録が有効になっている場合にのみエラーを記録します。

  • 現在のトランザクション内で実行します。 非同期ワークフロー以外のワークフローおよび子ワークフローのすべての活動は、一つのトランザクションの一部です。 非同期子ワークフローは、別のトランザクション内のキューに置かれ、実行されます。

  • 非同期ワークフローを変換し、リアルタイムに戻すことができます。

このトピックの内容

必要なセキュリティ特権

コードでリアルタイムでワークフローを作成する

非同期ワークフローをリアルタイムまたは操作後に変換する

エラー処理とロールバック

配布のリアルタイム ワークフローをパッケージする

必要なセキュリティ特権

ワークフローを実行できるように、リアルタイムプロセスのアクティブ化(prvActivateSynchronousWorkflow)というセキュリティ特権が、リアルタイムにワークフローをアクティブ化するのに必要となります。 ワークフロージョブの実行(prvWorkflowExecution)権限が、ワークフローの開始に必要です。 リアルタイムワークフローはコア システム操作に影響を与えるので、少数の経験のあるユーザーのグループだけにアクティブ化の特権を付与することをお勧めします。

これらの特権の詳細については、『[カスタマイズ] タブ』を参照してください。

コードでリアルタイムでワークフローを作成する

Microsoft Dynamics 365 (オンライン) はリアルタイム ワークフローをサポートしますが、Web アプリケーションで対話的に作成する必要があります。 このセクションで説明した XAML ベースのワークフローは、設置型または IFD サーバーでのみサポートされます。 XAML ワークフローの詳細については、「カスタム XAML ワークフロー」を参照してください。

Workflow エンティティ レコードを作成することで、コードでリアルタイムにワークフローを作成できます。 SDK のパッケージに含まれているメタデータ ブラウザー ツールまたは EntityMetadata.xlsx スプレッドシートを使用して、Workflow エンティティの属性メタデータを確認します。組織のエンティティ メタデータを表示するには、「組織のメタデータの参照」で説明されているメタデータ ブラウザー ソリューションをインストールします。 カスタマイズされていない組織のメタデータを、EntityMetadata.xlsx という名前の Excel ファイルで見ることもできます。このファイルは、ダウンロードした SDK の最上位のフォルダーに含まれています。 Microsoft Dynamics CRM SDK パッケージをダウンロードします。

次の例では、非同期ワークフローを作成するコードを、リアルタイムワークフローを作成するコードと比較します。


// Create an asynchronous workflow.
// The workflow should execute after a new opportunity is created.
Workflow workflow = new Workflow()
{
    // These properties map to the New Process form settings in the web application.
    Name = "Set closeprobability on opportunity create (async)",
    Type = new OptionSetValue((int)WorkflowType.Definition),
    Category = new OptionSetValue((int)WorkflowCategory.Workflow),
    PrimaryEntity = Opportunity.EntityLogicalName,
    Mode = new OptionSetValue((int)WorkflowMode.Background),

    // Additional settings from the second New Process form.
    Description = @"When an opportunity is created, this workflow" +
        " sets the closeprobability field of the opportunity record to 40%.",
    OnDemand = false,
    Subprocess = false,
    Scope = new OptionSetValue((int)WorkflowScope.User),
    TriggerOnCreate = true,
    AsyncAutoDelete = true,
    Xaml = xamlWF,

    // Other properties not in the web forms.
    LanguageCode = 1033,  // U.S. English                        
};
_workflowId = _serviceProxy.Create(workflow);

// Create a real-time workflow. 
// The workflow should execute after a new opportunity is created
// and run in the context of the logged on user.
Workflow workflow = new Workflow()
{
    // These properties map to the New Process form settings in the web application.
    Name = "Set closeprobability on opportunity create (real-time)",
    Type = new OptionSetValue((int)WorkflowType.Definition),       
    Category = new OptionSetValue((int)WorkflowCategory.Workflow),
    PrimaryEntity = Opportunity.EntityLogicalName,
    Mode = new OptionSetValue((int)WorkflowMode.Realtime),

    // Additional settings from the second New Process form.
    Description = @"When an opportunity is created, this workflow" +
        " sets the closeprobability field of the opportunity record to 40%.",
    OnDemand = false,
    Subprocess = false,
    Scope = new OptionSetValue((int)WorkflowScope.User),
    RunAs = new OptionSetValue((int)workflow_runas.CallingUser),
    SyncWorkflowLogOnFailure = true,
    TriggerOnCreate = true,
    CreateStage = new OptionSetValue((int)workflow_stage.Postoperation),
    Xaml = xamlWF,

    // Other properties not in the web forms.
    LanguageCode = 1033,  // U.S. English
};
_workflowId = _serviceProxy.Create(workflow);

リアルタイムワークフローには、非同期ワークフローには含まれていない、以下の追加プロパティ セットがあります。

ワークフローの属性

説明

Category

WorkflowCategory.Workflowに設定します。

RunAs

ワークフローの所有者(workflow_runas.Owner)またはログオンユーザー(workflow_runas.CallingUser)のセキュリティ コンテキストで、ワークフローを実行するよう指定できます。

SyncWorkflowLogOnError

trueの場合、エラーがProcessSession レコードに記録されます。 非同期ワークフローとは違い、リアルタイム ワークフロー実行は、System Jobレコードに記録されません。

CreateStageDeleteStage または UpdateStage

ワークフローを実行している、イベント実行パイプラインのステージを識別します: コア操作の前(workflow_stage.Preoperation)、または後(workflow_stage.Postoperation)。 ステージを目的の操作のトリガー イベントと一致させる必要があります。 たとえば、TriggerOnUpdatetrueの場合は、UpdateStageを設定する必要があります。

リアルタイムワークフローは取得の際に実行できます。 取得のほかに、サポートされている Web サービスメッセージの残りが、これらの3件のサポートされているイベントの 1 つにマッピングされます。 たとえば、状態操作の割当てまたは設定は、最終的には更新と同じです。

Mode

つまり、実行モードです。 これは、WorkflowMode.Realtime へ設定されます。

Rank

プラグイン実行やランク設定によるステージ内リアルタイム ワークフローの順番を設定できます。 1 のランクのプラグインまたはワークフローは、2 のランクの前に実行されます。

Xaml

リアルタイム ワークフローを定義する XAML コードに設定します。

リアルタイム ワークフローの作成については、トピックサンプル: コードでリアルタイム ワークフローを作成するのサンプル コードを参照できます。

非同期ワークフローをリアルタイムまたは操作後に変換する

非同期ワークフローが待機または遅延アクティビティを含んでいない限り、ワークフローの書き直しを必要とせずにUpdateRequest を使用して、ワークフローを非同期からリアルタイムおよび操作後へ変換します。 Web アプリケーションを使用して、対話的に変換を操作することもできます。 変換を実行する前は、ワークフローは下書きの状態(非アクティブ)である必要があります。

非同期ワークフローをリアルタイムに変換する

  1. ワークフローの UpdateRequest を作成します。

  2. ワークフローの Mode プロパティをWorkflowMode.Realtimeに設定します。

  3. 必要に応じて、CreateStageUpdateStage、または DeleteStage を設定します。 たとえば、ワークフローにTriggerOnDelete 設定があると、DeleteStage プロパティも設定されます。

  4. パラメーターとして更新要求を渡して Execute メソッドを呼び出します。

リアルタイムワークフローを非同期に変換する

  1. ワークフローの UpdateRequest を作成します。

  2. ワークフローの Mode プロパティをWorkflowMode.Backgroundに設定します。

  3. パラメーターとして更新要求を渡して Execute メソッドを呼び出します。

エラー処理とロールバック

データベース トランザクション中に実行され、例外をプラットフォームに返すワークフロー活動は、コア操作を取り消します。 すでに発生しているなら、これはコア操作のロールバックを発生させます。 また、イベント前とイベント後は、まだ実行されていないプラグインまたはリアルタイムワークフローを登録しました。 同じイベントによって起動された非同期ワークフローは実行されません。

停止ワークフロー (TerminateWorkflow クラス) 活動をワークフローのキャンセルされたオプションに含める場合、カスタム ステータス メッセージ(Reason プロパティ) に**[ビジネス プロセス エラー]** ダイアログでユーザーに表示される単一行のテキストを含むその活動に追加できます。

SyncWorkflowLogOnErrortrueに設定されている場合、リアルタイム ワークフロー エラーはProcessSession エンティティ レコードにログオンされます。

配布のリアルタイム ワークフローをパッケージする

Microsoft Dynamics 365 組織にインポートできるようにワークフローを配布するには、Microsoft Dynamics 365 ソリューションにワークフローを追加します。 これは、Web アプリケーションを使用して 設定 > カスタマイズ > ソリューション と移動すれば、容易に行えます。 ソリューションを作成するコードを記述できます。 ソリューションの詳細については、「ソリューションを使用した拡張機能のパッケージ化および配布」を参照してください。

関連項目

Dynamics 365 プロセスを使用したビジネス プロセスの自動化
独自のアクションの作成
イベント実行パイプライン
ビジネス プロセスを拡張するためのプラグインを記述する

Microsoft Dynamics 365

© 2017 Microsoft. All rights reserved. 著作権