業務プロセス フローのモデル化

 

公開日: 2017年1月

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

業務プロセス フローにより、効率的で、より効率的な営業、サービス、および他の業務プロセスを作成できます。 高効率のプロセスを適切に配置することで、成功率を最大にして、顧客満足度を向上させ、売り上げを伸ばすことができます。

業務プロセス フローでは、エンティティ フォーム最上部に特別なコントロールを設定することで、ビジネス プロセスのビジュアル化を作成します。 ユーザーは完了に向け、営業、マーケティング、顧客サービス プロセスのさまざまなステージで導かれます。 各プロセスでは、複数のステージおよびステップをサポートします。 ステップを追加または削除したり、ステップの順序を変更したり、業務プロセス フローに新しいエンティティを追加できます。

Dynamics 365 用 2016 年 12 月の更新プログラム (オンラインおよび設置型) で、さまざまな業務プロセス フロー定義をさまざまなロールに関連付けることができ、インスタンスを同じエンティティ レコードに対して同時に実行できます。 ユーザーは同時のビジネス プロセス インスタンスを切り替えでき、プロセスの現在の段階での作業を再開できます。 新しいビジュアルなドラッグ アンド ドロップ方式のプロセス デザイナーを使用すると、ビジネス プロセス フロー、タスク フローなどのプロセスと、Dynamics 365 の直感的なグラフィカル インターフェイスを使用したビジネス ルールを作成できます。

プロセスに関する詳細については、TechNet: 業務プロセス フローを参照してください。

このトピックの内容

業務プロセス フローのサーバー側でのプログラムのサポート

業務プロセス フローのクライアント側でのプログラムのサポート

プロセス、ステージおよび手順の最大数

業務プロセス フローのサーバー側でのプログラムのサポート

業務プロセス フローの定義は Workflow エンティティに保存されます。 業務プロセス フローは、プロセスのカテゴリの 1 種類です。 他のプロセス カテゴリには、アクション、ワークフロー、およびダイアログが含まれます。 詳細については、「Dynamics 365 のプロセス カテゴリ」を参照してください。 UI フォームを更新したユーザー定義エンティティおよびエンティティによって、業務プロセス フローに参加できます。 更新された UI エンティティには trueに設定された IsAIRUpdated プロパティがあります。 業務プロセス フローのエンティティを有効にするには、trueIsBusinessProcessEnabled プロパティを設定します。

重要

業務プロセス フローのエンティティを有効にするのは、一方向のプロセスです。 これを逆にはできません。

  • 業務プロセス フローの定義

  • 業務プロセス フローのアクティブ化

  • 業務プロセス フローのセキュリティを管理する

  • 業務プロセス フロー インスタンスの管理

  • エンティティ レコードの作成時に業務プロセス フロー内を適用する

業務プロセス フローの定義

業務プロセス フローを定義するには、Dynamics 365 の新しい視覚的な業務プロセス フロー デザイナーを使用します。Workflow エンティティは業務プロセス フローの定義を保存し、次の属性の値では、業務プロセス フローの Workflow エンティティ レコードを指定する必要があります。namecategorybusinessprocesstypeprimaryentityuniquename および xaml。 これらの属性の詳細については、「workflow EntityType」を参照してください。 既定では、業務プロセス フローのレコードは Draft 状態で作成されます。

業務プロセス フローのアクティブ化

プロセス フローを使用するには、その前に、それをアクティブ化する必要があります。 それをアクティブ化するには、Workflow エンティティの prvActivateBusinessProcessFlow の特権が必要です。Activated に、Workflow エンティティ レコードの状態を設定するには UpdateRequest メッセージを使用します。詳細:[更新] を使用して特化された操作を実行する

(該当の Workflow エンティティ レコードの状態を変更することで) 業務プロセス フローをアクティブ化すると、次の名前を持つユーザー定義エンティティが自動的に作成され、アクティブ化された業務プロセス フロー インスタンスを保存します。「<activesolutionprefix>_<uniquename>」。

たとえば、業務プロセス フローの定義の一意の名前を「myuniquebpf1」で指定して、アクティブ ソリューションの既定の発行元を使用している場合、プロセス インスタンスの格納用に作成されたユーザー定義エンティティの名前は「new_myuniquebpf1」になります。

