次の方法で共有


独自のアクションの作成

 

公開日: 2017年1月

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

アクションと呼ばれるユーザー定義メッセージを作成することで、Microsoft Dynamics 365 の機能を拡張できます。 これらの操作に要求と応答のクラスが関連付けられ、Web API アクションが生成されます。 アクションの一般的な使用方法は、新しいドメイン特有の機能を組織の Web サービスに追加すること、または組織の複数の Web サービス メッセージ要求を 1 つの要求に結合することです。 たとえば、サポート コール センターで、Create、Assign、およびSetstateメッセージを単一の新しいEscalateメッセージと結合することがあります。

アクションのビジネス ロジックには、ワークフローを使用して実行されます。 アクションを作成するときは、関連をリアルタイムワークフローが、実行パイプラインのステージ 30(コア操作)の実行が自動的に登録されます。 リアルタイム ワークフローの詳細については、Dynamics 365 のプロセス カテゴリ を参照してください。

アクションは Microsoft Dynamics 365 (オンラインおよび設置型)の両方でサポートされますが、コードで (XAML を使用して) 操作を作成するのは、設置型および IFD 展開によってのみサポートされます。 オンラインのお客様は、Web アプリケーションで操作を対話的に作成する必要があります。

このトピックの内容

アクションの定義について

必要なアクセス許可

コードを使用して操作を作成する

配布の操作をパッケージする

操作用の事前バインド型を生成する

Web API を使用してアクションを実行する

組織サービスを使用して操作を実行する

プロセスを使用して操作を実行

長時間の操作を監視する

アクションの定義について

アクションはリアルタイムワークフローのような Workflow エンティティ レコードを使用して定義します。 アクションの内容および機能についてのまとめは、次の一覧に載せられています。

  • 一つのエンティティに関連付けることも、グローバル(任意の特定のエンティティに関連付けられない場合)とすることもできます。

  • イベント実行パイプラインのコア操作のステージ 30 で実行されます。

  • イベント実行パイプラインの操作前および操作後の段階で登録されたプラグインの起動がサポートされています。

  • アクション ステータスをアクティブにしている間だけ、事後操作および事前操作の段階で、プラグインを登録できます。

  • organization.svc および organization.svc/ Web エンドポイントで使用できます。organizationdata.svc (OData) エンドポイントでは使用できません。

  • JavaScript Web リソースを使用して実装できます。詳細:JavaScript の Web リソースを使用して操作を実行する

  • 呼び出し元ユーザーのセキュリティ コンテキストで常に実行します。

  • プラグインのステップがアクションに登録されている間は、レコードを削除することはできません。

  • 構成設定によって、任意に、現在のデータベース トランザクションに参加できます。

  • 実行できるのがユーザー、部署、または組織に限定される場合、範囲はサポートされていません。 アクションは常に組織のスコープ内で実行します。

  • 入力および出力パラメーターをサポートします。

  • データの変更の監査をサポートします。

  • オフライン クライアントではサポートされていません。

  • Web サービス メソッド呼び出しによって起動できます。

  • ワークフローから直接起動できます。

必要なアクセス許可

アクションのリアルタイム ワークフローをアクティブ化して、実行するには、リアルタイム プロセスのアクティブ化 (prvActivateSynchronousWorkflow) というセキュリティ特権が必要です。 これは、ワークフローの作成に必要な特権への追加です。 これらの特権の詳細については、「[カスタマイズ] タブ」の特権 UI マッピングを参照してください。

コードを使用して操作を作成する

通常、アクションは、Web アプリケーションのインターアクティブ ワークフロー デザイナを使用したカスタマイズによって実行されます。 ただし、開発者は SDK 呼び出しを使用して操作を実行して、必要に応じて、設置型または IFD サーバーを展開できます。

操作に使用するワークフロー エンティティ 属性を次の表に示します。 ワークフロー リアルタイムのサンプル コードは、トピック コードでリアルタイムでワークフローを作成するで参照できます。

ワークフローの属性

説明

Category

WorkflowCategory.CustomOperationに設定します。

SyncWorkflowLogOnError

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

Mode

使用されません。

IsTransacted

アクションが、データベース トランザクションに参加する場合、true に設定し、それ以外の場合は、falseに設定します。 既定はtrueです。

UniqueName

操作の一意の名前です。 名前は、発行者の接頭辞と"_" と一意の名前から構成されます。

Xaml

操作のリアルタイム ワークフローを定義する XAML コードに設定します。 別の既存リアルタイム ワークフローを示す方法はありません。

入力および出力の引数の追加

アクションは、DynamicActivityProperty タイプを使用してワークフローに追加できる入力および出力の引数をサポートします。 これらの引数をアクションのワークフローに付け加えると、それらはこのアクションに関連付けられたメッセージ要求と応答クラスのプロパティになります。 たとえば、次の例は、2 つの入力引数と 1 つの出力引数の C# および XAML コードを示しています。

