29.10.2009, 18:42 | #1 |
Участник
|
Значение поля по атрибуту
Добрый день!
Есть веб-сервис, в котором по заданным именам аттрибутов и GUID сущности нужно получить соответствующие значения полей. Как это можно сделать? То есть, есть определенная карточка, есть названия атрибутов - нужно программно получить данные из полей, которые соответствуют этим самым атрибутам. Спасибо. |
|
29.10.2009, 23:00 | #2 |
Участник
|
Доброго времени суток!
Если нужно получить значение поля из связанной записи с помощью 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 |
Moderator
|
Опишите подробнее задачу. На первый взгляд она кажется надуманной: эти данные можно вычитать из веб сервиса CRM, так что незачем заводить дополнительный. Если дополнительный все же нужен, то рекомендую воспользоваться методом Retrive у СrmService
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
30.10.2009, 10:08 | #4 |
Участник
|
Цитата:
Попробую объяснить: Допустим, есть некий веб-сервис [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 |
Участник
|
Неужели никто не сталкиваося с подобной задачей?!
|
|
30.10.2009, 17:19 | #6 |
Чайный пьяница
|
Я в разработке под Microsoft Dynamics CRM уже полтора года и, надеюсь, моя квалификация не вызывает у Вас сомнения.
Я не смог понять зачем Вам это необходимо. Можете сценарий привести?
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
30.10.2009, 17:32 | #7 |
Участник
|
Цитата:
Сценарий таков: В системе необходимо реализовать гибкий механизм, который позволит пользователям выбирать необходимые поля (атрибуты) из сущностей, значения которых потом используются, например, в составлении неких документов. Возможно, это можно как-то по другому реализовать, но пока что вижу только такой вариант. |
|
30.10.2009, 17:36 | #8 |
Чайный пьяница
|
Цитата:
Цитата:
Сообщение от Camena
Сценарий таков:
В системе необходимо реализовать гибкий механизм, который позволит пользователям выбирать необходимые поля (атрибуты) из сущностей, значения которых потом используются, например, в составлении неких документов. Возможно, это можно как-то по другому реализовать, но пока что вижу только такой вариант.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
30.10.2009, 17:43 | #9 |
Участник
|
Цитата:
Сообщение от 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 |
Чайный пьяница
|
Цитата:
Сообщение от 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 вытащить ответный пакет?
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
30.10.2009, 18:05 | #11 |
Участник
|
На JavaScript действительно задачу можно решить, обработав ответный пакет после выполнения Retrieve (о чем Вы писали ранее). Я хочу найти подобное решение на C#.
|
|
30.10.2009, 18:13 | #12 |
Чайный пьяница
|
Цитата:
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
30.10.2009, 18:19 | #13 |
Участник
|
Цитата:
Сообщение от a33ik
Так используйте классический Retrieve, если работаете со стандартными сущностями и стандартными аттрибутами или RetreiveRequest, если работаете с кастомными сущностями или аттрибутами.
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 |
Чайный пьяница
|
Цитата:
Сообщение от Camena
А можно хотя бы небольшой примерчик, потому что теперь я не допонимаю, как здесь мне поможет обычный Retrieve,
new_form form = (new_contract) service.Retrieve(EntityName.new_form.ToString(), new Guid(Id), new AllColumns()); точнее, как мне потом из form вытащить значение атрибута, который представлен в виде текстовой переменной string attr = "new_field"; http://mscrmsupport.wordpress.com/20...stom-workflow/
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
30.10.2009, 18:31 | #15 |
Участник
|
Цитата:
Сообщение от a33ik
Префикс new_ мне говорит, что это кастомный аттрибут, потому Retrieve отпадает как таковой. Необходимо использовать RetrieveRequest. А по поводу примеров, так в гугле их немеряно. Например:
http://mscrmsupport.wordpress.com/20...stom-workflow/ |
|
31.10.2009, 10:48 | #16 |
Moderator
|
А я вот так и не понял нафига все это было нужно. "Для составления неких документов" или все же есть реальная задача?
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|