2009-11-27 2 views
1

J'ai une question concernant le service Web Dynamics CRM 4.0. Je l'ai utilisé pour obtenir des enregistrements de CRM dans ASP.NET. Après la requête et le casting, les valeurs des colonnes (par exemple pour un contact) sont accessibles via;Récupération des valeurs des champs MS CRM via la variable

BusinessEntity be = getBusinessEntity(service, crmGuid, type, colnames); 
contact tmp = (contact)be; 

Response.Write("firstname: " + tmp.firstname + "<BR>"); 
Response.Write("lastname: " + tmp.lastname+ "<BR>"); 

J'ai un tableau de chaînes qui identifient les colonnes doivent être récupérées à partir CRM (colnames), par exemple dans ce cas {"firstname", "lastname"}.

Mais colnames peut devenir assez gros (et ne peut pas être codé en dur), donc je ne veux pas les parcourir un par un. Est-il possible d'utiliser quelque chose comme

for(int i = 0; i < colnames.length; i++) 
{ 
    Response.write(colnames[i] + ": " + tmp.colnames[i] + "<BR>"); 
} 

Si je le fais maintenant, je reçois une erreur qui COLNAMES est pas un champ de tmp. Des idées?

Répondre

1

Ne pas utiliser BusinessEntity (sauf si vous utilisez la réflexion). DynamicEntity est énumérable par les types dérivés de Property. Vous aurez à faire quelque chose comme (je l'ai fait de la mémoire, donc peut-être pas compiler) ...

for(int i = 0; i < colnames.length; i++) 
{ 
    string colName = colnames[i]; 
    foreach(Property prop in tmp) 
    { 
    if (prop.name != colName) 
     continue; 
    if (prop is StringProperty) 
    { 
     var strProp = prop as StringProperty; 
     Response.Write(String.Format("{0}: {1}<BR />", colName, strProp.Value)); 
    } 
    else if (prop is LookupProperty) 
    { 
     ... 
    } 
    ... for each type deriving from Property 

    } 
} 

Répondre à la note 1 (longueur):

Pourriez-vous me donner un exemple de ce que tu utilises Si vous regardez uniquement les types de base (Property), vous ne pourrez pas voir la propriété value - vous devrez convertir le type approprié (StringProperty, etc).

Dans mon exemple, tmp est un DynamicEntity (il définit GetEnumerator qui retourne un tableau de propriétés). L'autre façon d'accéder aux propriétés d'un DynamicEntity est d'utiliser l'indexeur de chaîne. Pour tmp:

string firstname = (string)tmp["firstname"]; 

Notez que si vous utilisez cette méthode, vous obtenez les valeurs (chaîne, CrmNumber, Recherche) et non la propriété entière (StringProperty, CrmNumberProperty, etc.).

Est-ce que cela répond à votre question? En outre, je recommande d'utiliser les assemblys SDK et non les références Web. Ils sont beaucoup plus faciles à utiliser. Le téléchargement SDK a une liste de classes auxiliaires si vous choisissez d'utiliser les références Web, cependant. Recherchez "Helper" dans le SDK.

+0

D'accord, c'est une bonne option. J'ai essayé d'utiliser DynamicEntity, mais cela m'a pris trop de temps pour comprendre comment obtenir la valeur réelle des propriétés en utilisant DynamicEntities. Avez-vous des suggestions? Je pourrais obtenir le nom et le type, mais pas la valeur ... –

+0

Mon commentaire était trop long, voir le corps. –

+0

Je vais regarder demain, merci d'avance! –

Questions connexes