カスタムの状態モデルの遷移の定義
Incident
(サポート案件) エンティティまたはユーザー定義エンティティのカスタム状態遷移を指定できます。 EntityMetadata.IsStateModelAware プロパティは、状態モデル遷移をサポートするエンティティに対しては true
です。
カスタムの状態遷移は、特定の状態のレコードに対して有効な状態遷移を定義する、任意のレベルのフィルター処理です。 有効な状態と状態値の組み合わせが多数存在する場合に特に、オプションの限定した一覧を定義すると、レコードの正確な状態を選択することが容易になります。
状態モデルとは
状態の概念をサポートするエンティティは、表に示されているように、このデータをキャプチャする一組の属性を備えています。
論理名 | 表示名 | 内容 |
---|---|---|
statecode |
ステータス | レコードの状態を表します。 ユーザー定義エンティティに対して、これはアクティブかまたは非アクティブ。 インシデント (サポート案件) エンティティはアクティブ、解決、および取り消しを使用します。 さらなる状態オプションは追加できませんが、オプション ラベルは変更できます。 |
statuscode |
ステータス | 特定の状態にリンクされている状態を表します。 各状態は、少なくとも 1 つの可能な状態を持っている必要があります。 追加の状態オプションを追加し、既存のオプションのラベルを変更できます。 |
属性のメタデータは、特定の状態に対してどの状態値が有効であるかを定義します。 たとえば、Incident
(ケース) エンティティについては、既定の状態と状態オプションが次の表に示されています。
完了状態 | 状態 |
---|---|
Label : アクティブValue : 0 |
Label : 処理中Value : 1State : 0 |
Label : アクティブValue : 0 |
Label : 保留中Value : 2State : 0 |
Label : アクティブValue : 0 |
Label : 詳細待ちValue : 3State : 0 |
Label : アクティブValue : 0 |
ラベル: 調査中Value : 4State : 0 |
Label : 解決Value : 1 |
Label : 問題解決済みValue : 5State : 1 |
Label : 解決Value : 1 |
Label: 情報提供済みValue : 1000State : 1 |
ラベル: 取り消しValue : 2 |
Label : 取り消されましたValue : 6State : 2 |
ラベル: 取り消しValue : 2 |
Label : 統合Value : 2000State : 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 を使用するとき、このデータはエスケープされ、次の例のように表示されます。
<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>
このデータが存在し、エンティティ EnforceStateTransitions
プロパティが true
のとき、インシデント インスタンスは許可された statuscode
値の 1 つにのみ変更できます。 IOrganizationService.Update を使用して、statuscode
OptionSetValue を状態の変更を表さない許可された値のいずれかに設定できます。 状態を変更するには、許可された State プロパティ値と Status プロパティ値を設定する SetStateRequest か、または Status プロパティを現在の statuscode
値に対して許可された値の 1 つに設定する CloseIncidentRequest を使用します。 無効な値を設定しようとすると、エラーがスローされます。