Metainformation Error - Nach Import einer Unmanaged Solution

10. Januar 2015 15:42

Hallo zusammen,

momentan habe ich bei einem Kunden in einem neuen CRM Projekt folgendes Problem:

Im Unternehmen gibt es zwei CRM Systeme: Test/Entwicklung sowie das Produktivsystem.

Leider gab es innerhalb des Projektes Anpassungen auf beiden Systemen, so dass es Unterschiede zwischen den Systemen gab. Nach dem Versuch Anpassungen aus dem Produktiv-CRM in das Test/Entwicklungs-CRM über eine unmanaged Solution zu importieren funktioniert der "Publish" Prozess nicht mehr für folgende Entitäten:

- Firma
- Kontakt

Soweit ich mitbekommen habe fanden bei diesen Entitäten Anpassungen im Datenmodell statt. Es wurden z.B. zusätzliche Felder direkt im Produktiv-System angelegt und anschließend nochmal manuell im Test/Entwicklungs-CRM um einen gleichen Stand zu erreichen (mir ist vollkommen bewusst das diese nicht der richtige Weg ist..)

Wird nun versucht eine der beiden genannten Entitäten im Entwicklungs/Test CRM zu veröffentlichen, kann man folgende Fehlermeldung in der Protokolldatei herunterladen:

Code:
Unhandled Exception: System.ServiceModel.FaultException`1[[Microsoft.Xrm.Sdk.OrganizationServiceFault, Microsoft.Xrm.Sdk, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]]: An unexpected error occurred.Detail:
<OrganizationServiceFault xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/xrm/2011/Contracts">
  <ErrorCode>-2147220970</ErrorCode>
  <ErrorDetails xmlns:d2p1="http://schemas.datacontract.org/2004/07/System.Collections.Generic">
    <KeyValuePairOfstringanyType>
      <d2p1:key>CallStack</d2p1:key>
      <d2p1:value xmlns:d4p1="http://www.w3.org/2001/XMLSchema" i:type="d4p1:string">   at Microsoft.Crm.Extensibility.VersionedPluginProxyStepBase.Execute(PipelineExecutionContext context)
   at Microsoft.Crm.Extensibility.Pipeline.Execute(PipelineExecutionContext context)
   at Microsoft.Crm.Extensibility.MessageProcessor.Execute(PipelineExecutionContext context)
   at Microsoft.Crm.Extensibility.InternalMessageDispatcher.Execute(PipelineExecutionContext context)
   at Microsoft.Crm.Extensibility.ExternalMessageDispatcher.ExecuteInternal(IInProcessOrganizationServiceFactory serviceFactory, IPlatformMessageDispatcherFactory dispatcherFactory, String messageName, String requestName, Int32 primaryObjectTypeCode, Int32 secondaryObjectTypeCode, ParameterCollection fields, CorrelationToken correlationToken, CallerOriginToken originToken, UserAuth userAuth, Guid callerId, Guid transactionContextId, Int32 invocationSource, Nullable`1 requestId, Version endpointVersion)
   at Microsoft.Crm.Extensibility.OrganizationSdkServiceInternal.ExecuteRequest(OrganizationRequest request, CorrelationToken correlationToken, CallerOriginToken callerOriginToken, WebServiceType serviceType, UserAuth userAuth, Guid targetUserId, Boolean traceRequest, OrganizationContext context, Boolean returnResponse)
   at Microsoft.Crm.Extensibility.OrganizationSdkServiceInternal.ExecuteRequest(OrganizationRequest request, CorrelationToken correlationToken, CallerOriginToken callerOriginToken, WebServiceType serviceType)
   at Microsoft.Crm.Extensibility.OrganizationSdkServiceInternal.Execute(OrganizationRequest request, CorrelationToken correlationToken, CallerOriginToken callerOriginToken, WebServiceType serviceType)</d2p1:value>
    </KeyValuePairOfstringanyType>
  </ErrorDetails>
  <Message>An unexpected error occurred.</Message>
  <Timestamp>2015-01-08T13:40:30.9815686Z</Timestamp>
  <InnerFault i:nil="true" />
  <TraceText i:nil="true" />
</OrganizationServiceFault>
 



Bei aktivitierten Trace-Log kann ich folgende Information erhalten die etwas detaillierter ist:


