AXForum  
Вернуться   AXForum > Microsoft Dynamics CRM > Dynamics CRM: Разработка
CRM
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 29.10.2009, 18:42   #1  
Camena is offline
Camena
Участник
 
111 / 10 (1) +
Регистрация: 23.03.2009
Адрес: Москва
Значение поля по атрибуту
Добрый день!

Есть веб-сервис, в котором по заданным именам аттрибутов и GUID сущности нужно получить соответствующие значения полей. Как это можно сделать?
То есть, есть определенная карточка, есть названия атрибутов - нужно программно получить данные из полей, которые соответствуют этим самым атрибутам.

Спасибо.
Старый 29.10.2009, 23:00   #2  
Павел Гончаров is offline
Павел Гончаров
Участник
 
6 / 18 (1) ++
Регистрация: 29.10.2009
Адрес: Москва
Доброго времени суток!

Если нужно получить значение поля из связанной записи с помощью JScript, то поможет функция:

/* Получение атрибута * /
/* getAttributeValueFromID(objecttypename,guid,fieldname)); */
/* objecttypename - имя сущности, guid - идентификатор, fieldname - имя поля */

getAttributeValueFromID = function(sEntityName, GUID, sAttributeName)
{
var xml =
[
"<?xml version='1.0' encoding='utf-8'?>",
"<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" ",
"xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" ",
"xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">",
GenerateAuthenticationHeader(),
"<soap:Body>",
"<Retrieve xmlns='http://schemas.microsoft.com/crm/2007/WebServices'>",
"<entityName>",
sEntityName,
"</entityName>",
"<id>",
GUID,
"</id>",
"<columnSet xmlns:q1='http://schemas.microsoft.com/crm/2006/Query' xsi:type='q1:ColumnSet'>",
"<q1:Attributes>",
"<q1:Attribute>",
sAttributeName,
"</q1:Attribute>",
"</q1:Attributes>",
"</columnSet>",
"</Retrieve>",
"</soap:Body>",
"</soap:Envelope>"
].join("");
var resultXml = executeSoapRequest("Retrieve",xml)
var errorCount = resultXml.selectNodes('//error').length;
var resultnode = resultXml.selectSingleNode("//q1:" + sAttributeName)
var result=null;
if (resultnode!=null) result = resultnode.nodeTypedValue;

if (errorCount != 0)
{
var msg = resultXml.selectSingleNode('//description').nodeTypedValue;
result = " ";
alert(msg);
}
else
{
return result;
}
}
Старый 30.10.2009, 09:29   #3  
Артем Enot Грунин is offline
Артем Enot Грунин
Moderator
Аватар для Артем Enot Грунин
MCBMSS
Злыдни
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,912 / 623 (28) +++++++
Регистрация: 16.08.2007
Адрес: Пермь!
Записей в блоге: 151
Опишите подробнее задачу. На первый взгляд она кажется надуманной: эти данные можно вычитать из веб сервиса CRM, так что незачем заводить дополнительный. Если дополнительный все же нужен, то рекомендую воспользоваться методом Retrive у СrmService
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.

MS Certified Dirty Magic Professional
Старый 30.10.2009, 10:08   #4  
Camena is offline
Camena
Участник
 
111 / 10 (1) +
Регистрация: 23.03.2009
Адрес: Москва
Цитата:
Сообщение от Артем Enot Грунин Посмотреть сообщение
Опишите подробнее задачу. На первый взгляд она кажется надуманной: эти данные можно вычитать из веб сервиса CRM, так что незачем заводить дополнительный. Если дополнительный все же нужен, то рекомендую воспользоваться методом Retrive у СrmService
Действительно, задача сложнее, чем кажется на первый взгляд. Хотя возможно и легче
Попробую объяснить:
Допустим, есть некий веб-сервис

[WebMethod]
public void GetDataByAttribute (string AttributeName, Guid ObjectId) { ... }

В качестве входных параметров в него передаются:
1. название атрибута (например, "customerid") - стринговая переменная;
2. GUID сущности (например, "Возможная сделка" opportunity, у которой соответственно есть атрибут customerid) - Guid переменная.
Соответственно нужно каким-то способом получить значение поля customerid (то есть название контакта) у сущности с этим GUID. Но штука в том, что полученный атрибут сущности может быть любой, и не понятно, как его потом привести к виду opportunity.customerid, ведь "customerid" - это текстовый параметр (!).
Надеюсь, сейчас описано понятнее
Старый 30.10.2009, 17:15   #5  
Camena is offline
Camena
Участник
 
