代码之家  ›  专栏  ›  技术社区  ›  Sxntk Jarek Kardas

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

  •  2
  • Sxntk Jarek Kardas  · 技术社区  · 7 年前

    有没有办法跟踪元数据的更改,比如新字段、新实体等等?

    有一种方法可以知道是谁做的定制?

    我希望知道每一个可能的变化,而不是任何特别的。

    2 回复  |  直到 7 年前
        1
  •  4
  •   Sxntk Jarek Kardas    7 年前

    你必须使用

    这只能从

    be able to work offline ,但我们可以使用它来跟踪复杂项目和复杂团队中元数据的更改

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

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

    您第一次执行此请求时 ClientVersionStamp 客户端版本STAMP . 这个参数是您最后一次查询元数据更改,如果它为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”的所有元数据更改,可以随意使用您想要的实体,但我们需要的是响应中的服务器时间戳,它看起来像 "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
        }
    };
    

    使用此请求并按您需要的方式实现它。

        2
  •  0
  •   Matt    7 年前

    1. 在Publish和Publish All上注册插件,并跟踪谁注册了插件 发布时间。这可能有助于你缩小 改变,尽管从技术上讲,有些人可以在没有

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