次の方法で共有


RetrieveMetadataChangesResponse クラス

適用対象: CRM 2015 on-prem, CRM Online

Contains the response from the RetrieveMetadataChangesRequest message.

名前空間: Microsoft.Xrm.Sdk.Messages
アセンブリ: Microsoft.Xrm.Sdk (Microsoft.Xrm.Sdk.dll に含まれる)

構文

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

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

 }
}

継承階層

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

スレッド セーフ

この種類のパブリックな静的 (Visual Basic では Shared) メンバーはスレッド セーフです。インスタンス メンバーがスレッド セーフであることは保証されません。

プラットフォーム

開発プラットフォーム

Windows Vista、Windows Server 2003、および

対象プラットフォーム

Windows Vista、Windows XP

Change History

関連項目

参照

RetrieveMetadataChangesResponse のメンバー
Microsoft.Xrm.Sdk.Messages 名前空間
RetrieveMetadataChangesRequest クラス

他のリソース

Query and Capture Changes to Metadata
Sample: Query Metadata and Detect Changes

Send comments about this topic to Microsoft.
© 2014 Microsoft Corporation. All rights reserved.