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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 23.03.2009, 10:40   #1  
Казарин Александр is offline
Казарин Александр
Участник
 
58 / 10 (1) +
Регистрация: 17.10.2008
Адрес: Сыктывкар
RetrieveMultiple и сущности НЕдефаултной организации
Столкнулся с проблемой. Есть известный запрос к сущности.
Цитата:
CrmSdk.QueryByAttribute query = new CrmSdk.QueryByAttribute();
CrmSdk.
ColumnSet cols = new CrmSdk.ColumnSet();
cols.Attributes =
newstring[] { "new_number" };
query.ColumnSet = cols;
query.EntityName =
"new_numerator";
query.Attributes =
newstring[] { "new_name" };
query.Values =
newstring[] { "Настройки нумератора" };
CrmSdk.
BusinessEntityCollection numcol = service.RetrieveMultiple(query);
string subcustomerId = ((CrmSdk.new_numerator)numcol.BusinessEntities[0]).new_number.ToString();


И этот код бы работал, если бы не одно НО. Все это реализуется для организации не по умолчанию, т.е. попытка взять ((CrmSdk.new_numerator)numcol.BusinessEntities[0]).new_number.ToString();
выдает ошибку что такой сущности(new_numerator) в CrmSdk(веб-сервис) нет.

Незнаю что делать..
Старый 23.03.2009, 10:48   #2  
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
Lightbulb
Цитата:
Сообщение от Казарин Александр Посмотреть сообщение
Столкнулся с проблемой. Есть известный запрос к сущности.
[/SIZE]

И этот код бы работал, если бы не одно НО. Все это реализуется для организации не по умолчанию, т.е. попытка взять ((CrmSdk.new_numerator)numcol.BusinessEntities[0]).new_number.ToString();
выдает ошибку что такой сущности(new_numerator) в CrmSdk(веб-сервис) нет.

Незнаю что делать..
Работайте через DynamicEntity - и будет вам счастье, т.е. получать данные от сущности, как:

Код:
string subcustomerId = ((CrmNumber)((DynamicEntity)numcol.BusinessEntities[0])["new_number"]).Value.ToString();
Как я понял это new_number - CrmNumber. Если нет - приведёте к нужному типу и вуаля.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit

Последний раз редактировалось a33ik; 23.03.2009 в 10:51.
Старый 23.03.2009, 14:29   #3  
Казарин Александр is offline
Казарин Александр
Участник
 
58 / 10 (1) +
Регистрация: 17.10.2008
Адрес: Сыктывкар
Гневается с ошибкой
Цитата:
Error 1 Cannot apply indexing with [] to an expression of type
на
Цитата:
((CrmSdk.CrmNumber)((CrmSdk.DynamicEntity)numcol.BusinessEntities[0])["new_number"]).Value.ToString();
Старый 23.03.2009, 14:34   #4  
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
Lightbulb
Попробуйте так:

Код:
((CrmNumber)((DynamicEntity)numcol.BusinessEntities[0]).Properties["new_number"]).Value.ToString();
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit
Старый 23.03.2009, 14:56   #5  
Казарин Александр is offline
Казарин Александр
Участник
 
58 / 10 (1) +
Регистрация: 17.10.2008
Адрес: Сыктывкар
Так ему совсем не нравится..

Цитата:
Error 1 Cannot implicitly convert type 'string' to 'int'
Цитата:
Error 2 Cannot convert type 'WorkingWithSharepoint.CrmSdk.Property' to 'WorkingWithSharepoint.CrmSdk.CrmNumber'
Старый 23.03.2009, 15:08   #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
:)
Цитата:
Сообщение от Казарин Александр Посмотреть сообщение
Так ему совсем не нравится..
Если не секрет - скиньте на почту Солюшен - откорректирую, чтобы работало Так долго можно играться azz@snt.ua

UPD я так понял вы пользуетесь Веб Референсом на сервис MS CRM. У него свои приколы - нет у пропертей индексации по имени, а только по номеру...
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit

Последний раз редактировалось a33ik; 23.03.2009 в 15:13.
За это сообщение автора поблагодарили: Казарин Александр (1).
Старый 23.03.2009, 16:09   #7  
Гуревич Денис is offline
Гуревич Денис
Участник
Лучший по профессии 2009
 
228 / 67 (3) ++++
Регистрация: 04.08.2008
Адрес: Москва
Цитата:
Сообщение от Казарин Александр Посмотреть сообщение

И этот код бы работал, если бы не одно НО. Все это реализуется для организации не по умолчанию, т.е. попытка взять ((CrmSdk.new_numerator)numcol.BusinessEntities[0]).new_number.ToString();
выдает ошибку что такой сущности(new_numerator) в CrmSdk(веб-сервис) нет.