uniquename の値が業務プロセス フローの定義に使用できない場合、たとえば業務プロセス フローが以前のバージョンのソリューションの一部としてインポートされた場合、既定のユーザー定義エンティティの名前は「<activesolutionprefix>_bpf_<GUID_BPF_Definition>」になります:

重要

Dynamics 365 で使用できる業務プロセス フロー レコードのサンプルは、システム エンティティを使用して対応する業務プロセス フロー インスタンスのレコードを保存します。 サンプル業務プロセス フローのエンティティ レコードは opportunitysalesprocess EntityType および leadtoopportunitysalesprocess EntityTypeです。

ただし、作成する新しい業務プロセス フロー定義すべては、前に説明したように、ユーザー定義エンティティを使用してインスタンス レコードを保存します。

業務プロセス フローのセキュリティを管理する

業務プロセス フローをアクティブにしたときに業務プロセス フロー インスタンスを格納するために自動的に作成されるユーザー定義エンティティは、他の Customer Engagement のユーザー定義エンティティと同様に標準のセキュリティ モデルに従います。 これは、それらのエンティティに付与される特権が、業務プロセス フローにおけるユーザー用のランタイム アクセス許可を定義することを意味します。

業務プロセス フローのユーザー定義エンティティは、組織のスコープがあります。 このエンティティにおける標準の作成、取得、更新、削除の特権は、ユーザーに割り当てられたロールに基づいて与えられるアクセス許可を定義します。 既定では、業務プロセス フローのユーザー定義エンティティが作成されると、システム管理者およびシステム カスタマイザーのセキュリティ ロールにのみアクセス許可が与えられ、他のセキュリティ ロールについては必要に応じてこのユーザー定義エンティティに対してアクセス許可を明示的に付与する必要があります。

業務プロセス フロー インスタンスの管理

業務プロセス フローの定義をアクティブ化する際に自動的に作成されるユーザー定義エンティティは、業務プロセス フローの定義のすべてのプロセス インスタンスを保存します。 ユーザー定義エンティティは、Web API、および CRM 2011 エンドポイントでのレコード (プロセス インスタンス) のプログラム作成と管理をサポートしています。 たとえば、ユーザー定義エンティティの名前が「new_myuniquebpf1」である場合、次の Web API クエリを使用してユーザー定義エンティティのレコード (プロセス インスタンス) を取得できます。


[組織 URI]/api/data/v8.2/new_myuniquebpf1s

プロセス インスタンスには、次の状態のうち 1 つを使用できます。ActiveFinished、または Aborted

重要

このセクションでは、ビジネス プロセスの切り替え、エンティティ レコード用のプロセス インスタンスの取得、プロセス インスタンスのアクティブ パスおよびアクティブ ステージの取得、および次のステージまたは前のステージに移動などの、さまざまなビジネス プロセス フロー シナリオのプログラム管理ついての情報を提供します。 このセクションで説明されているように、業務プロセス フローをプログラム管理および自動化するには、メッセージおよび適切な業務プロセス フローのエンティティを使用する必要があります。

業務プロセス フローで有効なエンティティで、プロセスに関連する属性 (ProcessIdStageId、および TraversedPath など) を操作することは、業務プロセス フローの状態の一貫性を保証するものでなく、サポートされているシナリオではありません。 唯一の例外は、業務プロセス フローの既定のアプリケーションを新しいレコードに上書きするためにエンティティ レコードを作成する際に、ProcessId 属性をプログラムによって変更する場合です。 詳細: エンティティ レコードの作成時に業務プロセス フロー内を適用する

SetProcess Action または SetProcessRequest メッセージを使用して、ターゲット エンティティ レコードのアクティブなプロセス インスタンスとして、他の業務プロセス フローを設定します。 アクティブなプロセス インスタンスはエンティティ レコードの UI で表示される内容です。 指定された業務プロセス フロー定義のプロセス インスタンスがない場合、新しい業務プロセス フロー インスタンスが作成され、アクティブなエンティティ レコードとして設定されます。 業務プロセス フロー定義のプロセス インスタンスがすでに存在する場合、プロセス インスタンスはエンティティ レコードのアクティブ プロセス インスタンスとして設定されます。 特定のプロセス インスタンスをエンティティ レコードのアクティブなプロセス インスタンスとして設定する場合は、NewProcessInstance プロパティを使用してインスタンスを指定できます。

