AXForum  
Go Back   AXForum > Microsoft Dynamics CRM > Dynamics CRM: Разработка
DAX
Forgotten Your Password?
Register Forum Rules FAQ Members List Today's Posts Search

 
 
Thread Tools Search this Thread Display Modes
Old 23.03.2009, 10:40   #1  
Казарин Александр is offline
Казарин Александр
Участник
 
58 / 10 (1) +
Join Date: 17.10.2008
Location: Сыктывкар
RetrieveMultiple и сущности НЕдефаултной организации
Столкнулся с проблемой. Есть известный запрос к сущности.
Quote:
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(веб-сервис) нет.

Незнаю что делать..
Old 23.03.2009, 10:48   #2  
a33ik is offline
a33ik
Чайный пьяница
a33ik's Avatar
MCP
MCBMSS
Злыдни
Соотечественники
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,243 / 896 (36) +++++++
Join Date: 02.07.2008
Location: Greenville, SC
Lightbulb
Quote:
Originally Posted by Казарин Александр View Post
Столкнулся с проблемой. Есть известный запрос к сущности.
[/SIZE]

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

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

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

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

Last edited by a33ik; 23.03.2009 at 10:51.
Old 23.03.2009, 14:29   #3  
Казарин Александр is offline
Казарин Александр
Участник
 
58 / 10 (1) +
Join Date: 17.10.2008
Location: Сыктывкар
Гневается с ошибкой
Quote:
Error 1 Cannot apply indexing with [] to an expression of type
на
Quote:
((CrmSdk.CrmNumber)((CrmSdk.DynamicEntity)numcol.BusinessEntities[0])["new_number"]).Value.ToString();
Old 23.03.2009, 14:34   #4  
a33ik is offline
a33ik
Чайный пьяница
a33ik's Avatar
MCP
MCBMSS
Злыдни
Соотечественники
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,243 / 896 (36) +++++++
Join Date: 02.07.2008
Location: Greenville, SC
Lightbulb
Попробуйте так:

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

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

Quote:
Error 1 Cannot implicitly convert type 'string' to 'int'
Quote:
Error 2 Cannot convert type 'WorkingWithSharepoint.CrmSdk.Property' to 'WorkingWithSharepoint.CrmSdk.CrmNumber'
Old 23.03.2009, 15:08   #6  
a33ik is offline
a33ik
Чайный пьяница
a33ik's Avatar
MCP
MCBMSS
Злыдни
Соотечественники
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,243 / 896 (36) +++++++
Join Date: 02.07.2008
Location: Greenville, SC
:)
Quote:
Originally Posted by Казарин Александр View Post
Так ему совсем не нравится..
Если не секрет - скиньте на почту Солюшен - откорректирую, чтобы работало Так долго можно играться azz@snt.ua

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

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

Last edited by a33ik; 23.03.2009 at 15:13.
This post has been rated by: Казарин Александр (1).
Old 23.03.2009, 16:09   #7  
Гуревич Денис is offline
Гуревич Денис
Участник
Лучший по профессии 2009
 
228 / 67 (3) ++++
Join Date: 04.08.2008
Location: Москва
Quote:
Originally Posted by Казарин Александр View Post