Незнаю что делать..
Если организация не по умолчанию, то и веб-референс должен иметь URL вида:
http://[servername]/[orgname]/mscrmservices/2007/crmservice.asmx
Тогда VS будет знать, что такое new_numerator.

А вообще, a33ik прав - по-хорошему надо DynamicEntity пользовать.
Старый 18.05.2009, 12:21   #8  
Vuhasty is offline
Vuhasty
Участник
 
10 / 10 (1) +
Регистрация: 15.05.2009
?
Похожая проблема, в плагине надо вытянуть из ЦРМа одну из мною созданих сущностей, использую следующий код:
Код:
        // Create the ConditionExpression.
        ConditionExpression lCondition = new ConditionExpression();

        lCondition.AttributeName = "new_numberbankid";
        lCondition.Operator = ConditionOperator.Equal;
        lCondition.Values = new string[] { "здесь мой гуид" };

        FilterExpression lFilter = new FilterExpression();
        lFilter.FilterOperator = LogicalOperator.And;
        lFilter.AddCondition(lCondition);

        QueryExpression lQuery = new QueryExpression();
        lQuery.ColumnSet = new AllColumns();
        lQuery.EntityName = "new_numberbank"; //тип сутности которую надо получить.
        lQuery.Criteria = lFilter;

        DynamicEntity lTempEntity = (DynamicEntity)crmService.RetrieveMultiple (lQuery).BusinessEntities[0];
и получаю следующую ошибку ...
X++:
[InvalidOperationException: The specified type was not recognized: name='new_numberbank', namespace='http://schemas.microsoft.com/crm/2007/WebServices', at <BusinessEntity xmlns='http://schemas.microsoft.com/crm/2006/WebServices'>.]
Создавать еще одно соединение к ЦРМ с помощью методов Веб-Референса не очень хочется, чтобы было поменьше путаницы с класами.
Заранее спасибо.
Старый 18.05.2009, 12:32   #9  
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
Цитата:
Сообщение от Vuhasty Посмотреть сообщение
Похожая проблема, в плагине надо вытянуть из ЦРМа одну из мною созданих сущностей, использую следующий код:
Код:
        // Create the ConditionExpression.
        ConditionExpression lCondition = new ConditionExpression();

        lCondition.AttributeName = "new_numberbankid";
        lCondition.Operator = ConditionOperator.Equal;
        lCondition.Values = new string[] { "здесь мой гуид" };

        FilterExpression lFilter = new FilterExpression();
        lFilter.FilterOperator = LogicalOperator.And;
        lFilter.AddCondition(lCondition);

        QueryExpression lQuery = new QueryExpression();
        lQuery.ColumnSet = new AllColumns();
        lQuery.EntityName = "new_numberbank"; //тип сутности которую надо получить.
        lQuery.Criteria = lFilter;

        DynamicEntity lTempEntity = (DynamicEntity)crmService.RetrieveMultiple (lQuery).BusinessEntities[0];
и получаю следующую ошибку ...
X++:
[InvalidOperationException: The specified type was not recognized: name='new_numberbank', namespace='http://schemas.microsoft.com/crm/2007/WebServices', at <BusinessEntity xmlns='http://schemas.microsoft.com/crm/2006/WebServices'>.]
Создавать еще одно соединение к ЦРМ с помощью методов Веб-Референса не очень хочется, чтобы было поменьше путаницы с класами.
Заранее спасибо.
Сходу скажу, что для получения одного экземпляра лучше использовать Retrieve а не RetrieveMultiple.

По поводу исключения - убедитесь в следующем:
- схема сущности указана корректно (new_numberbank);
- сервис подключается к корректной организации (в случае Multy Tenancy)
- сущность опубликована
- пользователь в контексте которого выполняется плагин имеет права на зачитку сущности (это вряд ли, но всё же)
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit
Старый 18.05.2009, 12:46   #10  
Vuhasty is offline
Vuhasty
Участник
 
10 / 10 (1) +
Регистрация: 15.05.2009
Цитата:
Сообщение от a33ik Посмотреть сообщение
Сходу скажу, что для получения одного экземпляра лучше использовать Retrieve а не RetrieveMultiple.
А как использовать Retrieve с создаными сущностями ?
Ведь этот метод не возвращает DynamicEntity а объект соответсвуещего типа ...
ПС: Использую библиотеки с СДК, не ВебРеференс.

ППС: Спасибо за оперативность
Старый 18.05.2009, 12:52   #11  
Артем 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
Класс RetrieveRequest, который вы будете использовать в методе Retrieve имеет опцию ReturnDynamicEntities.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.

