2

新しいフィールド、新しいエンティティなど、メタデータへの変更を追跡する方法はありますか?

非常に大規模なプロジェクトを同じ環境で制御することは困難であるため、本番環境にデプロイしてはならないカスタマイズが存在する場合があります (ほとんどは開発環境でのミスまたはテストです)。

誰がそのカスタマイズを行ったかを知る方法はありますか?

特定の変更ではなく、考えられるすべての変更を知りたいと思っています。

4

2 に答える 2

4

RetrieveMetadataChangesRequestを使用する必要があり、誰が変更を行ったかを知ることはできません。

これは、Microsoft Dynamics CRM 2011 更新プログラムのロールアップ 12からのみ入手できます。

このリクエストは、メタデータからの情報をキャッシュしてオフラインで作業できるようにするために使用することを目的としていますが、複雑なプロジェクトや複雑なチームでメタデータへの変更を追跡するために使用できます

インターネット上の例はあまり友好的ではないため、これがリクエストの使用方法です。

1 つのパラメータを入力するだけでリクエストを完了することができます

RetrieveMetadataChangesRequest req = new RetrieveMetadataChangesRequest()
{
    ClientVersionStamp = null
};
var response = (RetrieveMetadataChangesResponse)service.Execute(req);

このリクエストを初めて実行するときClientVersionStampは、null である必要があります。これは、以前にメタデータに対して行われたリクエストがなく、 がないためClientVersionStampです。このパラメーターは、メタデータの変更をクエリする最後の時間であり、null の場合は常にすべてのカスタマイズが行われるため、この要求は時間どおりに完了しない可能性があるため、調整する必要があります。

var EntityFilter = new MetadataFilterExpression(LogicalOperator.And);
EntityFilter.Conditions.Add(new MetadataConditionExpression("SchemaName", MetadataConditionOperator.Equals, "ServiceAppointment"));
var entityQueryExpression = new EntityQueryExpression()
        {
            Criteria = EntityFilter
        };
RetrieveMetadataChangesRequest req = new RetrieveMetadataChangesRequest()
        {
            Query = entityQueryExpression,
            ClientVersionStamp = null
        };
var response = (RetrieveMetadataChangesResponse)service.Execute(req);

これにより、「ServiceAppointment」のすべてのメタデータの変更が照会されます。必要なエンティティを自由に使用できますが、必要なのは応答からの ServerTimeStamp"22319800!09/13/2017 16:17:46"です。このタイムスタンプを最初に送信しようとすると、そのため、サーバーのタイム スタンプを取得するには、最初にクエリを実行する必要があります。

これで、リクエストとタイム スタンプを使用して、それ以降のすべての新しい変更を取得できます。"22319800!09/13/2017 16:17:46"

RetrieveMetadataChangesRequest req = new RetrieveMetadataChangesRequest()
        {
          Query = entityQueryExpression,
          ClientVersionStamp = @"22319800!09/13/2017 16:17:46"
        };

var response = (RetrieveMetadataChangesResponse)service.Execute(req);

ニーズに合わせてクエリをフィルタリングし、特定のエンティティ、ラベル、関係、キーと属性、または特定のプロパティのみを検索できます。

EntityQueryExpression entityQueryExpression = new EntityQueryExpression()
{
    Criteria = EntityFilter,
    Properties = EntityProperties,
    RelationshipQuery = new RelationshipQueryExpression()
    {
        Properties = RelationshipProperties,
        Criteria = RelationshipFilter
    },
    AttributeQuery = new AttributeQueryExpression()
    {
        Properties = AttributeProperties,
        Criteria = AttributeFilter
    }
};

このリクエストを使用して、必要な方法で実装してください。

于 2017-09-13T18:45:53.040 に答える