Получение значений полей MS CRM через переменную
-
05-07-2019 - |
Вопрос
У меня есть вопрос по поводу веб-службы 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 не является полем tmp
Есть идеи? colnames
), например, в этом случае {" firstname " ;, " lastname "} код>. Р>
colnames
могут стать довольно большими (и могут не быть жестко закодированными), поэтому я не хочу просматривать их один за другим. Есть ли способ использовать что-то вроде for(int i = 0; i < colnames.length; i++)
{
Response.write(colnames[i] + ": " + tmp.colnames[i] + "<BR>");
}
Решение
Не используется 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.