111 / 10 (1) +
Регистрация: 23.03.2009
Адрес: Москва
Неужели никто не сталкиваося с подобной задачей?!
Старый 30.10.2009, 17:19   #6  
a33ik is offline
a33ik
Чайный пьяница
Аватар для a33ik
MCP
MCBMSS
Злыдни
Соотечественники
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,243 / 896 (36) +++++++
Регистрация: 02.07.2008
Адрес: Greenville, SC
Цитата:
Сообщение от Camena Посмотреть сообщение
Неужели никто не сталкиваося с подобной задачей?!
Я в разработке под Microsoft Dynamics CRM уже полтора года и, надеюсь, моя квалификация не вызывает у Вас сомнения.

Я не смог понять зачем Вам это необходимо. Можете сценарий привести?
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit
Старый 30.10.2009, 17:32   #7  
Camena is offline
Camena
Участник
 
111 / 10 (1) +
Регистрация: 23.03.2009
Адрес: Москва
Цитата:
Сообщение от a33ik Посмотреть сообщение
Я в разработке под Microsoft Dynamics CRM уже полтора года и, надеюсь, моя квалификация не вызывает у Вас сомнения.

Я не смог понять зачем Вам это необходимо. Можете сценарий привести?
В Вашей квалификации я ни в коем случае не сомневаюсь, тем более, что мой опыт разработки ограничивается немного меньшим сроком.

Сценарий таков:
В системе необходимо реализовать гибкий механизм, который позволит пользователям выбирать необходимые поля (атрибуты) из сущностей, значения которых потом используются, например, в составлении неких документов.

Возможно, это можно как-то по другому реализовать, но пока что вижу только такой вариант.
Старый 30.10.2009, 17:36   #8  
a33ik is offline
a33ik
Чайный пьяница
Аватар для a33ik
MCP
MCBMSS
Злыдни
Соотечественники
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,243 / 896 (36) +++++++
Регистрация: 02.07.2008
Адрес: Greenville, SC
Цитата:
Сообщение от Camena Посмотреть сообщение
В Вашей квалификации я ни в коем случае не сомневаюсь, тем более, что мой опыт разработки ограничивается немного меньшим сроком.
Это не к тому, что я хотел попонтоваться (хотя не скрою я это люблю делать), а к тому, что я так и не смог понять к чему этот велосипед...

Цитата:
Сообщение от Camena Посмотреть сообщение
Сценарий таков:
В системе необходимо реализовать гибкий механизм, который позволит пользователям выбирать необходимые поля (атрибуты) из сущностей, значения которых потом используются, например, в составлении неких документов.

Возможно, это можно как-то по другому реализовать, но пока что вижу только такой вариант.
А чем классический Retrieve не угодил то?
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit
Старый 30.10.2009, 17:43   #9  
Camena is offline
Camena
Участник
 
111 / 10 (1) +
Регистрация: 23.03.2009
Адрес: Москва
Цитата:
Сообщение от a33ik Посмотреть сообщение
Это не к тому, что я хотел попонтоваться (хотя не скрою я это люблю делать), а к тому, что я так и не смог понять к чему этот велосипед...

А чем классический Retrieve не угодил то?
Возможно и вправду велосипед, такие подозрения есть...

Мне желательно решение на С#.
Например, если я буду использовать такую конструкцию:

FetchXmlToQueryExpressionRequest fetch = new FetchXmlToQueryExpressionRequest();
fetch.FetchXml = "<fetch version=\"1.0\" output-format=\"xml-platform\" mapping=\"logical\" distinct=\"true\"> ...... </fetch>";
FetchXmlToQueryExpressionResponse qe = (FetchXmlToQueryExpressionResponse)service.Execute(fetch);

Я смогу потом из переменной qe вытащить ответный пакет?

Последний раз редактировалось Camena; 30.10.2009 в 17:50.
Старый 30.10.2009, 17:57   #10  
a33ik is offline
a33ik
Чайный пьяница
Аватар для a33ik
MCP
MCBMSS
Злыдни
Соотечественники
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,243 / 896 (36) +++++++
Регистрация: 02.07.2008
Адрес: Greenville, SC
Цитата:
Сообщение от Camena Посмотреть сообщение
Возможно и вправду велосипед, такие подозрения есть...

Мне желательно решение на С#.
Например, если я буду использовать такую конструкцию:

FetchXmlToQueryExpressionRequest fetch = new FetchXmlToQueryExpressionRequest();
fetch.FetchXml = "<fetch version=\"1.0\" output-format=\"xml-platform\" mapping=\"logical\" distinct=\"true\"> ...... </fetch>";
FetchXmlToQueryExpressionResponse qe = (FetchXmlToQueryExpressionResponse)service.Execute(fetch);

Я смогу потом из переменной qe вытащить ответный пакет?
Сначала Вы говорите про получение аттрибутов (с начала темы), а теперь про преобразования фетча в QueryExpression... Я совсем запутался, и, боюсь, не понимаю, что Вы имеете ввиду. Кто то ещё из коллег понял?
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit
Старый 30.10.2009, 18:05   #11  
Camena is offline
Camena
Участник
 
