Manglende mappings mellem entities...og løsningen!

Mappings mellem to entities har til formål, at transportere date mellen de pågældende entities via de felter der indgår i mappingen. Men hvad hvis nu man "kommer til" at slette et af felterne? Ja så har man problemer...men det er der løsninger for.

Forhistorien

Følgende tager udgangspunkt i en kundecase, hvor der opstår en fejl, som jeg ofte har stødt på, men i dette tilfælde en grim en af slagsen...men det kigger vi nærmere på efterfølgende.

Kunden skal have opgraderet deres MS CRM fra version 3.0 til 4.0. Efter opgraderingen opstår der bl.a. følgende fejl når man forsøger at konvertere et Kundeemne (Lead) til et Firma (Account).

I dette scenarie vil man ofte samtidig opleve fejl ved Avanceret søgning (Advanced Find), hvis man forsøger at indsætte en kolonne/felt i søgningen omkring Firma (Account).

Ja...MS CRM er ikke særlig informativ med hensyn til fejl, men man får dog at vide, at der er et problem med en attribut.

 

Fejlsøgningen

Lad os kigge på hvilke fejlsøgningsmuligheder vi har. Disse er:

  1. Eventloggen (Event Viewer)
  2. ASP.NET fejlkode

Eventloggen (Event Viewer)

Eventloggen kan fortælle os, at der er et eller andet at bemærke omkring Lead, men det ved vi jo godt allerede da problemet jo opstod da jeg ville konvertere et Kundeemne (Lead) til Firma (Account):

 

ASP.NET fejlkode

Lad os kigge på de muligheder som ASP.NET tilbyder omkring fejlsøgning. Lad os starte med at slå fejlsøgningen til. Dette gøres i Internet Information Server (IIS'en).

  1. Åbn IIS'en og klik med den højre musknap på webstedet Microsoft Dynamics CRM og vælg Properties.
     
  2. I fanen ASP.NET klikkes på knappen Edit Configuration....
     
  3. I dialogboksen ASP.NET Configuration Settings markeres elementet DevErrors i den nederste liste, efterfulgt af et klik på knappen Edit....
     
  4. I dialogboksen Edit/Add Application Settings indtastes værdien On i feltet Value, efterfulgt af et klik på knappen OK.
     

     
     
  5. Klik atter på knappen OK. Og klik endnu engang på knappen OK.
    Så er vi klar til at fejlsøge igen...
     
  6. Prøv atter at konvertere Kundeemne (Lead) til Firma (Account). Denne gang fremkommer en mere informativ fejlbesked:
     


    Ud af ovenstående kan man læse, at:

    - Account mangler en attribut med navnet CFScvr.
    - Problemet handler om mappings (at Microsoft.Crm.Metadata.EntityMetadata.GetAttribute(String attributeName, NameMappingType mapping).
     

Konklusion på analysen

I dette scenarie kan vi konkludere at der mangler et felt (CFScvr) i entitien Firma (Account). feltet har eksisteret på et tidspunkt, ellers var det jo ikke muligt at lave en mapping, og er efterfølgende blevet slettet, og efterladt en mapping, som "peger" på et felt som ikke eksisterer.

Bemærk, at feltnavnet er CFScvr. Dette er ikke et originalt MS CRM-felt, men et brugerdefineret felt.
Bemærk også, at feltet ikke har et præfix, såsom new_, hvilket indikerer, at feltet er blevet oprettet i en tidligere version end 3.0, f.eks. version 1.2.

 

Løsningen

Normalt er løsningen på ovenstående problem ganske let at håndtere, nemlig ved at oprette det manglende felt. I dette tilfælde opretter man bare feltet CFScvr i entitien Firma (Account), og problemet er derved løst.

I dette tilfælde er det dog ikke så ligetil, da man jo kun kan oprette felter med et præfix i version 3.0 og 4.0. Jeg vælger derfor at tage mere drastiske skridt i brug for at komme problemet til livs...nemlig ved at slette mapping'en direkte i databasen.

BEMÆRK! Efterfølgende løsning er udokumenteret og ikke anerkendt af Microsoft. Hvis du benytter følgende løsning er det på eget ansvar. Du skal tage backup før du forsøger løsningen, og gør det så i et testmiljø ikke driftsmiljøet.

Efterfølgende vil jeg løse problemet ved at slette mapping'en CFScvr fra tabellen AttributeMapBase.

  1. Åbn SQL Server Management Studio.
     
  2. I databasen <organisation>_MSCRM oprettes en nyt view. Undlad at udpege tabeller til view'et.
     
  3. Anvend evt. følgende SQL-sætning, hvor der søges efter feltet CFScvr:

    SELECT     SourceAttributeName
    FROM         dbo.AttributeMapBase
    WHERE     (SourceAttributeName = N'CFScvr')


    Så det ses henvender vi os til tabellen AttributeMapBase. Denne tabel indeholder alle mappings i MS CRM.
     
     
  4. Slet den pågældende post og luk SQL Server Management Studio.
     
  5. Prøv nu atter at konvertere Kundeemne (Lead) til Firma (Account). Denne gang skulle det gerne lykkedes. Problemet er hermed løst Laughing
     

Oprydning...

Husk at slå DevErrors fra igen ved at sætte denne til Off i IIS'en.

Om Henrik Jensen

Jeg har altid fingeren på pulsen når det drejer sig om Microsofts produkter & teknologier, og især når det handler om Microsoft Dynamics CRM.

Henrik Jensen

Jeg har arbejdet professionelt i IT-branchen mere end 16 års, deraf 12 år med CRM-systemer, og samtidig indehaver af mere end 30 Microsoft-certificeringer.

Jeg er ansat som Microsoft Dynamics CRM-arkitekt hos Logica.

Læs mere...

Downloads, værktøjer og installation

Downloade komponenter til MS CRM:
    • Microsoft Dynamics CRM 4.0
    • Microsoft Dynamics CRM 2011

Liste over Opdateringspakker (Rollups):
    • Microsoft Dynamics CRM 4.0
    • Microsoft Dynamics CRM 2011

Værktøjer til MS CRM 2011:
    • Liste med værktøjer til MS CRM 2011

Krav vedrørende installation:
    • Installation: Krav og opsætninger

Månedsliste

Forbehold

Alt hvad du læser på denne blog er alene udtryk for mine egne holdninger og meninger, og kan ikke henføres til andet end som så.

De løsninger jeg fremstiller på denne blog er ikke nødvendigvis testet i et driftsmiljø. Hvis du gør brug af mine løsninger er det på eget ansvar.