|
20.01.2009, 16:40 | #1 |
Участник
|
Нахождение GUIDа объекта по другим атрибутам
Прошу прощения, но мне вновь нужен ваш совет
Сейчас мне нужно сделать обработку которая бы из 1С создавала некий объект в CRM, в целом это не проблема через WebService, но встал вопрос, как зная, допустим доменное имя пользователя - получить по нему GUID этого systemuser-а, для дальнейшего заполнения его в lookup сущности |
|
20.01.2009, 16:55 | #2 |
Чайный пьяница
|
Цитата:
Сообщение от Казарин Александр
Прошу прощения, но мне вновь нужен ваш совет
Сейчас мне нужно сделать обработку которая бы из 1С создавала некий объект в CRM, в целом это не проблема через WebService, но встал вопрос, как зная, допустим доменное имя пользователя - получить по нему GUID этого systemuser-а, для дальнейшего заполнения его в lookup сущности Код: CrmService _serv = new CrmService(); //Формируем собственно токен для работы сервиса, креденшиалы и прочее Microsoft.Crm.Sdk.Query.QueryByAttribute query = new Microsoft.Crm.Sdk.Query.QueryByAttribute(); query.ColumnSet.AddColumn("systemuserid"); query.EntityName = "systemuser"; query.Attributes = new string[] { "domainname" }; query.Values = new string[] { "domain\\userdomainname" }; BusinessEntityCollection users = _serv.RetrieveMultiple(query); //получили коллекцию, оценили размер, если нашли - взяли первый, кастанули, получили гуид
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
|
За это сообщение автора поблагодарили: Артем Enot Грунин (1). |
20.01.2009, 17:37 | #3 |
Участник
|
Большое спасибо
|
|
20.01.2009, 17:41 | #4 |
Чайный пьяница
|
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
21.01.2009, 18:07 | #5 |
Участник
|
Цитата:
Спасибо - репутацию не повышает
Возникла еще одна крайне непонятная проблема, с организациями, офтопик но не хочется создавать пока новых тем. На CRM-е несколько организаций. С той которая по умолчанию все прекрасно. Но Сейчас мне нужно производить действия с другой организацией и тут начали лезть какие то непонятные проблемы с кодингом да и вообще с компонентами. Когда при попытке подключить акселератор Notifications он начал выдавать сущности организации по дефаулту а не нужной я списал это на сам акселератор. Но тут мне понадобилось описаную в первом посте задачу реализовать с этой организацией - но VisualStudio так же невозмутимо рекомендует мне сущности организации по дефаулту, а сам скрипт выдавать при исполнении ошибку Цитата:
Сообщение об ошибке компилятора: CS0103: Имя 'new_goods_problems'
отсутствует в текущем контексте Что делать, право не знаю |
|
21.01.2009, 20:30 | #6 |
Moderator
|
Все работает правильно. Просто в этом случае придется иметь дело с Dynamic Entity, а не готовыми типами,как вы привыкли.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
|
За это сообщение автора поблагодарили: Казарин Александр (1). |
23.01.2009, 14:04 | #7 |
Участник
|
А не подскажите как его правильно использовать? В SDK нашел пример, сделал у себя примерно так
Цитата:
DynamicEntity new_goods_problems = (DynamicEntity)context.InputParameters[ParameterName.Target];
new_goods_problems["new_name"] = zakazname; new_goods_problems["new_problemitem"] = Request.Params["trableitem"]; Guid goodsGuid = service.Create(new_goods_problems); |
|
23.01.2009, 14:37 | #8 |
Чайный пьяница
|
Цитата:
Код: DynamicEntity entity = new DynamicEntity("Entity Name To Be Created"); entity.Properties.Add(new StringProperty("Name Of Field", "Value of Field")); //Заполнение остальных пропертей создаваемой сущности по аналогичному механизму service.Create(entity);
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
|
За это сообщение автора поблагодарили: Казарин Александр (1). |
09.02.2009, 15:13 | #9 |
Учаснег
|
Не буду плодить новых тем... Попробую спросить, а можно ли как то получить список DynamicEntity удовлетворяющих условию? что то наподобие Queryexpression.
__________________
http://about.me/fedorovigor |
|
09.02.2009, 15:46 | #10 |
Moderator
|
Ну да. Например метод Execute + запрос TargetRetrieveDynamic. Ну или установите свойство ReturnDynamicEntities = true e вашего RetrieveRequest.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
09.02.2009, 16:28 | #11 |
Участник
|
Написал для этих целей следующую функцию:
X++: public object getObjectsByCondition(string entityName, Dictionary<int, Condition> conditionList, string[] requestAttributeName) { ColumnSet cols = new ColumnSet(); cols.Attributes = requestAttributeName; ConditionExpression[] condition = new ConditionExpression[conditionList.Count]; FilterExpression filter = new FilterExpression(); filter.FilterOperator = LogicalOperator.And; for (int i = 0; i < conditionList.Count; i++) { condition[i] = new ConditionExpression(); condition[i].AttributeName = conditionList[i].name; condition[i].Operator = ConditionOperator.Like; condition[i].Values = conditionList[i].values; } filter.Conditions = condition; QueryExpression query = new QueryExpression(); query.EntityName = entityName; query.ColumnSet = cols; query.Criteria = filter; RetrieveMultipleRequest retrieve = new RetrieveMultipleRequest(); retrieve.Query = query; RetrieveMultipleResponse retrieved; try { retrieved = (RetrieveMultipleResponse)service.Execute(retrieve); } catch (SoapException ex) { throw new Exception(ex.Detail.InnerText.ToString()); } return retrieved.BusinessEntityCollection; } X++: conditionList.Clear(); conditionList.Add(0, new Condition("itb_itn", new string[] { node.SelectSingleNode("INN").InnerText })); conditionList.Add(1, new Condition("new_lead_type", new string[] { "2" })); conditionList.Add(2, new Condition("new_address1_country", new string[] { node.SelectSingleNode("Country").InnerText })); BusinessEntityCollection companyCollection = (BusinessEntityCollection)getObjectsByCondition(EntityName.lead.ToString(), conditionList, new string[] { "leadid" }); X++: public Condition(string _name, string[] _values)
{
name = _name;
values = _values;
} |
|
|
За это сообщение автора поблагодарили: Dissident (1), IgorF (1). |