И этот код бы работал, если бы не одно НО. Все это реализуется для организации не по умолчанию, т.е. попытка взять ((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 пользовать.
Old 18.05.2009, 12:21   #8  
Vuhasty is offline
Vuhasty
Участник
 
10 / 10 (1) +
Join Date: 15.05.2009
?
Похожая проблема, в плагине надо вытянуть из ЦРМа одну из мною созданих сущностей, использую следующий код:
Code:
        // 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'>.]
Создавать еще одно соединение к ЦРМ с помощью методов Веб-Референса не очень хочется, чтобы было поменьше путаницы с класами.
Заранее спасибо.
Old 18.05.2009, 12:32   #9  
a33ik is offline
a33ik
Чайный пьяница
a33ik's Avatar
MCP
MCBMSS
Злыдни
Соотечественники
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,243 / 896 (36) +++++++
Join Date: 02.07.2008
Location: Greenville, SC
Quote:
Originally Posted by Vuhasty View Post
Похожая проблема, в плагине надо вытянуть из ЦРМа одну из мною созданих сущностей, использую следующий код:
Code:
        // 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
Old 18.05.2009, 12:46   #10  
Vuhasty is offline
Vuhasty
Участник
 
10 / 10 (1) +
Join Date: 15.05.2009
Quote:
Originally Posted by a33ik View Post
Сходу скажу, что для получения одного экземпляра лучше использовать Retrieve а не RetrieveMultiple.
А как использовать Retrieve с создаными сущностями ?
Ведь этот метод не возвращает DynamicEntity а объект соответсвуещего типа ...
ПС: Использую библиотеки с СДК, не ВебРеференс.

ППС: Спасибо за оперативность
Old 18.05.2009, 12:52   #11  
Артем Enot Грунин is offline
Артем Enot Грунин
Moderator
Артем Enot Грунин's Avatar
MCBMSS
Злыдни
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,912 / 623 (28) +++++++
Join Date: 16.08.2007
Location: Пермь!
Blog Entries: 151
Класс RetrieveRequest, который вы будете использовать в методе Retrieve имеет опцию ReturnDynamicEntities.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.

MS Certified Dirty Magic Professional
Old 18.05.2009, 12:57   #12  
a33ik is offline
a33ik
Чайный пьяница
a33ik's Avatar
MCP
MCBMSS
Злыдни
Соотечественники
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,243 / 896 (36) +++++++
Join Date: 02.07.2008
Location: Greenville, SC
Quote:
Originally Posted by Vuhasty View Post
А как использовать Retrieve с создаными сущностями ?
Попробуте так:
DynamicEntity yourEntity = (DynamicEntity)crmService.Retrieve("new_numberbank",...);

Quote:
Originally Posted by Vuhasty View Post
Ведь этот метод не возвращает DynamicEntity а объект соответсвуещего типа ...
И стандартные и динамик сущности - это потомки BusinessEntity, а именно объект этого типа возвращается.

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

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

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit
This post has been rated by: Vuhasty (1).
Old 18.05.2009, 12:59   #13  
Vuhasty is offline
Vuhasty
Участник
 
10 / 10 (1) +
Join Date: 15.05.2009
Quote:
Originally Posted by Артем Enot Грунин View Post
Класс RetrieveRequest, который вы будете использовать в методе Retrieve имеет опцию ReturnDynamicEntities.
Code:
  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);
  }
У меня не то СДК что-ли ? Или я не там ищу ?
Old 18.05.2009, 13:16   #14  
a33ik is offline
a33ik
Чайный пьяница
a33ik's Avatar
MCP
MCBMSS
Злыдни
Соотечественники
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,243 / 896 (36) +++++++
Join Date: 02.07.2008
Location: Greenville, SC
Quote:
Originally Posted by Vuhasty View Post
Code:
  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
Old 18.05.2009, 14:01   #15  
Vuhasty is offline
Vuhasty
Участник
 
10 / 10 (1) +
Join Date: 15.05.2009
Quote:
Originally Posted by a33ik View Post
С точки зрения ООП - классы account, contact и т.п. как и DynamicEntity - это потомки класса BusinessEntity.
BusinessEntity - пустой абстрактный клас,
класы потомки между собой не кастятся, уже пробовал.
Old 18.05.2009, 14:33   #16  
a33ik is offline
a33ik
Чайный пьяница
a33ik's Avatar
MCP
MCBMSS
Злыдни
Соотечественники
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,243 / 896 (36) +++++++
Join Date: 02.07.2008
Location: Greenville, SC
Quote:
Originally Posted by Vuhasty View Post
BusinessEntity - пустой абстрактный клас,
класы потомки между собой не кастятся, уже пробовал.
А зачем Вам между собой потомков кастить то? Вам надо кастить из BusinessEntity в DynamicEntity.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

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

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

Similar Threads
Thread Thread Starter Forum Replies Last Post
Как получить значение поля одной сущности при обработке формы другой сущности 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

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Рейтинг@Mail.ru
All times are GMT +3. The time now is 17:30.
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Contacts E-mail, Advertising.