Udostępnij za pośrednictwem


RetrieveMetadataChangesResponse Class

 

Applies To: Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online

Contains the response from the RetrieveMetadataChangesRequest message.

Namespace:   Microsoft.Xrm.Sdk.Messages
Assembly:  Microsoft.Xrm.Sdk (in Microsoft.Xrm.Sdk.dll)

Inheritance Hierarchy

System.Object
  Microsoft.Xrm.Sdk.OrganizationResponse
    Microsoft.Xrm.Sdk.Messages.RetrieveMetadataChangesResponse

Syntax

[DataContractAttribute(Namespace = "https://schemas.microsoft.com/xrm/2011/Contracts")]
public sealed class RetrieveMetadataChangesResponse : OrganizationResponse
<DataContractAttribute(Namespace := "https://schemas.microsoft.com/xrm/2011/Contracts")>
Public NotInheritable Class RetrieveMetadataChangesResponse
    Inherits OrganizationResponse

Constructors

Name Description
System_CAPS_pubmethod RetrieveMetadataChangesResponse()

Initializes a new instance of the RetrieveMetadataChangesResponse class.

Properties

Name Description
System_CAPS_pubproperty DeletedMetadata

Gets the deleted metadata since the last request.

System_CAPS_pubproperty EntityMetadata

Gets the metadata defined by the request.

System_CAPS_pubproperty ExtensionData

Gets or sets the structure that contains extra data.(Inherited from OrganizationResponse.)

System_CAPS_pubproperty Item[String]

Gets an indexer for the Results collection.(Inherited from OrganizationResponse.)

System_CAPS_pubproperty ResponseName

Gets or sets the name of the response.(Inherited from OrganizationResponse.)

System_CAPS_pubproperty Results

Gets the results of the request that was performed.(Inherited from OrganizationResponse.)

System_CAPS_pubproperty ServerVersionStamp

Gets a timestamp identifier for the metadata retrieved.

Methods

Name Description
System_CAPS_pubmethod Equals(Object)

(Inherited from Object.)

System_CAPS_pubmethod GetHashCode()

(Inherited from Object.)

System_CAPS_pubmethod GetType()

(Inherited from Object.)

System_CAPS_pubmethod ToString()

(Inherited from Object.)

Examples

The following code snippets from Sample: Query metadata and detect changes show the use of RetrieveMetadataChangesResponseDeletedMetadata and EntityMetadata properties.


protected String updateOptionLabelList(EntityQueryExpression entityQueryExpression, String clientVersionStamp)
{
 //Retrieve metadata changes and add them to the cache
 RetrieveMetadataChangesResponse updateResponse;
 try
 {
  updateResponse = getMetadataChanges(entityQueryExpression, clientVersionStamp, DeletedMetadataFilters.OptionSet);
  addOptionLabelsToCache(updateResponse.EntityMetadata, true);
  removeOptionLabelsFromCache(updateResponse.DeletedMetadata, true);

 }
 catch (FaultException<Microsoft.Xrm.Sdk.OrganizationServiceFault> ex)
 {
  // Check for ErrorCodes.ExpiredVersionStamp (0x80044352)
  // Will occur when the timestamp exceeds the Organization.ExpireSubscriptionsInDays value, which is 90 by default.
  if (ex.Detail.ErrorCode == unchecked((int)0x80044352))
  {
   //reinitialize cache
   _optionLabelList.Clear();

   updateResponse = getMetadataChanges(entityQueryExpression, null, DeletedMetadataFilters.OptionSet);
   //Add them to the cache and display the changes
   addOptionLabelsToCache(updateResponse.EntityMetadata, true);

  }
  else
  {
   throw ex;
  }

 }
 return updateResponse.ServerVersionStamp;
}

protected void addOptionLabelsToCache(EntityMetadataCollection entityMetadataCollection, Boolean showChanges)
{

 List<OptionSetOption> changes = new List<OptionSetOption>();

 foreach (EntityMetadata em in entityMetadataCollection)
 {
  foreach (AttributeMetadata am in em.Attributes)
  {
   switch (am.AttributeType)
   {
    case AttributeTypeCode.Boolean:
     BooleanAttributeMetadata booleanAttribute = (BooleanAttributeMetadata)am;
     //Labels will not be included if they aren't new
     if (booleanAttribute.OptionSet.FalseOption.Label.UserLocalizedLabel != null)
     {
      changes.Add(new OptionSetOption(
      (Guid)booleanAttribute.OptionSet.MetadataId,
      0, 
      booleanAttribute.OptionSet.FalseOption.Label.UserLocalizedLabel.Label)
      );
     }
     //Labels will not be included if they aren't new
     if (booleanAttribute.OptionSet.TrueOption.Label.UserLocalizedLabel != null)
     {
      changes.Add(new OptionSetOption(
      (Guid)booleanAttribute.OptionSet.MetadataId,
      1, 
      booleanAttribute.OptionSet.TrueOption.Label.UserLocalizedLabel.Label));
     }
     break;
    default:
     EnumAttributeMetadata optionsetAttribute = (EnumAttributeMetadata)am;
     foreach (OptionMetadata option in optionsetAttribute.OptionSet.Options)
     {
      //Labels will not be included if they aren't new
      if (option.Label.UserLocalizedLabel != null)
      {
       changes.Add(new OptionSetOption(
        (Guid)optionsetAttribute.OptionSet.MetadataId,
       (int)option.Value, 
       option.Label.UserLocalizedLabel.Label));
      }        
     }
     break;
   }
  }
 }

 _optionLabelList.AddRange(changes);

 if (showChanges)
 {

  if (changes.Count > 0)
  {
   Console.WriteLine("{0} option labels for {1} entities were added to the cache.", changes.Count, entityMetadataCollection.Count);
   Console.WriteLine("{0} Option Labels cached", _optionLabelList.Count);
  }
  else
  { Console.WriteLine("No option labels were added to the cache."); }

 }
}

protected void removeOptionLabelsFromCache(DeletedMetadataCollection DeletedMetadata, Boolean showChanges)
{
 List<OptionSetOption> optionSetOptionsToRemove = new List<OptionSetOption>();

 if (DeletedMetadata.Keys.Contains(DeletedMetadataFilters.OptionSet))
 {
  DataCollection<Guid> optionsetmetadataids = (DataCollection<Guid>)DeletedMetadata[DeletedMetadataFilters.OptionSet];
  foreach (Guid metadataid in optionsetmetadataids)
  {
   foreach (OptionSetOption oso in _optionLabelList)
   {
    if (metadataid == oso.optionsetId)
    {
     optionSetOptionsToRemove.Add(oso);
    }
   }
  }
 }
 foreach (OptionSetOption option in optionSetOptionsToRemove)
 {
  _optionLabelList.Remove(option);
 }
 if (showChanges)
 {
  if (optionSetOptionsToRemove.Count > 0)
  {
   Console.WriteLine("{0} Option Labels removed", optionSetOptionsToRemove.Count);
   Console.WriteLine("{0} Total Option Labels currently cached", _optionLabelList.Count);
   Console.WriteLine("");
  }
  else
  {
   Console.WriteLine("No Option Labels removed.");
   Console.WriteLine("");
  }

 }
}

Thread Safety

Any public static ( Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.

See Also

RetrieveMetadataChangesRequest
Microsoft.Xrm.Sdk.Messages Namespace
Retrieve and detect changes to metadata
Sample: Query metadata and detect changes

Return to top

Microsoft Dynamics 365

© 2016 Microsoft. All rights reserved. Copyright