23.03.2009, 10:40 | #1 |
Участник
|
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 |
Чайный пьяница
|
Цитата:
Сообщение от Казарин Александр
Столкнулся с проблемой. Есть известный запрос к сущности.
[/SIZE] И этот код бы работал, если бы не одно НО. Все это реализуется для организации не по умолчанию, т.е. попытка взять ((CrmSdk.new_numerator)numcol.BusinessEntities[0]).new_number.ToString(); выдает ошибку что такой сущности(new_numerator) в CrmSdk(веб-сервис) нет. Незнаю что делать.. Код: string subcustomerId = ((CrmNumber)((DynamicEntity)numcol.BusinessEntities[0])["new_number"]).Value.ToString();
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit Последний раз редактировалось a33ik; 23.03.2009 в 10:51. |
|
23.03.2009, 14:29 | #3 |
Участник
|
Гневается с ошибкой
Цитата:
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 |
Чайный пьяница
|
Попробуйте так:
Код: ((CrmNumber)((DynamicEntity)numcol.BusinessEntities[0]).Properties["new_number"]).Value.ToString();
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
23.03.2009, 14:56 | #5 |
Участник
|
Так ему совсем не нравится..
Цитата:
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 |
Чайный пьяница
|
Если не секрет - скиньте на почту Солюшен - откорректирую, чтобы работало Так долго можно играться azz@snt.ua
UPD я так понял вы пользуетесь Веб Референсом на сервис MS CRM. У него свои приколы - нет у пропертей индексации по имени, а только по номеру...
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit Последний раз редактировалось a33ik; 23.03.2009 в 15:13. |
|
|
За это сообщение автора поблагодарили: Казарин Александр (1). |
23.03.2009, 16:09 | #7 |
Участник
|
Цитата:
Сообщение от Казарин Александр
И этот код бы работал, если бы не одно НО. Все это реализуется для организации не по умолчанию, т.е. попытка взять ((CrmSdk.new_numerator)numcol.BusinessEntities[0]).new_number.ToString(); выдает ошибку что такой сущности(new_numerator) в CrmSdk(веб-сервис) нет. Незнаю что делать.. http://[servername]/[orgname]/mscrmservices/2007/crmservice.asmx Тогда VS будет знать, что такое new_numerator. А вообще, a33ik прав - по-хорошему надо DynamicEntity пользовать. |
|
18.05.2009, 12:21 | #8 |
Участник
|
Похожая проблема, в плагине надо вытянуть из ЦРМа одну из мною созданих сущностей, использую следующий код:
Код: // 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 |
Чайный пьяница
|
Цитата:
Сообщение от 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'>.] Заранее спасибо. По поводу исключения - убедитесь в следующем: - схема сущности указана корректно (new_numberbank); - сервис подключается к корректной организации (в случае Multy Tenancy) - сущность опубликована - пользователь в контексте которого выполняется плагин имеет права на зачитку сущности (это вряд ли, но всё же)
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
18.05.2009, 12:46 | #10 |
Участник
|
Цитата:
Ведь этот метод не возвращает DynamicEntity а объект соответсвуещего типа ... ПС: Использую библиотеки с СДК, не ВебРеференс. ППС: Спасибо за оперативность |
|
18.05.2009, 12:52 | #11 |
Moderator
|
Класс RetrieveRequest, который вы будете использовать в методе Retrieve имеет опцию ReturnDynamicEntities.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
18.05.2009, 12:57 | #12 |
Чайный пьяница
|
Попробуте так:
DynamicEntity yourEntity = (DynamicEntity)crmService.Retrieve("new_numberbank",...); Цитата:
Очень грамотно с моей точки зрения. Когда начинал разбираться, изза обёрток создаваемых веб референсом, имел немало проблем. Если это не пройдёт, используйте Execute и RetrieveRequest c TargetRetrieveDynamic.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
|
За это сообщение автора поблагодарили: Vuhasty (1). |
18.05.2009, 12:59 | #13 |
Участник
|
Цитата:
Код: 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 |
Чайный пьяница
|
Цитата:
Сообщение от 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 |
Участник
|
|
|
18.05.2009, 14:33 | #16 |
Чайный пьяница
|
А зачем Вам между собой потомков кастить то? Вам надо кастить из BusinessEntity в DynamicEntity.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
18.05.2009, 17:15 | #17 |
Участник
|
|
|
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|