RetrieveMetadataChangesResponse Class

 

Updated: November 29, 2016

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)

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

[DataContractAttribute(Namespace = "http://schemas.microsoft.com/xrm/2011/Contracts")]
public sealed class RetrieveMetadataChangesResponse : OrganizationResponse

NameDescription
System_CAPS_pubmethodRetrieveMetadataChangesResponse()

Initializes a new instance of the RetrieveMetadataChangesResponse class.

NameDescription
System_CAPS_pubpropertyDeletedMetadata

Gets the deleted metadata since the last request.

System_CAPS_pubpropertyEntityMetadata

Gets the metadata defined by the request.

System_CAPS_pubpropertyExtensionData

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

System_CAPS_pubpropertyItem[String]

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

System_CAPS_pubpropertyResponseName

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

System_CAPS_pubpropertyResults

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

System_CAPS_pubpropertyServerVersionStamp

Gets a timestamp identifier for the metadata retrieved.

NameDescription
System_CAPS_pubmethodEquals(Object)

(Inherited from Object.)

System_CAPS_pubmethodGetHashCode()

(Inherited from Object.)

System_CAPS_pubmethodGetType()

(Inherited from Object.)

System_CAPS_pubmethodToString()

(Inherited from Object.)

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("");
  }

 }
}

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

Return to top

Microsoft Dynamics 365

© 2016 Microsoft. All rights reserved. Copyright

Community Additions

ADD
Show: