0

Gibt es eine Möglichkeit, Änderungen an Metadaten zu verfolgen, wie neue Felder, neue Entitäten und so weiter?Ist es möglich, Änderungen an Entitätsmetadaten in Dynamics CRM nachzuverfolgen?

Es ist schwierig, ein sehr großes Projekt in der gleichen Umgebung zu steuern, daher gibt es manchmal Anpassungen, die nicht auf Produktionen angewendet werden sollten (meistens sind Fehler oder Tests in einer Entwicklungsumgebung).

Und es gibt eine Möglichkeit zu wissen, wer diese Anpassung vorgenommen hat?

Ich bin auf der Suche nach jeder möglichen Veränderung, nicht irgendwelche besonderen.

+0

Mögliche Duplikat [Ist es möglich, Schemaänderungsinformationen in Dynamics CRM Online abrufen?] (Https://stackoverflow.com/questions/41575510/is-it-possible-to-retrieve-schema-change -Information-in-dynamics-crm-online) –

+0

@ArunVinoth das ist eine spezifische Frage und nicht sehr klar, ich habe für eine Weile gesucht und niemand könnte sehr klar sein, dies zu beantworten, nicht einmal die offizielle Dokumentation, Sie Gerne können Sie zu meiner Antwort beitragen. – Sxntk

+0

sicher, wenn meine Antwort hilfreich war, upvote es. –

Antwort

2

Sie müssen die RetrieveMetadataChangesRequest verwenden und es ist nicht möglich zu wissen, wer die Änderung vorgenommen hat.

Dies ist nur verfügbar, von Microsoft Dynamics CRM 2011 Update Rollup 12

Diese Anforderung soll verwendet werden, um Informationen aus den Metadaten cachen und be able to work offline, aber wir können es verwenden, um Änderungen an Metadaten in komplexen verfolgen

Projekte und komplexe Teams

Beispiele im Internet sind nicht sehr freundlich, so ist dies, wie Sie die Anforderung verwenden können:

die Anforderung nur mit dem Füllen eines Parameters

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

Das erste Mal, wenn Sie diese Anforderung ausgeführt ClientVersionStamp null sein muss, weil es keine Anfrage vor den Metadaten vorgenommen wurde und es gibt keine ClientVersionStamp. Dieser Parameter ist das letzte Mal, wenn Sie nach Metadatenänderungen fragen. Wenn er null ist, werden alle Anpassungen von Zeit zu Zeit vorgenommen. Daher wird diese Anfrage wahrscheinlich nicht rechtzeitig abgeschlossen, so dass wir sie abstimmen müssen.

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); 

Dadurch werden alle Änderungen von Metadaten für „ServiceAppointment“ abfragen, fühlen sich frei, um die Einheit zu verwenden, die Sie wollen, aber was wir brauchen, ist die ServerTimeStamp aus der Antwort, es wird aussehen wie "22319800!09/13/2017 16:17:46", wenn Sie versuchen, dies zu senden Zeitstempel zuerst, wird es eine Ausnahme auslösen, so ist es notwendig, zuerst abzufragen, um einen Server-Zeitstempel zu erhalten.

Jetzt können Sie die Anfrage und den Zeitstempel verwenden, um alle neuen Änderungen seit "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); 
abrufen

Sie können die Abfrage filtern Ihre Bedürfnisse anzupassen, suchen nur für bestimmte Einheiten, Etiketten, Beziehung, Schlüssel und Attribute oder spezifische Eigenschaften.

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

Verwenden Sie diese Anforderung und implementieren Sie sie wie Sie benötigen.

0

Ein paar mehr Optionen:

  1. ein Plugin Registrieren Sie sich auf alle veröffentlichen und veröffentlichen, und verfolgen, wer tat das veröffentlichen und wann. Das kann Ihnen helfen, einzugrenzen, wer Änderungen vorgenommen hat, obwohl jemand technisch eine Änderung ohne Veröffentlichung vornehmen könnte, also nicht perfekte Informationen.

  2. Wenn Sie Dynamics OnPremise verwenden, speichern die Metadatabellen manchmal Informationen darüber, wer eine Änderung vorgenommen hat, die bei einem Metadatenabruf nicht sichtbar ist. Ich habe festgestellt, dass dies sehr fleckig ist, aber nicht alle Metadaten haben einen Modified By-Benutzer gespeichert.

+0

Matt, Können Sie genauer sein? Wie ist es möglich, das "Wer" auf Publish zu kennen? – Sxntk

+0

Sie können es aus dem Plugin-Ausführungskontext abrufen: InitiatingUserId (https://msdn.microsoft.com/en-us/library/microsoft.xrm.sdk.iexecutioncontext.initiatinguserid.aspx) – Matt

+0

Wenn ich die Schaltfläche zum Veröffentlichen drücken, die XML hat nichts Relevantes, nur den Namen der Entität – Sxntk