111 / 10 (1) +
Регистрация: 23.03.2009
Адрес: Москва
Цитата:
Сообщение от a33ik Посмотреть сообщение
Сначала Вы говорите про получение аттрибутов (с начала темы), а теперь про преобразования фетча в QueryExpression... Я совсем запутался, и, боюсь, не понимаю, что Вы имеете ввиду. Кто то ещё из коллег понял?
На JavaScript действительно задачу можно решить, обработав ответный пакет после выполнения Retrieve (о чем Вы писали ранее). Я хочу найти подобное решение на C#.
Старый 30.10.2009, 18:13   #12  
a33ik is offline
a33ik
Чайный пьяница
Аватар для a33ik
MCP
MCBMSS
Злыдни
Соотечественники
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,243 / 896 (36) +++++++
Регистрация: 02.07.2008
Адрес: Greenville, SC
Цитата:
Сообщение от Camena Посмотреть сообщение
На JavaScript действительно задачу можно решить, обработав ответный пакет после выполнения Retrieve (о чем Вы писали ранее). Я хочу найти подобное решение на C#.
Так используйте классический Retrieve, если работаете со стандартными сущностями и стандартными аттрибутами или RetreiveRequest, если работаете с кастомными сущностями или аттрибутами.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit
Старый 30.10.2009, 18:19   #13  
Camena is offline
Camena
Участник
 
111 / 10 (1) +
Регистрация: 23.03.2009
Адрес: Москва
Цитата:
Сообщение от a33ik Посмотреть сообщение
Так используйте классический Retrieve, если работаете со стандартными сущностями и стандартными аттрибутами или RetreiveRequest, если работаете с кастомными сущностями или аттрибутами.
А можно хотя бы небольшой примерчик, потому что теперь я не допонимаю, как здесь мне поможет обычный Retrieve,

new_form form = (new_contract) service.Retrieve(EntityName.new_form.ToString(),
new Guid(Id), new AllColumns());

точнее, как мне потом из form вытащить значение атрибута, который представлен в виде текстовой переменной

string attr = "new_field";
Старый 30.10.2009, 18:27   #14  
a33ik is offline
a33ik
Чайный пьяница
Аватар для a33ik
MCP
MCBMSS
Злыдни
Соотечественники
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,243 / 896 (36) +++++++
Регистрация: 02.07.2008
Адрес: Greenville, SC
Цитата:
Сообщение от Camena Посмотреть сообщение
А можно хотя бы небольшой примерчик, потому что теперь я не допонимаю, как здесь мне поможет обычный Retrieve,

new_form form = (new_contract) service.Retrieve(EntityName.new_form.ToString(),
new Guid(Id), new AllColumns());

точнее, как мне потом из form вытащить значение атрибута, который представлен в виде текстовой переменной

string attr = "new_field";
Префикс new_ мне говорит, что это кастомный аттрибут, потому Retrieve отпадает как таковой. Необходимо использовать RetrieveRequest. А по поводу примеров, так в гугле их немеряно. Например:
http://mscrmsupport.wordpress.com/20...stom-workflow/
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit
Старый 30.10.2009, 18:31   #15  
Camena is offline
Camena
Участник
 
111 / 10 (1) +
Регистрация: 23.03.2009
Адрес: Москва
Цитата:
Сообщение от a33ik Посмотреть сообщение
Префикс new_ мне говорит, что это кастомный аттрибут, потому Retrieve отпадает как таковой. Необходимо использовать RetrieveRequest. А по поводу примеров, так в гугле их немеряно. Например:
http://mscrmsupport.wordpress.com/20...stom-workflow/
Большое спасибо, a33ik! теперь мне наконец-то понятно
Старый 31.10.2009, 10:48   #16  
Артем Enot Грунин is offline
Артем Enot Грунин
Moderator
Аватар для Артем Enot Грунин
MCBMSS
Злыдни
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,912 / 623 (28) +++++++
Регистрация: 16.08.2007
Адрес: Пермь!
Записей в блоге: 151
А я вот так и не понял нафига все это было нужно. "Для составления неких документов" или все же есть реальная задача?
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.

MS Certified Dirty Magic Professional
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как получить значение поля одной сущности при обработке формы другой сущности zhenek Dynamics CRM: Разработка 25 05.07.2011 16:19
Как получить значение поля? Elka Dynamics CRM: Разработка 4 26.06.2009 13:52
Как взять текстовое значение из поля LookUp tatra Dynamics CRM: Разработка 2 21.11.2007 08:20
Изменение значение поля из скрипта ... zhenek Dynamics CRM: Разработка 2 15.10.2007 18:33
Не отображается значение поля в представлении SLK Dynamics CRM: Разработка 7 25.09.2007 11:44

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 19:00.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.