プログラムでアクティブなプロセスを設定することは、UI のエンティティ レコードを別のプロセス インスタンスに切り替えることと同じです。 各業務プロセス フロー インスタンスがそれぞれのステージとステップの進行状況に関する情報を保持するため、他の業務プロセス インスタンスに切り替えても、進行状況情報を失わず、前回と同じ場所から再開します。

次のサンプル コードは、エンティティ レコードを別の業務プロセス フローに切り替える方法を示しています。

SetProcessRequest setProcReq = new SetProcessRequest
{
    Target = new EntityReference(Opportunity.EntityLogicalName, _opportunityId),
    NewProcess = new EntityReference(Workflow.EntityLogicalName, _bpfId)
};
SetProcessResponse setProcResp = (SetProcessResponse)_serviceProxy.Execute(setProcReq);

上記のコード サンプルでは、_bpfId 変数は、切り替える業務プロセス フロー定義の ID を表します。Workflow エンティティを照会することによって、必要な業務プロセス フロー定義の ID を取得できます。 次のサンプル コードは、Workflow エンティティをクエリすることによって、サンプルの「営業案件営業プロセス」業務プロセス フロー定義の ID を取得する方法を示しています。

QueryExpression opportunityBpfQuery = new QueryExpression
{
    EntityName = "workflow",
    ColumnSet =  new ColumnSet("name"),
    Criteria = new FilterExpression
    {
        Conditions =
        {
            new ConditionExpression
            {
                AttributeName = "uniquename",
                Operator = ConditionOperator.Equal,
                Values = { "opportunitysalesprocess" }
            }
        }
    }
};
Workflow retrievedBPF = (Workflow)_serviceProxy.RetrieveMultiple(opportunityBpfQuery).Entities[0];
_bpfId = retrievedBPF.Id;

完全なサンプルについては、サンプル: 業務プロセス フローの使用 を参照してください。

RetrieveProcessInstances Function または RetrieveProcessInstancesRequest メッセージを使用して、すべての業務プロセスの定義でエンティティ レコードのすべての業務プロセス フローのインスタンスを取得します。 エンティティに対して返される業務プロセス フロー インスタンスは、インスタンスの modifiedon 属性に基づいて順序付けられます。 たとえば、最後に変更された業務プロセス フロー インスタンスは、返されたコレクションの最初のレコードになります。 最後に変更された業務プロセス フロー インスタンスは、エンティティ レコードの UI でアクティブなインスタンスです。

次のサンプルコードは、エンティティ レコードの業務プロセス フロー インスタンスを取得し、エンティティ レコードに関連付けられたプロセス インスタンスを一覧表示する方法を示しています。

RetrieveProcessInstancesRequest procOpp2Req = new RetrieveProcessInstancesRequest
{
    EntityId = _opportunityId,
    EntityLogicalName = Opportunity.EntityLogicalName
};

RetrieveProcessInstancesResponse procOpp2Resp = (RetrieveProcessInstancesResponse)_serviceProxy.Execute(procOpp2Req);

// Declare variables to store values returned in response
int processCount = procOpp2Resp.Processes.Entities.Count;
var activeProcessInstance = procOpp2Resp.Processes.Entities[0]; // First record is the active process instance
_processOpp2Id = activeProcessInstance.Id; // Id of the active process instance, which will be used
                                           // later to retrieve the active path of the process instance

if (processCount > 0)
{
    // Display the count of process instances concurrently associated with the opportunity record
    Console.WriteLine("\nCount of process instances for the opportunity record: {0}", processCount);

    // Display all the process instances associated with the opportunity record
    // Demonstrates that multiple processes can run concurrently against the same record
    Console.WriteLine("\nProcess instances associated with the opportunity record:");
    for (int i = 0; i<processCount; i++)
    {
        Console.WriteLine("\t{0}", procOpp2Resp.Processes.Entities[i].Attributes["name"]);
    }
}

