|
|
#1 |
|
Участник
|
Прошу Вашей помощи не знаю за что взяться, задача такова:
в сущности есть дополнительный раздел Документы, при нажатии на него в идеале в окне сущности появляется библиотека 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. |
|
|
|
|
#2 |
|
Участник
|
К CRM не пускает?
Если к CRM, то, первое, что бросается в глаза - service.Url = "http://crm/mscrmservices/2006/crmservice.asmx"; а должно быть, по идее, 2007 Второе - в этом коде организация не указана. (см. CrmAuthenticationToken) Попробуйте как в SDK инициализировать сервис - там есть пример. |
|
|
|
|
#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 или ссылка на сборку?) |
|
|
|
|
#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. Попробовали бы для начала разместить на сервере пустой проект, который только сервис инициализирует... |
|
|
|
|
#5 |
|
Moderator
|
И насчет пространства имен CrmSdk тоже сомнительно. Это что вообще? Вы так веб референс назвали? Весь веб проект на том же сервере развернут?
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. ![]() MS Certified Dirty Magic Professional
|
|
|
|
|
#6 |
|
Чайный пьяница
|
Всю работу с сервисом MSCRM надо оборачивать конструкцией using(new CrmImpersonator()){...}
Поправьте, если ошибаюсь. |
|
|
|
|
#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. |
|
|
|
|
#8 |
|
Чайный пьяница
|
|
|
|
|
|
#9 |
|
Чайный пьяница
|
Выложите пожалуйста web.config для данной разрабатываемой страницы. Думаю, что корни 401 ошибки оттуда.
|
|
|
|
|
#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:
|
|
|
|
|
#11 |
|
Moderator
|
Только при работе с aspx страницами. И то, скорее всего, если они развернуты на другом сайте и другом пуле приложений.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. ![]() MS Certified Dirty Magic Professional
|
|
|
|
|
#12 |
|
Moderator
|
При компиляции вашего сайта должна генерироваться библиотека с прокси классом вашего веб сервиса (<namespace>.CrmSdk.dll) Попробуйте выложить ее в папку с вашим сайтом на конечном сервере.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. ![]() MS Certified Dirty Magic Professional
|
|
|
|
|
#13 |
|
Чайный пьяница
|
|
|
|
|
|
#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е оно будет все. |
|
|
|
|
#15 |
|
Заноза в заднице
|
1. Подозреваю, что при директиве using кроме указания имени веб-референс, нужно добавлять исходное пространство имен, пример:
Код: using MyProject.CrmSdk; 2. У меня была реальная ситуация, когда DefaultCredentials ничего не возвращают. Айтиншники говорят, что такое возможно, когда используется прокси-сервер или в брандмауэре чё-то настроено. Не вникал. Использовал обходой путь: сообщал креды системной учетки, у которой есть кое-какие широкие права на просмотр и создание нужных сущностей.
__________________
Лень мудрого человека - это необходимое средство нейтрализации кипучей активности руководящих им дураков! Последний раз редактировалось Likefire; 20.11.2008 в 14:10. |
|
|
|
| За это сообщение автора поблагодарили: Казарин Александр (1). | |
|
|
#16 |
|
Участник
|
Цитата:
2. У меня была реальная ситуация, когда DefaultCredentials ничего не возвращают
Последний раз редактировалось Казарин Александр; 20.11.2008 в 17:34. |
|
|
|
|
|