MS Certified Dirty Magic Professional
Старый 18.05.2009, 12:57   #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
Цитата:
Сообщение от Vuhasty Посмотреть сообщение
А как использовать Retrieve с создаными сущностями ?
Попробуте так:
DynamicEntity yourEntity = (DynamicEntity)crmService.Retrieve("new_numberbank",...);

Цитата:
Сообщение от Vuhasty Посмотреть сообщение
Ведь этот метод не возвращает DynamicEntity а объект соответсвуещего типа ...
И стандартные и динамик сущности - это потомки BusinessEntity, а именно объект этого типа возвращается.

Цитата:
Сообщение от Vuhasty Посмотреть сообщение
ПС: Использую библиотеки с СДК, не ВебРеференс.
Очень грамотно с моей точки зрения. Когда начинал разбираться, изза обёрток создаваемых веб референсом, имел немало проблем.

Если это не пройдёт, используйте Execute и RetrieveRequest c TargetRetrieveDynamic.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit
За это сообщение автора поблагодарили: Vuhasty (1).
Старый 18.05.2009, 12:59   #13  
Vuhasty is offline
Vuhasty
Участник
 
10 / 10 (1) +
Регистрация: 15.05.2009
Цитата:
Сообщение от Артем Enot Грунин Посмотреть сообщение
Класс RetrieveRequest, который вы будете использовать в методе Retrieve имеет опцию ReturnDynamicEntities.
Код:
  public interface ICrmService : IDisposable
  {
    Guid Create(BusinessEntity entity);
    void Delete(string entityName, Guid id);
    object Execute(object request);
    string Fetch(string fetchXml);
    BusinessEntity Retrieve(string entityName, Guid id, ColumnSetBase columnSet);
    BusinessEntityCollection RetrieveMultiple(QueryBase query);
    void Update(BusinessEntity entity);
  }
У меня не то СДК что-ли ? Или я не там ищу ?
Старый 18.05.2009, 13:16   #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
Цитата:
Сообщение от Vuhasty Посмотреть сообщение
Код:
  public interface ICrmService : IDisposable
  {
    Guid Create(BusinessEntity entity);
    void Delete(string entityName, Guid id);
    object Execute(object request);
    string Fetch(string fetchXml);
    BusinessEntity Retrieve(string entityName, Guid id, ColumnSetBase columnSet);
    BusinessEntityCollection RetrieveMultiple(QueryBase query);
    void Update(BusinessEntity entity);
  }
У меня не то СДК что-ли ? Или я не там ищу ?
Да тот СДК.
С точки зрения ООП - классы account, contact и т.п. как и DynamicEntity - это потомки класса BusinessEntity.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit
Старый 18.05.2009, 14:01   #15  
Vuhasty is offline
Vuhasty
Участник
 
10 / 10 (1) +
Регистрация: 15.05.2009
Цитата:
Сообщение от a33ik Посмотреть сообщение
С точки зрения ООП - классы account, contact и т.п. как и DynamicEntity - это потомки класса BusinessEntity.
BusinessEntity - пустой абстрактный клас,
класы потомки между собой не кастятся, уже пробовал.
Старый 18.05.2009, 14:33   #16  
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
Цитата:
Сообщение от Vuhasty Посмотреть сообщение
BusinessEntity - пустой абстрактный клас,
класы потомки между собой не кастятся, уже пробовал.
А зачем Вам между собой потомков кастить то? Вам надо кастить из BusinessEntity в DynamicEntity.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit
Старый 18.05.2009, 17:15   #17  
Vuhasty is offline
Vuhasty
Участник
 
10 / 10 (1) +
Регистрация: 15.05.2009
Цитата:
Сообщение от a33ik Посмотреть сообщение
А зачем Вам между собой потомков кастить то? Вам надо кастить из BusinessEntity в DynamicEntity.
Сори, я вас не так понял

Через Execute всё работает, Спасибо.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как получить значение поля одной сущности при обработке формы другой сущности zhenek Dynamics CRM: Разработка 25 05.07.2011 16:19
Присвоение одного атрибута сущности значения другого атрибута связанной сущности vital.mih Dynamics CRM: Функционал 38 08.09.2010 10:53
Как создать экземпляр кастомной сущности через SOAP? Tony Green Dynamics CRM: Разработка 7 27.02.2009 08:37
Обращение к полю сущности MFCшный Wizard Dynamics CRM: Разработка 28 12.02.2009 14:35
Изменение свойств контакта при изменении свойств организации koalex Dynamics CRM: Функционал 6 22.02.2008 09:27

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 01:40.