次の方法で共有


公開済みメタデータの取得

カテゴリ: パフォーマンス、使用法

影響の可能性: 高い

症状

発行されていないメタデータを取得すると、次の原因が発生する可能性があります。

  • パフォーマンスの低下
  • ユーザーの混乱

ガイダンス

発行されていないカスタマイズを取得することは珍しく、それらのカスタマイズを取得する必要はほとんどありません。

カスタマイズ可能なメタデータを編集するアプリケーションを作成する場合は、発行されていないカスタマイズを取得する必要がある場合があります。 たとえば、カスタム メタデータ エディターを作成する場合は、それらの項目の未発行の定義を取得する必要があります。 開発者がいくつかの変更を定義しても公開しない場合、開発者が最新の開発されたカスタマイズを取得していることを確認するために、アプリケーションはそれらを取得できる必要があります。 それができない場合、非公開カスタマイズが失われることになります。

ただし、エディターを作成していない場合、または発行されていない定義を取得する明示的な必要性がない場合は、公開されている定義のみを取得します。 以下の例は、公開済みカスタマイズを取得する方法を示しています。

既定の動作

既定では、メタデータを取得すると、公開済みのカスタマイズのみが取得されます。

public RetrieveAllEntitiesAttributesResponse GetAllEntitiesImplicit(IOrganizationService service)
{
    var request = new RetrieveAllEntitiesRequest();
    request.EntityFilters = EntityFilters.Attributes;

    return service.Execute(request) as RetrieveAllEntitiesAttributesResponse;
}

動作の明示的な制御

公開されたカスタマイズのみを取得するように、 RetrieveAsIfPublished プロパティを明示的に設定します。

public RetrieveAllEntitiesAttributesResponse GetAllEntitiesExplicit(IOrganizationService service)
{
    var request = new RetrieveAllEntitiesRequest()
    {
        RetrieveAsIfPublished = false
        EntityFilters = EntityFilters.Attributes
    };

    return service.Execute(request) as RetrieveAllEntitiesAttributesResponse;
}

問題となるパターン

次の操作では、 RetrieveAsIfPublished パラメーターを使用して、発行されていないメタデータを取得できます。

次の例は、発行されていないカスタマイズを取得する方法を示しています。

警告

これらのシナリオは避けてください。

public RetrieveEntityKeyResponse GetEntityKey(IOrganizationService service, string entityName, string keyName)
{
    var request = new RetrieveEntityKeyRequest()
    {
        EntityLogicalName = entityName,
        LogicalName = keyName,
        RetrieveAsIfPublished = true
    };

    return service.Execute(request) as RetrieveEntityKeyResponse;
}

public RetrieveRelationshipResponse GetRelationship(IOrganizationService service, Guid id)
{
    var request = new RetrieveRelationshipRequest()
    {
        MetadataId = id,
        RetrieveAsIfPublished = true
    };

    return service.Execute(request) as RetrieveRelationshipResponse;
}

public RetrieveEntityAttributesResponse GetEntity(IOrganizationService service, Guid id)
{
    var request = new RetrieveEntityRequest()
    {
        MetadataId = id,
        RetrieveAsIfPublished = true,
        EntityFilters = EntityFilters.Attributes
    };

    return service.Execute(request) as RetrieveEntityAttributesResponse;
}

Web API 関数

このガイダンスは、次の Web API 関数にも適用されます。

追加情報

Dynamics 365 サービスを使用すると、公開または発行されていない特定のメタデータを取得できます。 CRM 2011 Dynamics以降、RetrieveAsIfPublished プロパティを true に明示的に設定しない限り、アプリケーションのメモリ内メタデータ キャッシュは既定で発行されたメタデータを返します。

発行されていないメタデータを取得すると、要求の処理にオーバーヘッドが増えるため、パフォーマンスが低下します。 また、リクエスタが予期しないメタデータを返すこともできます。 たとえば、発行されていないオプション セット メタデータを取得すると、ユーザー インターフェイスに表示されないラベル値が返され、エンド ユーザーが混乱する可能性があります。

参照

RetrieveEntityRequest.RetrieveAsIfPublished プロパティ
.NET用SDKを使用してメタデータを処理する
メタデータで Web API を使用する
カスタマイズを公開します