名前空間の作業に 1 年を費やした後、Microsoft.Xrm.Sdk
昨日、Entity.FormattedValues
プロパティにエンティティ固有 (つまりローカル) のオプション セット テキストのテキスト値が含まれていることを発見しました。
私が以前にそれを発見しなかった理由は、値を取得するための早期バインド方法がないためです。つまり、値のみを含むentity.new_myOptionSet
タイプです。のテキスト値を取得するには、entity.FormattedValues["new_myoptionset"] を呼び出す必要があります。OptionSetValue
int
string
OptionSetValue
したがって、crmsrvcutil を使用して、ローカル オプション セットのテキスト プロパティを自動生成したいと考えています。つまりEntity.new_myOptionSet
、現在のEntity.new_myOptionSetText
ように生成されるだけでなく、同様に生成されます。
Microsoft.Crm.Services.Utility.ICodeGenerationServiceを調べましたが、主に何かを指定するためのもののCodeGenerationType
ようです...
CrmServiceUtil を使用してこれらのプロパティを追加するサポートされている方法はありますか、または自動生成されたプロパティの部分クラスとしてこれらのプロパティを生成できる実行可能なカスタム アプリを作成する方がよいでしょうか?
編集 - 生成したいコードの例
現在、OptionSetValue のテキスト値にアクセスする必要があるときはいつでも、次のコードを使用します。
var textValue = OptionSetCache.GetText(service, entity, e => e.New_MyOptionSet);
オプション セット キャッシュはentity.LogicalName
、 とプロパティ式を使用して、要求しているオプション セットの名前を決定します。次に、 を使用して SDK にクエリを実行しRetrieveAttriubteRequest
、オプション セットの int 値と text 値のリストを取得します。これはキャッシュされるため、CRM に再度アクセスする必要はありません。次に、エンティティの int 値を検索しNew_MyOptionSet
、キャッシュされたリストと相互参照して、OptionSet のテキスト値を取得します。
そのすべてを行う代わりに、これを行うことができます (エンティティがクライアント側に入力されただけでなく、サーバーから取得されたと仮定します):
var textValue = entity.FormattedValues["new_myoptionset"];
ただし、「new_myoptionset」は早期バインドではなくなりました。上記の行を呼び出す OptionSetValue プロパティの追加の「テキスト」プロパティも生成するように生成されるアーリー バインドされたエンティティ クラスが欲しいので、私のエンティティにはこれが追加されます。
public string New_MyOptionSetText {
return this.GetFormattedAttributeValue("new_myoptionset"); // this is a protected method on the Entity class itself...
}