DynamicActivityProperty inputProperty1 = new DynamicActivityProperty     { Name = "Subject", Type = typeof(InArgument<string>) };
DynamicActivityProperty inputProperty2 = new DynamicActivityProperty     { Name = "EntityCollection", Type = typeof(InArgument<EntityCollection>) };
DynamicActivityProperty outputProperty1 = new DynamicActivityProperty     { Name = "Output", Type = typeof(OutArgument<string>) };

inputProperty1.Attributes.Add(new ArgumentRequiredAttribute(true));
inputProperty1.Attributes.Add(new ArgumentDescriptionAttribute("The subject"));
inputProperty1.Attributes.Add(new ArgumentDirectionAttribute(Microsoft.Xrm.Sdk.Workflow.ArgumentDirection.Input));

inputProperty2.Attributes.Add(new ArgumentRequiredAttribute(false));
inputProperty2.Attributes.Add(new ArgumentDescriptionAttribute("The entity collection"));
inputProperty2.Attributes.Add(new ArgumentDirectionAttribute(Microsoft.Xrm.Sdk.Workflow.ArgumentDirection.Input));

outputProperty1.Attributes.Add(new ArgumentRequiredAttribute(false));
outputProperty1.Attributes.Add(new ArgumentDescriptionAttribute("The output"));
outputProperty1.Attributes.Add(new ArgumentDirectionAttribute(Microsoft.Xrm.Sdk.Workflow.ArgumentDirection.Output));
<x:Property Name="Subject"
            Type="InArgument(x:String)">
 <x:Property.Attributes>
  <mxsw:ArgumentRequiredAttribute Value="True" />
  <mxsw:ArgumentTargetAttribute Value="False" />
  <mxsw:ArgumentDescriptionAttribute Value="The subject " />
  <mxsw:ArgumentDirectionAttribute Value="Input" />
  <mxsw:ArgumentEntityAttribute Value="" />
 </x:Property.Attributes>
</x:Property>
<x:Property Name="EntityCollection"
            Type="InArgument(mxs:EntityCollection)">
 <x:Property.Attributes>
  <mxsw:ArgumentRequiredAttribute Value="False" />
  <mxsw:ArgumentTargetAttribute Value="False" />
  <mxsw:ArgumentDescriptionAttribute Value="The entity collection" />
  <mxsw:ArgumentDirectionAttribute Value="Input" />
  <mxsw:ArgumentEntityAttribute Value="" />
 </x:Property.Attributes>
</x:Property>
<x:Property Name="Output"
            Type="OutArgument(x:String)">
 <x:Property.Attributes>
  <mxsw:ArgumentRequiredAttribute Value="False" />
  <mxsw:ArgumentTargetAttribute Value="False" />
  <mxsw:ArgumentDescriptionAttribute Value="The output" />
  <mxsw:ArgumentDirectionAttribute Value="Output" />
  <mxsw:ArgumentEntityAttribute Value="" />
 </x:Property.Attributes>
</x:Property>

プロパティに使用される名前は、引数名に一致する必要があります。なぜなら、コード生成はそれらの名前を、要求プロパティまたは応答プロパティとして定義するからです。

入力および出力の引数に対してサポートされている引数の種類を、次の表に示します。

.NET の種類

引数の種類

System.Int32

Integer

System.String

String

EntityReference

EntityReference

Entity

Entity

EntityCollection

EntityCollection

System.DateTime

DateTime

System.Double

Float

System.Decimal

Decimal

Money

Money

System.Boolean

Boolean

OptionSetValue

Picklist

サポートされている引数属性を次の表に示します。

引数の属性

説明

ArgumentRequiredAttribute

引数が必要かどうかを示します。

ArgumentDirectionAttribute

引数の説明が入力または出力であるかどうかを示します。

ArgumentDescriptionAttribute

引数の説明を指定します。

ArgumentEntityAttribute

エンティティで渡される場合に使用します。

ArgumentTargetAttribute

この属性は自動的に生成または追加されます。 そのワークフローを実行する主エンティティを指します。 この属性はオプションで、グローバルな操作に使用します。

配布の操作をパッケージする

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

操作用の事前バインド型を生成する

SDK のパッケージで提供される CrmSvcUtil ツールを使用して、アプリケーション コードに含めるアクションに対する要求と応答クラスを生成できます。 ただし、これらのクラスを生成する前に、操作をアクティブ化してください。

Microsoft Dynamics CRM SDK パッケージをダウンロードします。

次のサンプルは、設置型の Dynamics 365 環境でツールをコマンド ラインから実行するときの構文を示しています。 環境で実際に使用されるパラメーター値を指定してください。

    CrmSvcUtil.exe /url:http://<serverName>/<organizationName>/XRMServices/2011/Organization.svc /out:<outputFilename>.cs /username:<username> /password:<password> /domain:<domainName> /namespace:<outputNamespace> /serviceContextName:<serviceContextName> /generateActions

