Получение значений полей MS CRM через переменную - PullRequest
1 голос
/ 27 ноября 2009

У меня вопрос по поводу веб-службы Dynamics CRM 4.0.Я использовал его для получения записей из CRM в ASP.NET.После запроса и приведения к значениям столбцов (например, для контакта) можно получить доступ через:

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

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

У меня есть массив строк, которые определяют, какие столбцы следует извлечь из CRM (colnames), например, в этом случае {"firstname", "lastname"}.

Но colnames может стать довольно большим (и может не быть жестко закодированным), поэтому я не хочу проходить их один за другим.Есть ли способ использовать что-то вроде

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

Если я делаю это сейчас, я получаю ошибку, что colnames не является полем tmp.Есть идеи?

1 Ответ

1 голос
/ 30 ноября 2009

Не используется BusinessEntity (если вы не используете отражение). DynamicEntity перечислим по типам, производным от Property. Вам придется сделать что-то вроде (я сделал это по памяти, так что может не скомпилировать) ...

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

  }
}

Ответ на примечание 1 (длина):

Не могли бы вы привести пример того, что вы используете. Если вы смотрите только на базовые типы (Property), вы не сможете увидеть свойство value - вам нужно преобразовать его в соответствующий тип (StringProperty и т. Д.).

В моем примере tmp - это DynamicEntity (он определяет GetEnumerator, который возвращает массив Property). Другой способ получить доступ к свойствам DynamicEntity - использовать индексатор строк. Для tmp:

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

Обратите внимание, что если вы используете этот метод, вы получите значения (string, CrmNumber, Lookup), а не все свойство (StringProperty, CrmNumberProperty и т. Д.).

Это отвечает на ваш вопрос? Кроме того, я рекомендую использовать сборки SDK, а не веб-ссылки. Они намного проще в использовании. Тем не менее, загрузка SDK содержит список вспомогательных классов, если вы решите использовать веб-ссылки. Поиск "Помощник" в SDK.

...