Показать сообщение отдельно
Старый 23.06.2017, 09:32   #1  
ajlewa is offline
ajlewa
Участник
 
11 / 10 (1) +
Регистрация: 10.08.2015
Проблема с LinkEntities
Приветствую Коллеги,
столкнулся со следующей проблемой:
Пишу приложение на asp.net mvc и нужно вытащить инфо из СРМ 2011 из нескольких сущностей.
получился следующий код:
Код:
List<Event> _events = new List<Event>();
var serverAndOrgName = "http://crm.local/organization";
var orgServiceUri = new Uri(serverAndOrgName + "/XRMServices/2011/Organization.svc");
var orgConfiguration = ServiceConfigurationFactory.CreateConfiguration<IOrganizationService>(orgServiceUri);
var credentials = new ClientCredentials();
credentials.Windows.ClientCredential = new NetworkCredential("user", "123", "LOCAL");
OrganizationServiceProxy _service = new OrganizationServiceProxy(orgConfiguration, credentials);
OrganizationServiceContext _context = new OrganizationServiceContext(_service);
QueryExpression qe = new QueryExpression();
qe.EntityName = "new_event";
qe.ColumnSet = new ColumnSet();
qe.ColumnSet.Columns.Add("new_fullname");
qe.ColumnSet.Columns.Add("new_startdate");
qe.ColumnSet.Columns.Add("new_numberofdays");
qe.LinkEntities.Add(new LinkEntity("new_event", "new_city", "new_cityid", "new_cityid", JoinOperator.LeftOuter));
qe.LinkEntities[0].Columns.AddColumns("new_country", "new_name_ru");
qe.LinkEntities[0].EntityAlias = "city";
qe.LinkEntities.Add(new LinkEntity("new_coursetype", "new_coursetype", "new_coursetypeid", "new_coursetypeid", JoinOperator.LeftOuter));
qe.LinkEntities[1].Columns.AddColumns("new_trackidname");
qe.LinkEntities[1].EntityAlias = "coursetype";
qe.LinkEntities.Add(new LinkEntity("new_event", "product", "new_productid", "productid", JoinOperator.LeftOuter));
qe.LinkEntities[2].EntityAlias = "product";
qe.LinkEntities[2].LinkEntities.Add(new LinkEntity("product", "productpricelevel", "productid", "productid", JoinOperator.LeftOuter));
qe.LinkEntities[2].LinkEntities[0].LinkCriteria.AddFilter(new FilterExpression(LogicalOperator.And));
qe.LinkEntities[2].LinkEntities[0].LinkCriteria.AddCondition(new ConditionExpression("pricelevelid", ConditionOperator.Equal, "pricelevelid"));
qe.LinkEntities[2].LinkEntities[0].Columns.AddColumns("amount_base");
qe.LinkEntities[2].LinkEntities[0].EntityAlias = "price";
qe.Criteria.AddCondition("new_startdate", ConditionOperator.Equal, date);
qe.Criteria.AddCondition("be_webvisible", ConditionOperator.Equal, true);
Проблема возникает в связывании сущность product и productpricelevel, нужно связать по двум аттрибутам productid и pricelevelid, для этого использую такой код:
Код:
qe.LinkEntities[2].LinkEntities.Add(new LinkEntity("product", "productpricelevel", "productid", "productid", JoinOperator.LeftOuter));
qe.LinkEntities[2].LinkEntities[0].LinkCriteria.AddFilter(new FilterExpression(LogicalOperator.And));
qe.LinkEntities[2].LinkEntities[0].LinkCriteria.AddCondition(new ConditionExpression("pricelevelid", ConditionOperator.Equal, "pricelevelid"));
qe.LinkEntities[2].LinkEntities[0].Columns.AddColumns("amount_base");
qe.LinkEntities[2].LinkEntities[0].EntityAlias = "price";
приложение выдаёт исключение:
Цитата:
An exception System.FormatException was thrown while trying to convert input value 'pricelevelid' to attribute 'productpricelevel.pricelevelid'. Expected type of attribute value: System.Guid. Exception raised: Guid should contain 32 digits with 4 dashes (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).
Хотя оба аттрибута являются Guid'ами.

Вопрос: где я накосячил?

Также подскажите пригоден ли данный метод авторизации или лучше использовать что то другое?
И каким образом можно уменьшить время выполнения запроса?
Приложение будет как читать, так и писать данные в срм.