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.
Assembly: Microsoft.Xrm.Sdk (in Microsoft.Xrm.Sdk.dll)
Microsoft.Xrm.Sdk.OrganizationResponse
Microsoft.Xrm.Sdk.Messages.RetrieveMetadataChangesResponse
| Name | Description | |
|---|---|---|
![]() | RetrieveMetadataChangesResponse() | Initializes a new instance of the RetrieveMetadataChangesResponse class. |
| Name | Description | |
|---|---|---|
![]() | DeletedMetadata | Gets the deleted metadata since the last request. |
![]() | EntityMetadata | Gets the metadata defined by the request. |
![]() | ExtensionData | Gets or sets the structure that contains extra data.(Inherited from OrganizationResponse.) |
![]() | Item[String] | Gets an indexer for the Results collection.(Inherited from OrganizationResponse.) |
![]() | ResponseName | Gets or sets the name of the response.(Inherited from OrganizationResponse.) |
![]() | Results | Gets the results of the request that was performed.(Inherited from OrganizationResponse.) |
![]() | ServerVersionStamp | Gets a timestamp identifier for the metadata retrieved. |
| Name | Description | |
|---|---|---|
![]() | Equals(Object) | (Inherited from Object.) |
![]() | GetHashCode() | (Inherited from Object.) |
![]() | GetType() | (Inherited from Object.) |
![]() | ToString() | (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.
Microsoft Dynamics 365
© 2016 Microsoft. All rights reserved. Copyright

