Вопрос

У меня есть вопрос по поводу веб-службы 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 Есть идеи?

Это было полезно?

Решение

Не используется 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top