Code:
   Mapping failed for Microsoft.Crm.Metadata.EntityMetadata property Attributes with exception Microsoft.Crm.CrmException: Mapping failed for Microsoft.Crm.Metadata.AttributeMetadata property Description with exception System.ArgumentException: An item with the same key has already been added.
   at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
   at Microsoft.Crm.Caching.OrganizationSpecificLabelDictionaryCacheLoader.BuildLabelDictionary(MetadataBusinessEntityCollection labels)
   at Microsoft.Crm.Caching.LabelDictionaryCacheLoader.LoadCacheData(Int32 languageCode, IOrganizationContext context)
   at Microsoft.Crm.Caching.CrmMultiOrgCacheBase`2.LookupEntry(TKey key, IOrganizationContext context)
   at Microsoft.Crm.Metadata.LabelCache.TryLookupEntry(Int32 languageCode, Guid objectId, String objectColumnName, IOrganizationContext context)
   at Microsoft.Crm.Metadata.LabelCacheLabelCollection.TryGetActualLabel(Int32 languageCode, IOrganizationContext context)
   at Microsoft.Crm.Sdk.Metadata.LabelConverter.ToXrmLabel(ILabelCollection labels, MetadataConversionContext conversionContext)
   at Microsoft.Crm.MetadataService.Sdk.TypeMaps.PlatformToXrmAttributeMetadataTypeMap.<InitializeBaseTypePropertyMap>b__27(AttributeMetadata source, AttributeMetadata destination, MetadataConversionContext context)
   at Microsoft.Crm.MetadataService.Sdk.TypeMaps.StaticTypesMap`2.InternalMap(TSource source, TDestination destination, MetadataConversionContext context, IEnumerable`1 properties)
   at Microsoft.Crm.MetadataService.Sdk.TypeMaps.StaticTypesMap`2.InternalMap(TSource source, TDestination destination, MetadataConversionContext context, IEnumerable`1 properties)
   at Microsoft.Crm.MetadataService.Sdk.TypeMaps.StaticTypesMap`2.Convert(TSource source, MetadataConversionContext context)
   at Microsoft.Crm.Sdk.Metadata.AttributeMetadataConverter.ToXrmAttributeMetadata(AttributeMetadata crmAttributeMetadata, MetadataConversionContext conversionContext)
   at Microsoft.Crm.Sdk.Metadata.AttributeMetadataConverter.ToXrmAttributeMetadataArray(IAttributeMetadataCollection attributes, MetadataConversionContext conversionContext)
   at Microsoft.Crm.MetadataService.Sdk.TypeMaps.PlatformToXrmEntityMetadataTypeMap.<InitializeMap>b__15(EntityMetadata source, EntityMetadata destination, MetadataConversionContext context)
   at Microsoft.Crm.MetadataService.Sdk.TypeMaps.StaticTypesMap`2.InternalMap(TSource source, TDestination destination, MetadataConversionContext context, IEnumerable`1 properties)


Scheinbar gibt es ein Problem mit dem, nach dem Import entstandenen Metainformationen im CRM:

An item with the same key has already been added.

Nun würde mich natürlich interessieren um welchen Key es sich hier handelt um den Fehler etwas mehr einzugrenzen, im TraceLog steht hierzu leider keine detaillierte Information, ich habe es ebenfalls schon über den SQL Profiler versucht, konnte aber auch hier an keine Informationen während des nicht funktionierenden Publish Vorganges kommen.

Es lässt vermuten, das während der parallel laufenden Anpassungen Fehler entstanden sind, wie z.B. die nicht Berücksichtigung der Schemanamen beim Anlegen der zusätzlichen Felder im einen der CRMs (nicht exakte Schreibweise bei Groß und Kleinschreibung der Schemanamen) oder das Felder zwar gleich benannt wurden aber einen anderen Datentypen bekommen haben:

Folgende Links habe ich bereits zu diesem Thema ausfindig machen können, leider kann ich den Fehler nicht weiter eingrenzen, so dass ich zur Zeit nur weiß das es Metainformationsprobleme in den Entitäten "Kontakt" und "Firma" gibt.

Die Generierung der EarlyBound Classes über das crmsvcutil funktioniert ebenfalls nicht mehr und wirft folgende gleiche Fehlermeldung:

Code:
Mapping failed for Microsoft.Crm.Metadata.EntityMetadata property Attributes with exception Microsoft.Crm.CrmException: Mapping failed for Microsoft.Crm.Metadata.AttributeMetadata property Description with exception System.ArgumentException: An item with the same key has already been added.
   at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
   at Microsoft.Crm.Caching.OrganizationSpecificLabelDictionaryCacheLoader.BuildLabelDictionary(MetadataBusinessEntityCollection labels)
   at Microsoft.Crm.Caching.LabelDictionaryCacheLoader.LoadCacheData(Int32 languageCode, IOrganizationContext context)
   at Microsoft.Crm.Caching.CrmMultiOrgCacheBase`2.LookupEntry(TKey key, IOrganizationContext context)
   at Microsoft.Crm.Metadata.LabelCache.TryLookupEntry(Int32 languageCode, Guid objectId, String objectColumnName, IOrganizationContext context)
   at Microsoft.Crm.Metadata.LabelCacheLabelCollection.TryGetActualLabel(Int32 languageCode, IOrganizationContext context)
   at Microsoft.Crm.Sdk.Metadata.LabelConverter.ToXrmLabel(ILabelCollection labels, MetadataConversionContext conversionContext)
   at Microsoft.Crm.MetadataService.Sdk.TypeMaps.PlatformToXrmAttributeMetadataTypeMap.<InitializeBaseTypePropertyMap>b__27(AttributeMetadata source, AttributeMetadata destination, MetadataConversionContext context)
   at Microsoft.Crm.MetadataService.Sdk.TypeMaps.StaticTypesMap`2.InternalMap(TSource source, TDestination destination, MetadataConversionContext context, IEnumerable`1 properties)
   at Microsoft.Crm.MetadataService.Sdk.TypeMaps.StaticTypesMap`2.InternalMap(TSource source, TDestination destination, MetadataConversionContext context, IEnumerable`1 properties)
   at Microsoft.Crm.MetadataService.Sdk.TypeMaps.StaticTypesMap`2.Convert(TSource source, MetadataConversionContext context)
   at Microsoft.Crm.Sdk.Metadata.AttributeMetadataConverter.ToXrmAttributeMetadata(AttributeMetadata crmAttributeMetadata, MetadataConversionContext conversionContext)
   at Microsoft.Crm.Sdk.Metadata.AttributeMetadataConverter.ToXrmAttributeMetadataArray(IAttributeMetadataCollection attributes, MetadataConversionContext conversionContext)
   at Microsoft.Crm.MetadataService.Sdk.TypeMaps.PlatformToXrmEntityMetadataTypeMap.<InitializeMap>b__15(EntityMetadata source, EntityMetadata destination, MetadataConversionContext context)
   at Microsoft.Crm.MetadataService.Sdk.TypeMaps.StaticTypesMap`2.InternalMap(TSource source, TDestination destination, MetadataConversionContext context, IEnumerable`1 properties)



Folgende Links konnte ich bisher im Netz ausfindig machen, die mir zwar geholfen haben das Problem mehr oder wenig zu identifizieren aber nicht zur letztendlichen Fehlerbehebung beigetragen haben:

https://crmbusiness.wordpress.com/2014/11/26/confused-crm-database/

http://nishantrana.me/2014/04/15/an-item-with-the-same-key-has-already-been-added-error-while-importing-solution-in-crm-2013/

https://www.linkedin.com/groups/item-same-key-has-already-1791065.S.252647033

https://community.dynamics.com/crm/f/117/p/106778/304756.aspx

https://social.microsoft.com/Forums/en-US/eac3b06b-5cec-43f4-979e-9e40ed113042/crm-2013-import-solution-an-item-with-the-same-key-has-already-been-added-error-while-processing?forum=crmdevelopment

https://community.dynamics.com/crm/b/crmpowerobjects/archive/2013/07/01/field-is-not-unique-error-when-importing-a-solution-in-crm-2011.aspx


Vielleicht kennt jemand das Problem und weiß wie man den Fehler innerhalb der Metainformationen des CRM genauer identifizieren kann?

Zusätzlich frage ich mich, wie dieses Fehler in diesem Szenario vermeitbar gewesen wäre? Um mit der Entwicklung richtig beginnen zu können empfehle ich momentan das Produktiv-CRM komplett zu Klonen und das geklonte System anschließend als Entwicklungs-CRM zu nutzen aus welchem alle Änderungen nach Abnahme in das Produktiv-CRM über separate Solutions übertragen werden.

Re: Metainformation Error - Nach Import einer Unmanaged Solu

12. Januar 2015 14:39

Hallo,

ich hatte ein ähnliches Problem aus meiner Anfangszeit. Ich habe in der PROD Umgebung ein Feld eingefügt, dann im DEV / TEST und dann wollte ich die Solution in die PROD einspielen. Was mit einem Fehler quittiert wurde.

Du wirst die Felder im PROD wieder löschen müssen, dann die SOlution einspielen und die vorher gesicherten Daten der gelöschten Felder neu befüllen müssen.

Falls Du dafür Hilfe benötigst kannst Du mich gerne noch fragen.

Gruß

Ulrich