次のサンプルは Microsoft Dynamics 365 (オンライン) のコマンド ラインからツールを実行するときの構文を示しています。 取引先企業およびサーバーに適したパラメーター値を指定します。

    CrmSvcUtil.exe /url:https://<organizationUrlName>.api.crm.dynamics.com/XRMServices/2011/Organization.svc /out:<outputFilename>.cs /username:<username> /password:<password> /namespace:<outputNamespace> /serviceContextName:<serviceContextName> /generateActions

/generateActions パラメーターを使用していることに注意してください。詳細:コード生成ツール (CrmSvcUtil.exe) を使用して事前バインド型エンティティ クラスを作成する

実行する操作に対して生成された要求および応答クラスの事前バインドまたは遅延バインド型を使用できます。

Web API を使用してアクションを実行する

新しいアクションを作成すると、そのアクションは Web API で作成されます。 アクションがエンティティのコンテキストで作成される場合、アクションはそのエンティティにバインドされます。 それ以外の場合は、バインドされていないアクションです。詳細:Web API アクションの使用

組織サービスを使用して操作を実行する

組織 Web サービスを使用し、管理コードを使用して操作を実行するには、次の手順に従います。

  1. アプリケーションのプロジェクトで、CrmSvcUtil ツールを使用して生成された、事前バインド型ファイルの種類を含めます。

  2. アプリケーション コードで、アクションの要求を初期化して、必要なプロパティを入力します。

  3. Executeを呼び出し、要求を引数として渡します。

アプリケーション コードを実行する前に、操作が有効になっていることを確認します。 そうでない場合、ランタイム エラーが表示されます。

JavaScript の Web リソースを使用して操作を実行する

すべてのシステム操作と同じように Web API を使用してアクションを実行できます。詳細:Web API アクションの使用

Sdk.Soap.js サンプル ライブラリは、JavaScript Web リソースと組織サービス (organization.svc/web) で、メッセージをどのように使用できるかを示します。 付属の Sdk.Soap.js Action Message Generator サンプルを使用して、サンプルで提供されるシステム メッセージ用のライブラリを使用するのと同じ方法で、 Sdk.Soap.js で使用できる JavaScript ライブラリを生成します。Sdk.Soap.js Action Message Generator を使用して生成されたファイルは、各アクションの個別の JavaScript ライブラリです。 各ライブラリには、CrmSvcUtil によって生成されるクラスに対応する、要求クラスおよび応答クラスが含まれます。

プロセスを使用して操作を実行

ワークフロー、ダイアログ、またはそのほかのプロセス アクションから任意のアクションを実行できます。 Web アプリケーションのプロセス フォームの [ステップの追加] ドロップ ダウンで、[アクションの実行] アイテムを選択することで、アクティブ化されたユーザー定義アクションがプロセスで使用可能になります。 プロセス ステップにこのステップが追加されると、このステップで提供される [アクション] リストから新しいユーザー定義アクション (または任意のアクション) を選択できます。 このステップで [プロパティの設定] を選択して、ユーザー定義アクションで必要な入力パラメーターを指定します。

注意

ユーザー定義アクションに、たとえば、Picklist、Entity、または Entity Collection などのサポートされていないパラメーターの種類が存在する場合は、そのユーザー定義アクションは [アクション] リストには表示されません。

プロセスからアクションを実行する機能は、Microsoft Dynamics CRM Online 2015 更新プログラム 1 で導入されました。

既存の Depth プラットフォームのチェックによって、無限ループが確実に発生しないようにします。 深さの制限の詳細については、「MaxDepth」を参照してください。

長時間の操作を監視する

操作のリアルタイム ワークフローの手順の 1 つがユーザー定義ワークフロー活動の場合、そのユーザー定義ワークフロー活動が隔離されたサンドボックス ランタイム環境で実行され、サンドボックス プラグインを管理する場合と同じように、2 分間のタイムアウト制限が課されます。 ただし、操作自体にかかる全体的な時間に制限はありません。 また、ロールバックが有効で、操作がトランザクションに参加している場合、SQL Server タイムアウトが適用されます。

ヒント

ベスト プラクティスとして、長時間かかる操作は、.NET の非同期操作やバックグラウンド プロセスを使用して Microsoft Dynamics 365 外で実行することをお勧めします。

関連項目

リアルタイム ワークフローの作成
ガイド プロセスで Dynamics 365 のダイアログを使用する
イベント実行パイプライン
Dynamics 365 プロセスを使用したビジネス プロセスの自動化
TechNet: お客様のシステムをカスタマイズする

Microsoft Dynamics 365

© 2017 Microsoft. All rights reserved. 著作権