Dynamics crm 是否可以跟踪Dynamics CRM中实体元数据的更改?

Dynamics crm 是否可以跟踪Dynamics CRM中实体元数据的更改?,dynamics-crm,dynamics-crm-2011,dynamics-crm-2013,dynamics-crm-2015,dynamics-crm-365,Dynamics Crm,Dynamics Crm 2011,Dynamics Crm 2013,Dynamics Crm 2015,Dynamics Crm 365,是否有任何方法可以跟踪元数据的更改,如新字段、新实体等 在同一环境中控制一个非常大的项目是很困难的,因此有时有些定制不应该部署到产品中,主要是开发环境中的错误或测试 有办法知道是谁做的 我希望了解所有可能的更改,而不是任何特定更改。您必须使用RetrieveMetadataChangesRequest,并且不可能知道是谁进行了更改 这仅可从Microsoft Dynamics CRM 2011更新汇总12获得 此请求旨在用于缓存元数据中的信息,但我们可以使用它跟踪复杂项目和复杂团队中元数据的更改

是否有任何方法可以跟踪元数据的更改,如新字段、新实体等

在同一环境中控制一个非常大的项目是很困难的,因此有时有些定制不应该部署到产品中,主要是开发环境中的错误或测试

有办法知道是谁做的

我希望了解所有可能的更改,而不是任何特定更改。

您必须使用RetrieveMetadataChangesRequest,并且不可能知道是谁进行了更改

这仅可从Microsoft Dynamics CRM 2011更新汇总12获得

此请求旨在用于缓存元数据中的信息,但我们可以使用它跟踪复杂项目和复杂团队中元数据的更改

互联网上的示例不太友好,因此您可以这样使用请求:

只有填写一个参数才能完成请求

RetrieveMetadataChangesRequest req=新的RetrieveMetadataChangesRequest { ClientVersionStamp=null }; var response=RetrieveMetadataChangesResponseservice.Executeq; 第一次执行此请求时,ClientVersionStamp需要为null,因为之前没有对元数据发出请求,也没有ClientVersionStamp。此参数是您最后一次查询元数据更改,如果为null,则将带来所有时间的自定义,因此此请求可能无法按时完成,因此我们需要进行调整

var EntityFilter=新的MetadataFilterExpressionLogicalOperator.And; EntityFilter.Conditions.Addnew MetadataConditionExpressionSchemaName,MetadataConditionOperator.Equals,ServiceAppointment; var entityQueryExpression=新entityQueryExpression { 条件=实体过滤器 }; RetrieveMetadataChangesRequest req=新的RetrieveMetadataChangesRequest { Query=entityQueryExpression, ClientVersionStamp=null }; var response=RetrieveMetadataChangesResponseservice.Executeq; 这将查询ServiceAppointment的所有元数据更改,请随意使用您想要的实体,但我们需要的是响应中的ServerTimeStamp,它看起来像22319800!2017年9月13日16:17:46,如果您尝试先发送此时间戳,它将引发异常,因此必须先查询以获取服务器时间戳

现在,您可以使用请求和时间戳检索自22319800以来的所有新更改!2017年9月13日16:17:46

RetrieveMetadataChangesRequest req=新的RetrieveMetadataChangesRequest { Query=entityQueryExpression, ClientVersionStamp=@22319800!09/13/2017 16:17:46 }; var response=RetrieveMetadataChangesResponseservice.Executeq; 您可以根据需要筛选查询,只搜索特定实体、标签、关系、键和属性或特定属性

EntityQueryExpression EntityQueryExpression=新EntityQueryExpression { 条件=EntityFilter, 属性=实体属性, RelationshipQuery=新建RelationshipQueryExpression { 属性=关系属性, 条件=关系过滤器 }, AttributeQuery=新的AttributeQuery表达式 { 属性=属性属性, 条件=属性过滤器 } }; 使用此请求并按您需要的方式实现它。

还有几个选项:

在Publish和Publish All上注册插件,并跟踪是谁注册的 发布日期和时间。这可能有助于你缩小谁在制造 改变,尽管从技术上讲,有些人可以在没有改变的情况下做出改变 发布它,所以不是完美的信息

如果您使用的是Dynamics OnPremise,元数据表有时会存储有关谁进行了更改的信息,而这些信息在元数据检索中是不可见的。我发现这是非常不稳定的,虽然不是所有的元数据都有一个由用户修改的存储


@ArunVinoth的可能副本这是一个具体的问题,不是很清楚,我已经搜索了一段时间,没有人能够非常清楚地回答这个问题,即使是官方文件,欢迎您提供我的答案。因此,您正在寻找一个指责工具;对我来说,这听起来不是一个很有建设性的方法。我建议将CRM解决方案存储在源代码管理中。您可以使用解决方案打包器来解包解决方案。好处是它使您能够跟踪所有解决方案组件,而不仅仅是实体。@HenkvanBoeijen不可能知道“谁”,因此很难责怪,而不是我想要什么。我们的团队非常庞大,偶尔会有新人。CRM中的定制非常敏感,如果部署,我们不需要新字段。我希望让自己明白。@ArunVinoth我对你的回答有一些问题,因为不太清楚从哪里获取时间戳以及如何进行查询。我想是因为
我们的答案是基于msdn的,这也是令人困惑的。我做了一个变通办法,希望它能对那些看我的人有用。马特,你能更具体一点吗?怎么可能知道发布时的“谁”呢?你可以从插件执行上下文中获取它:InitiatingUserId当我按下发布按钮时,xml没有任何相关内容,只有实体的名称