カスタムの状態モデルの遷移の定義

Incident (サポート案件) エンティティまたはユーザー定義エンティティのカスタム状態遷移を指定できます。 EntityMetadata.IsStateModelAware プロパティは、状態モデル遷移をサポートするエンティティに対しては true です。

カスタムの状態遷移は、特定の状態のレコードに対して有効な状態遷移を定義する、任意のレベルのフィルター処理です。 有効な状態と状態値の組み合わせが多数存在する場合に特に、オプションの限定した一覧を定義すると、レコードの正確な状態を選択することが容易になります。

状態モデルとは

状態の概念をサポートするエンティティは、表に示されているように、このデータをキャプチャする一組の属性を備えています。

論理名 表示名 内容
statecode ステータス レコードの状態を表します。 ユーザー定義エンティティに対して、これはアクティブかまたは非アクティブ。 インシデント (サポート案件) エンティティはアクティブ解決、および取り消しを使用します。 さらなる状態オプションは追加できませんが、オプション ラベルは変更できます。
statuscode ステータス 特定の状態にリンクされている状態を表します。 各状態は、少なくとも 1 つの可能な状態を持っている必要があります。 追加の状態オプションを追加し、既存のオプションのラベルを変更できます。

属性のメタデータは、特定の状態に対してどの状態値が有効であるかを定義します。 たとえば、Incident (ケース) エンティティについては、既定の状態と状態オプションが次の表に示されています。

完了状態 状態
Label: アクティブ

Value: 0
Label: 処理中

Value: 1

State: 0
Label: アクティブ

Value: 0
Label: 保留中

Value: 2

State: 0
Label: アクティブ

Value: 0
Label: 詳細待ち

Value: 3

State: 0
Label: アクティブ

Value: 0
ラベル: 調査中

Value: 4

State: 0
Label: 解決

Value: 1
Label: 問題解決済み

Value: 5

State: 1
Label: 解決

Value: 1
Label: 情報提供済み

Value: 1000

State: 1
ラベル: 取り消し

Value: 2
Label: 取り消されました

Value: 6

State: 2
ラベル: 取り消し

Value: 2
Label: 統合

Value: 2000

State: 2

このデータは、StatusOptionMetadata クラスに保存されます。このクラスは、StatusAttributeMetadata クラスのオプションを表します。

組織のエンティティ メタデータを表示するには、メタデータ ブラウザー ソリューションをインストールしてください。メタデータ ブラウザー ソリューションについては、「組織のメタデータの参照」を参照してください。 「エンティティ参照」でエンティティの参照ドキュメントを参照することもできます。

有効な状態遷移の検出

statuscode 属性を変更して、現在の状態からの有効な遷移を表すその他の状態オプションを定義できます。 手順については、カスタマイズ ガイドのトピック、ステータスの遷移の定義 を参照してください。

カスタム状態遷移をエンティティに適用する場合、 EntityMetadata.EnforceStateTransitions プロパティは true になります。 また、StatusAttributeMetadata.Options コレクション内の各 StatusOptionMetadata には、新しい TransitionData プロパティがあります。 このプロパティには、XML ドキュメントを表す文字列値が含まれます。 このドキュメントには、有効な遷移の定義が含まれます。 たとえば、既定の Incident (ケース) StatusCode属性オプションは、次の TransitionData 値を持つことができます。

<allowedtransitions xmlns="https://schemas.microsoft.com/crm/2009/WebServices">
<allowedtransition sourcestatusid="1" tostatusid="6" />
<allowedtransition sourcestatusid="1" tostatusid="1000" />
<allowedtransition sourcestatusid="1" tostatusid="2000" />
<allowedtransition sourcestatusid="1" tostatusid="5" />
</allowedtransitions>

Note

このデータが Web サービスからアンマネージ コードで読み込まれるとき、たとえば JavaScript を使用するとき、このデータはエスケープされ、次の例のように表示されます。

&lt;allowedtransitions xmlns="https://schemas.microsoft.com/crm/2009/WebServices"&gt;
&lt;allowedtransition sourcestatusid="1" tostatusid="6" /&gt;
&lt;allowedtransition sourcestatusid="1" tostatusid="1000" /&gt;
&lt;allowedtransition sourcestatusid="1" tostatusid="2000" /&gt;
&lt;allowedtransition sourcestatusid="1" tostatusid="5" /&gt;
&lt;/allowedtransitions&gt;

このデータが存在し、エンティティ EnforceStateTransitions プロパティが true のとき、インシデント インスタンスは許可された statuscode 値の 1 つにのみ変更できます。 IOrganizationService.Update を使用して、statuscodeOptionSetValue を状態の変更を表さない許可された値のいずれかに設定できます。 状態を変更するには、許可された State プロパティ値と Status プロパティ値を設定する SetStateRequest か、または Status プロパティを現在の statuscode 値に対して許可された値の 1 つに設定する CloseIncidentRequest を使用します。 無効な値を設定しようとすると、エラーがスローされます。

関連項目

サンプル: 有効な状態の遷移を取得する
レコードの状態とステータス
メタデータの変更の取得および検出