エンティティ レコードの返された業務プロセス フロー インスタンスのレコードは、アクティブ ステージの ID を processstageid 属性に格納します。この ID は、アクティブ ステージを検出して、前または次のステージに移動するために使用されます。 これを行うには、まず業務プロセス フロー インスタンスのアクティブ パスと、RetrieveActivePath Function または RetrieveActivePathRequest を使用してプロセス フロー インスタンスで使用できるステージを見つける必要があります。 次のサンプル コードは、業務プロセス フロー インスタンスとインスタンスのアクティブ ステージのアクティブ パスでプロセス ステージを取得する方法を示しています。

// Retrieve the active stage ID of in the active process instance
_activeStageId = new Guid(activeProcessInstance.Attributes["processstageid"].ToString());

// Retrieve the process stages in the active path of the current process instance
RetrieveActivePathRequest pathReq = new RetrieveActivePathRequest
{
    ProcessInstanceId = _processOpp2Id
};
RetrieveActivePathResponse pathResp = (RetrieveActivePathResponse)_serviceProxy.Execute(pathReq);

Console.WriteLine("\nRetrieved stages in the active path of the process instance:");
for (int i = 0; i <pathResp.ProcessStages.Entities.Count; i++)
{
    Console.WriteLine("\tStage {0}: {1} (StageId: {2})", i + 1,
                            pathResp.ProcessStages.Entities[i].Attributes["stagename"], 
                            pathResp.ProcessStages.Entities[i].Attributes["processstageid"]);

    // Retrieve the active stage name and active stage position based on the activeStageId for the process instance
    if (pathResp.ProcessStages.Entities[i].Attributes["processstageid"].ToString() == _activeStageId.ToString())
    {
        _activeStageName = pathResp.ProcessStages.Entities[i].Attributes["stagename"].ToString();
        _activeStagePosition = i;
    }
}

// Display the active stage name and Id
Console.WriteLine("\nActive stage for the process instance: {0} (StageID: {1})", _activeStageName, _activeStageId);

アクティブ ステージと業務プロセス フロー インスタンスのアクティブ パス情報を取得したら、その情報を使用してアクティブ パスの前または次のステージに移動できます。 ステージの前方へのナビゲーションは、順番に実行する必要があります。つまり、アクティブなパスの次のステージに進むだけです。 次のサンプル コードは、業務プロセス フロー インスタンスの次の段階に移動する方法を示しています。

// Retrieve the stage ID of the next stage that you want to set as active
_activeStageId = (Guid)pathResp.ProcessStages.Entities[_activeStagePosition + 1].Attributes["processstageid"];

// Retrieve the process instance record to update its active stage
ColumnSet cols1 = new ColumnSet();
cols1.AddColumn("activestageid");
Entity retrievedProcessInstance = _serviceProxy.Retrieve("opportunitysalesprocess", _processOpp2Id, cols1);

// Set the next stage as the active stage
retrievedProcessInstance["activestageid"] = new EntityReference(ProcessStage.EntityLogicalName, _activeStageId);
_serviceProxy.Update(retrievedProcessInstance);

完全なサンプルについては、「サンプル: 業務プロセス フローの使用」を参照してください。

エンティティ レコードの作成時に業務プロセス フロー内を適用する

このセクションでは、Customer Engagement で作成された新しいエンティティ レコードに業務プロセス フローを自動的に適用するための既定の動作、およびそれを上書きして新しいエンティティ レコードに自分で選択した業務プロセス フローを適用する方法について説明します。

