|  09.07.2009, 20:40 | #1 | 
| Участник |  Преобразование Key->Guid 
			
			Для получения выборки ссылочной сущности (отношение N:1) по списку Id основной сущности в запрос нужно передавать эти Id в виде Guid-ов. Guid-ы извлекаются из выборки записей основной сущности, где они содержаться в атрибуте первичного ключа (PK). Это атрибут имеет тип Microsoft.Crm.Sdk.Key и напрямую в Guid никак не хочет преобразовываться. Пришлось применитть 2-х шаговое преобразование с использованием промежуточных переменных: Код: ce = new ConditionExpression();
ce.AttributeName = "new_primaryobjectreference";
ce.Operator = ConditionOperator.In;
ce.Values = new Object[result.BusinessEntityCollection.BusinessEntities.Count];
Key dekey;
Guid deid = new Guid();
for (int i = 0; i < result.BusinessEntityCollection.BusinessEntities.Count; i++)
{
   de = (DynamicEntity)result.BusinessEntityCollection.BusinessEntities[i];
   dekey = de.Properties["new_primaryobjectid"] as Key;
   deid = dekey.Value;
   ce.Values[i] = deid;
}В начале я вообще не думал, что нужно будет делать какие-либо преобразования. Для передачи значений создал универсальный массив generic-объектов, в который просто сохранял список ключей. Но при выполении запроса CRM ругался: "ты подсунул Key туда где нужен Guid" и пришлось искать способ привести значения к нужному типу. | 
|  | 
|  09.07.2009, 21:54 | #2 | 
| Чайный пьяница | Цитата: 
		
			Сообщение от alsherin
			   Для получения выборки ссылочной сущности (отношение N:1) по списку Id основной сущности в запрос нужно передавать эти Id в виде Guid-ов. Guid-ы извлекаются из выборки записей основной сущности, где они содержаться в атрибуте первичного ключа (PK). Это атрибут имеет тип Microsoft.Crm.Sdk.Key и напрямую в Guid никак не хочет преобразовываться. Пришлось применитть 2-х шаговое преобразование с использованием промежуточных переменных: Код: ce = new ConditionExpression();
ce.AttributeName = "new_primaryobjectreference";
ce.Operator = ConditionOperator.In;
ce.Values = new Object[result.BusinessEntityCollection.BusinessEntities.Count];
Key dekey;
Guid deid = new Guid();
for (int i = 0; i < result.BusinessEntityCollection.BusinessEntities.Count; i++)
{
   de = (DynamicEntity)result.BusinessEntityCollection.BusinessEntities[i];
   dekey = de.Properties["new_primaryobjectid"] as Key;
   deid = dekey.Value;
   ce.Values[i] = deid;
}В начале я вообще не думал, что нужно будет делать какие-либо преобразования. Для передачи значений создал универсальный массив generic-объектов, в который просто сохранял список ключей. Но при выполении запроса CRM ругался: "ты подсунул Key туда где нужен Guid" и пришлось искать способ привести значения к нужному типу. 
				__________________ Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit | 
|  | 
|  10.07.2009, 13:38 | #3 | 
| Участник | 
			
			Вот такая штука возвращает GUID: Код: ((Key)DynamicEntity.Properties["new_primaryobjectid"]).Value 
				__________________ С уважением, Tony Green | 
|  | |
| За это сообщение автора поблагодарили: alsherin (1). | |
|  10.07.2009, 15:21 | #4 | 
| Участник | 
			
			С точки зрения производительности какой код эффективнее? Можно ли было сразу написать: Код: ce.Values[i] = ((Key)((DynamicEntity)result.BusinessEntityCollection.BusinessEntities[i]).Properties["new_primaryobjectid"]).Value; | 
|  | 
|  10.07.2009, 15:25 | #5 | 
| Moderator | 
			
			Не важно. Компилятор все равно оптимизирует код за вас. Пишите так, как удобно отлаживать и вносить изменения.
		 
				__________________ http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.   MS Certified Dirty Magic Professional | 
|  | |
| За это сообщение автора поблагодарили: alsherin (1). | |
|  | 
| 
 |