18.11.2008, 16:54 | #1 |
Участник
|
Передача параметров CRM -> Sharepoint
Прошу Вашей помощи не знаю за что взяться, задача такова:
в сущности есть дополнительный раздел Документы, при нажатии на него в идеале в окне сущности появляется библиотека Sharepoint с выборкой по определенному столбцу. Соответственно вносим изменения в ISV.конфиг, там через редирект с запросом пытаемся вызвать нужное окно, вот код: Код: <%@PageLanguage="C#"Debug="true" %> <%@IMPORTNamespace="CrmSdk" %> <scriptrunat="server"> protectedvoid Page_Load(object sender, EventArgs e) { string entityid = Request.QueryString["old"]; CrmService service = newCrmService(); service.Credentials = System.Net.CredentialCache.DefaultCredentials; service.Url = "http://crm/mscrmservices/2006/crmservice.asmx"; ColumnSet cols = newColumnSet(); cols.Attributes = newstring[] { "project" }; try { account oAccount = (account)service.Retrieve(EntityName.account.ToString(), newGuid("EB974233-B9AF-DD11-9153-00155D00C913"), cols); string acctNumber = (oAccount.name == null) ? string.Empty : oAccount.name.ToString(); string url = "http://portal.elfnet.local/Units/IT/CRMDocs/Forms/AllItems.aspx?View={370E6746-5F6F-4C8D-9BAC-B5C59C33EA07}&FilterField1=project&FilterValue1="; url += acctNumber; Response.Redirect(url, true); } catch (System.Web.Services.Protocols.SoapException ex) { //Handle error } } </script> соответственно при попытке открыть выводит разные ошибки, в зависимости от расположение файла скрипта. В частности либо 401, либо что пространство имен CrmSdk не обнаружено. У меня смутное ощущение что я делаю что то не так, но не могу понять что. CRM у нас 4.0 Последний раз редактировалось Казарин Александр; 18.11.2008 в 17:30. |
|
18.11.2008, 18:34 | #2 |
Участник
|
К CRM не пускает?
Если к CRM, то, первое, что бросается в глаза - service.Url = "http://crm/mscrmservices/2006/crmservice.asmx"; а должно быть, по идее, 2007 Второе - в этом коде организация не указана. (см. CrmAuthenticationToken) Попробуйте как в SDK инициализировать сервис - там есть пример. |
|
18.11.2008, 18:58 | #3 |
Участник
|
Я все переделал сделал по другому:
Код: using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using CrmDiscoveryService; using CrmSdk; publicpartialclassLoad : System.Web.UI.Page { protectedvoid Page_Load(object sender, EventArgs e) { CrmSdk.CrmService crmService = GetCrmService("ExpertSever"); QueryByAttribute query = newQueryByAttribute(); ColumnSet cols = newColumnSet(); cols.Attributes = newstring[] { "name" }; query.ColumnSet = cols; query.EntityName = EntityName.account.ToString(); query.Attributes = newstring[] { "id" }; query.Values = newobject[] { "EB974233-B9AF-DD11-9153-00155D00C913" }; BusinessEntityCollection retrievedProjects = crmService.RetrieveMultiple(query); dlProjects.Items.Add(newListItem("Выберите партнера", null)); for (int i = 0; i < retrievedProjects.BusinessEntities.Length; i++) { dlProjects.Items.Add(newListItem(((account)retrievedProjects.BusinessEntities[i]).name, ((account)retrievedProjects.BusinessEntities[i]).name)); } } private CrmSdk.CrmService GetCrmService(string organizationName) { // Setup the Authentication Token CrmSdk.CrmAuthenticationToken token = newCrmAuthenticationToken(); token.OrganizationName = organizationName; CrmSdk.CrmService crmService = new CrmSdk.CrmService(); crmService.Credentials = System.Net.CredentialCache.DefaultCredentials; crmService.CrmAuthenticationTokenValue = token; return crmService; } } Результат такой же, если складываешь его в папку с Crm-ом и пытаешься запустить открывает окно с ошибкой а в логах сервера пишет: Сведения об исключении: Тип исключения: HttpCompileException Сообщение об исключении: c:\Program Files\Microsoft Dynamics CRM\CRMWeb\Redirect\Load.aspx.cs(46): error CS0246: Не удалось найти имя типа или пространства имен 'CrmSdk' (пропущена директива using или ссылка на сборку?) |
|
18.11.2008, 19:37 | #4 |
Участник
|
CrmAuthenticationToken token;
token = new CrmAuthenticationToken(); token.OrganizationName = orgName; token.AuthenticationType = 0; CrmService service = new CrmService(); service.Url = hostName + "mscrmservices/2007/crmservice.asmx"; service.Credentials = System.Net.CredentialCache.DefaultCredentials; service.CrmAuthenticationTokenValue = token; P.S. Попробовали бы для начала разместить на сервере пустой проект, который только сервис инициализирует... |
|
18.11.2008, 21:18 | #5 |
Moderator
|
И насчет пространства имен CrmSdk тоже сомнительно. Это что вообще? Вы так веб референс назвали? Весь веб проект на том же сервере развернут?
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
19.11.2008, 16:08 | #6 |
Чайный пьяница
|
Всю работу с сервисом MSCRM надо оборачивать конструкцией using(new CrmImpersonator()){...}
Поправьте, если ошибаюсь. |
|
19.11.2008, 16:56 | #7 |
Участник
|
Вобщем я смутился запутался и решил все переписать по-человечески. Получился более или менее адекватный код
Код: using CrmSdk; publicpartialclassRecieve : System.Web.UI.Page { protectedvoid Page_Load(object sender, EventArgs e) { CrmAuthenticationToken token = newCrmAuthenticationToken(); token.AuthenticationType = 0; token.OrganizationName = "ExpertSever"; CrmService service = newCrmService(); service.Url = "http://crm/mscrmservices/2007/crmservice.asmx"; service.CrmAuthenticationTokenValue = token; service.Credentials = System.Net.CredentialCache.DefaultCredentials; ColumnSet cols = newColumnSet(); cols.Attributes = newstring[] { "name" }; Guid contactGuid = newGuid("861534A8-7B9B-DD11-8F66-00155D00C913"); opportunity opportunity = (opportunity)service.Retrieve(EntityName.opportunity.ToString(), contactGuid, cols); string url = "http://portal.elfnet.local/Units/IT/CRMDocs/Forms/AllItems.aspx?View=%7B370E6746%2D5F6F%2D4C8D%2D9BAC%2DB5C59C33EA07%7D&FilterField1=project&FilterValue1="; url += opportunity.name.ToString(); Response.Redirect(url, true); } } Цитата:
Это что вообще? Вы так веб референс назвали?
Цитата:
Весь веб проект на том же сервере развернут?
Цитата:
Всю работу с сервисом MSCRM надо оборачивать конструкцией using(new CrmImpersonator()){...}
И сразу вопрос до кучи, как передать ID сущности с которой делается запрос на этот файл? В одной книжке я видел string entityId = Request.QueryString["old"], но в моем случае она пустое значение возращает. Последний раз редактировалось Казарин Александр; 19.11.2008 в 17:00. |
|
19.11.2008, 17:45 | #8 |
Чайный пьяница
|
|
|
19.11.2008, 17:47 | #9 |
Чайный пьяница
|
Выложите пожалуйста web.config для данной разрабатываемой страницы. Думаю, что корни 401 ошибки оттуда.
|
|
19.11.2008, 18:08 | #10 |
Участник
|
Цитата:
Код: <?xmlversion="1.0"?> <configuration> <appSettings> <addkey="CrmSdk.CrmServiceWsdl"value="http://co-vrt-027:5555/MSCrmServices/2007/CrmService.asmx"/> </appSettings> <connectionStrings/> <system.web> <customErrorsmode="Off"/> <compilationdebug="true"/> <authenticationmode="Windows"/> </system.web> </configuration> Цитата:
Вот что думает по этому поводу MSDN:
|
|
19.11.2008, 19:53 | #11 |
Moderator
|
Только при работе с aspx страницами. И то, скорее всего, если они развернуты на другом сайте и другом пуле приложений.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
19.11.2008, 19:56 | #12 |
Moderator
|
При компиляции вашего сайта должна генерироваться библиотека с прокси классом вашего веб сервиса (<namespace>.CrmSdk.dll) Попробуйте выложить ее в папку с вашим сайтом на конечном сервере.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
20.11.2008, 11:34 | #13 |
Чайный пьяница
|
|
|
20.11.2008, 11:54 | #14 |
Участник
|
Цитата:
При компиляции вашего сайта должна генерироваться библиотека с прокси классом вашего веб сервиса (<namespace>.CrmSdk.dll) Попробуйте выложить ее в папку с вашим сайтом на конечном сервере.
App_WebReferences.dll App_WebReferences.compiled и App_Web_<случайная_комбинация>.dll - App_Web_r77mewsd.dll При запуске на локальной машине ругается так же на 401, при помещении на сервер с crm-ом Сведения об исключении: Тип исключения: HttpParseException Сообщение об исключении: Невозможно загрузить сборку 'App_Web_r77mewsd'. Перед доступом к данной странице проверьте, что сборка скомпилирована. Цитата:
Александр, страница разрабатывается, как расширение MS CRM и будет хостится в ISV каталоге MS CRM?
Ну вообще задача такова - сделать редирект на страницу Sharepoint-а с соответствующим фильтром по проекту, например. Т.е. эта страница может быть где угодно, лишь бы выполняла свое предназначение. Т.е. сейчас, проект лежит на моей локальной машине, он работает при запуске Debug-а Визуал Студии, т.е. большего мне пока от него не надо(не считая передачи ID сущности в скрипт ), проблема лишь в том что вне Debug-а она почему то не работает В идеале в проекте этом должны будут появиться страницы с созданием данных в CRM но для людей не имеющих доступ на сам CRM поэтому думаю опять же не совсем в CRMе оно будет все. |
|
20.11.2008, 14:07 | #15 |
Заноза в заднице
|
1. Подозреваю, что при директиве using кроме указания имени веб-референс, нужно добавлять исходное пространство имен, пример:
Код: using MyProject.CrmSdk; 2. У меня была реальная ситуация, когда DefaultCredentials ничего не возвращают. Айтиншники говорят, что такое возможно, когда используется прокси-сервер или в брандмауэре чё-то настроено. Не вникал. Использовал обходой путь: сообщал креды системной учетки, у которой есть кое-какие широкие права на просмотр и создание нужных сущностей.
__________________
Лень мудрого человека - это необходимое средство нейтрализации кипучей активности руководящих им дураков! Последний раз редактировалось Likefire; 20.11.2008 в 14:10. |
|
|
За это сообщение автора поблагодарили: Казарин Александр (1). |
20.11.2008, 15:53 | #16 |
Участник
|
Цитата:
2. У меня была реальная ситуация, когда DefaultCredentials ничего не возвращают
Последний раз редактировалось Казарин Александр; 20.11.2008 в 17:34. |
|
|
|