既定では、複数の業務プロセス フローが定義されているエンティティの場合、システムは次のマルチステップ ロジックを使用して新しいエンティティ レコードに業務プロセス フローを適用します。

  1. 業務プロセス フロー定義レコードの Workflow.PrimaryEntity 属性に基づいて、新しいエンティティ レコードに適用可能なすべての業務プロセス フローを識別します。

  2. 現在のユーザーがアクセスできる業務プロセス フロー定義を識別します。 業務プロセス フローへのアクセスがどのように決定され管理されるかについては、このトピックで前述した「業務プロセス フローのセキュリティを管理する」を参照してください。

  3. システム内のすべての業務プロセス フローには、エンティティごとにグローバル順序が適用されます。 業務プロセス フローの順序は、Workflow.ProcessOrder 属性に格納されています。 エンティティの業務プロセス フローの定義は、この順序に基づいて並べ替えられ、順序の値が最も低いものが選択されます。

  4. 最後に、エンティティ レコードがビジネス アプリ (アプリ モジュール) から作成された場合、新しいエンティティ レコードに自動的に適用される業務プロセス フローを選択するために、フィルタリングの追加のレベルが適用されます。 アプリで操作する場合、ユーザーはビジネス アプリに割り当てられたセキュリティ ロールゆえにアクセスできる該当するエンティティ、業務プロセス フロー、ビュー、およびフォームにしかアクセスできません。

    • ビジネス アプリに業務プロセス フローが含まれない場合、手順 3 まで説明されたとおりに業務プロセス フローが適用されます。

    • ビジネス アプリに 1 つ以上の業務プロセス フローがある場合、アプリにある業務プロセス フローのみが適用されます。 この場合、ユーザーがビジネス アプリのコンテキスト内で作業しているなら、手順 3 の業務プロセス フローのリストはアプリ モジュール内にあるビジネス アプリの一部であるものにフィルタリングされ、プロセス順序に基づいて並べ替えられます。

    • エンティティのビジネス アプリに業務プロセス フローがない場合、またはユーザーがアクセスできるものに業務プロセス フローがない場合、新しいエンティティ レコードに業務プロセス フローは適用されません。

新しいエンティティ レコードに自動的に適用される業務プロセス フローの既定の動作は上書きできます。 上書きするには、新規エンティティ レコードを作成する際にエンティティの ProcessId 属性を次のいずれかの値に設定します。

  • 新しいエンティティ レコードの業務プロセス フローの設定をスキップするには、Guid.Empty に設定します。 これは、エンティティ レコードを一括作成するものの業務プロセス フローを適用しない場合に行えます。

  • 特定の業務プロセス フローのエンティティに設定します (エンティティ参照として)。 この場合、システムは既定ロジックの代わりに、選択した特定の業務プロセス フローを適用します。

新しいエンティティ レコードの作成時に ProcessId 属性の値を設定しない場合、システムは前述したように既定のロジックを適用します。

注意

新しいエンティティ レコードに自動的に適用される業務プロセス フローの既定の動作を上書きすることは、プログラムでのみサポートされています。 UI を使用して行うことはできません。

業務プロセス フローのクライアント側でのプログラムのサポート

Dynamics 365には、フォーム スクリプトの業務プロセス フローとの対話に使用できるクライアント側のオブジェクトがあります。 業務プロセス フローは、プロセスがレコードに適用されたり、ステージが変更されたり、状態が ActiveFinished、または Aborted に変更されたりするたびにクライアント側のイベントをトリガします。詳細:業務プロセス フローのスクリプトを作成する

プロセス、ステージおよび手順の最大数

エンティティごとの、アクティブ化された業務プロセス フローの最大数の既定値は 10 です。Organization.MaximumActiveBusinessProcessFlowsAllowedPerEntity 属性を使用して別の値を指定できます。 ただし、値が 10 より大きい場合、プロセスを切り替えるとき、または業務プロセス フローが割り当てられているレコードを開くときのシステム パフォーマンスが低下することがあります。 このことは、プロセスが複数のエンティティにまたがっている場合に特に顕著です。

次の設定はカスタマイズできません。

  • プロセス内のエンティティ当たりの最大数が 30 です。

  • 各ステージのステップの最大数は 30 です。

  • プロセス フローに参加できるエンティティの最大数は 5 です。

関連項目

ビデオ: Microsoft Dynamics CRM 2015 のビジネス プロセス
Dynamics 365 のプロセス カテゴリ
Dynamics 365 プロセスを使用したビジネス プロセスの自動化
リアルタイム ワークフローの作成
Microsoft Dynamics CRM 2013 でのプロセス有効化
ヘルプとトレーニング: 新しいビジネス プロセスの作成
ヘルプとトレーニング: ビジネス プロセスへのセキュリティ ロールの割り当て
ヘルプとトレーニング: プロセスに関する一般的なタスクを通してスタッフをガイド
ヘルプとトレーニング: 既製のビジネス プロセスの追加
TechNet: 業務プロセス フロー
業務プロセス フローのスクリプトを作成する

Microsoft Dynamics 365

© 2017 Microsoft. All rights reserved. 著作権