|
|
#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(веб-сервис) нет. Незнаю что делать.. |
|
|
|
|
#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. |
|
|
|
|
#3 |
|
Участник
|
Гневается с ошибкой
Цитата:
Error 1 Cannot apply indexing with [] to an expression of type
Цитата:
((CrmSdk.CrmNumber)((CrmSdk.DynamicEntity)numcol.BusinessEntities[0])["new_number"]).Value.ToString();
|
|
|
|
|
#4 |
|
Чайный пьяница
|
Попробуйте так:
Код: ((CrmNumber)((DynamicEntity)numcol.BusinessEntities[0]).Properties["new_number"]).Value.ToString();
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
|
|
|
#5 |
|
Участник
|
Так ему совсем не нравится..
Цитата:
Error 1 Cannot implicitly convert type 'string' to 'int'
Цитата:
Error 2 Cannot convert type 'WorkingWithSharepoint.CrmSdk.Property' to 'WorkingWithSharepoint.CrmSdk.CrmNumber'
|
|
|
|
|
#6 |
|
Чайный пьяница
|
Если не секрет - скиньте на почту Солюшен - откорректирую, чтобы работало
Так долго можно играться azz@snt.uaUPD я так понял вы пользуетесь Веб Референсом на сервис MS CRM. У него свои приколы - нет у пропертей индексации по имени, а только по номеру...
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit Последний раз редактировалось a33ik; 23.03.2009 в 15:13. |
|
|
|
| За это сообщение автора поблагодарили: Казарин Александр (1). | |
|
|
#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 пользовать. |
|
|
|
|
#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'>.] Заранее спасибо. |
|
|
|
|
#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 |
|
|
|
|
#10 |
|
Участник
|
Цитата:
Ведь этот метод не возвращает DynamicEntity а объект соответсвуещего типа ... ПС: Использую библиотеки с СДК, не ВебРеференс. ППС: Спасибо за оперативность
|
|
|
|
|
#11 |
|
Moderator
|
Класс RetrieveRequest, который вы будете использовать в методе Retrieve имеет опцию ReturnDynamicEntities.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. ![]() MS Certified Dirty Magic Professional
|
|
|
|
|
#12 |
|
Чайный пьяница
|
Попробуте так:
DynamicEntity yourEntity = (DynamicEntity)crmService.Retrieve("new_numberbank",...); Цитата:
Очень грамотно с моей точки зрения. Когда начинал разбираться, изза обёрток создаваемых веб референсом, имел немало проблем. Если это не пройдёт, используйте Execute и RetrieveRequest c TargetRetrieveDynamic.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
|
|
| За это сообщение автора поблагодарили: Vuhasty (1). | |
|
|
#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);
} |
|
|
|
|
#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 |
|
|
|
|
#15 |
|
Участник
|
|
|
|
|
|
#16 |
|
Чайный пьяница
|
А зачем Вам между собой потомков кастить то? Вам надо кастить из BusinessEntity в DynamicEntity.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
|
|
|
#17 |
|
Участник
|
|
|
|
|
|
|