0

새로운 필드, 새로운 엔티티 등 메타 데이터의 변경 사항을 추적 할 수있는 방법이 있습니까?Dynamics CRM에서 엔터티 메타 데이터의 변경 내용을 추적 할 수 있습니까?

동일한 환경에서 매우 큰 프로젝트를 제어하기가 어렵 기 때문에 프로덕션에 배포하면 안되는 사용자 정의가 있습니다 (대부분 개발 환경에서 실수 또는 테스트 임).

그리고 누가 그 커스터마이징을했는지 알 수있는 방법이 있습니까?

나는 가능한 모든 변화를 알고 싶지 않다.

+0

가능한 복제 [가 그것을 온라인 역학 CRM에서 스키마 변경 정보를 검색 할 수?] (https://stackoverflow.com/questions/41575510/is-it-possible-to-retrieve-schema-change -information-in-dynamics-crm-online) –

+0

@ArunVinoth는 특정 질문이며 명확하지 않지만, 나는 잠시 동안 검색을 해왔고 아무도 이것을 공식 문서가 아닌 매우 명확하게 답할 수 있습니다. 내 대답에 기여할 수 있습니다. – Sxntk

+0

내 대답이 도움이된다면, 그것을 upvote. –

답변

2

RetrieveMetadataChangesRequest을 사용해야하며 누가 변경했는지 알 수 없습니다.

이이 요청이 메타 데이터 및 be able to work offline에서 정보를 캐시하는 데 사용하기위한 것입니다 (12)

2011 업데이트 롤업 단지에서 의 Microsoft Dynamics CRM을 사용할 수 있지만 우리는 복잡한 메타 데이터 변경 내용을 추적하는 데 사용할 수 있습니다 프로젝트와 인터넷에

예 복잡 팀은 그래서 이것은 당신이 요청 사용할 수있는 방법입니다 매우 친절하지 않습니다 : 요청이 하나 개의 매개 변수를 채우는 만 완료 할 수 있습니다

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

이 요청을 사용하여 필요한 방식으로 구현하십시오.

0

몇 더 많은 옵션 :

  1. 게시하고 모든 게시에 대한 플러그인을 등록하고, 게시 언제 누가했는지 추적 할 수 있습니다. 누군가 을 변경하는 사람을 좁히는 데 도움이 될 수 있지만 기술적으로는 게시하지 않고 기술적으로 변경 될 수 있으므로 완벽한 정보는 아닙니다.

  2. Dynamics OnPremise를 사용하는 경우 메타 데이터 테이블은 메타 데이터 검색을 통해 볼 수없는 변경 사항을 만든 사람에 대한 정보를 저장하는 경우가 있습니다. 나는 이것이 매우 드물지만 모든 Metadata가 Modified By 사용자를 저장하지는 않는다는 것을 발견했습니다.

+0

매트, 좀 더 구체적으로 표현할 수 있습니까? 게시하는 데 'Who'를 어떻게 알 수 있습니까? – Sxntk

+0

플러그인 실행 컨텍스트에서 가져올 수 있습니다. InitiatingUserId (https://msdn.microsoft.com/en-us/library/microsoft.xrm.sdk.iexecutioncontext.initiatinguserid.aspx) – Matt

+0

게시 단추를 누르면 xml에는 아무 것도 관련이 없으며 엔티티의 이름 만 포함됩니다. – Sxntk