Вопрос

Мне нужно сделать AJAX-запрос к некоторому сценарию из события onSave формы в MS CRM Dynamics 4.0. Код, который у меня сейчас есть,

var http_request;
// Prepare the xmlHttpObject and send the request.
try{
    http_request = new ActiveXObject("Msxm12.XMLHTTP");
}catch(e){
    try{
        http_request = new ActiveXObject("Microsoft.XMLHTTP");
    }catch(e){
        alert("Something went wrong..");
    }
}
var poststr = "foo=bar";
http_request.open("POST", "/folder/index.html", false);
http_request.setRequestHeader("Content-Type","text/xml; charset=utf-8"); 
http_request.send(escape(poststr));
// Capture the result.
var resultXml = http_request.responseText;
alert(resultXml);

Теперь в сообщении указывается содержание ошибки типа 404. Я уверен, что страница есть, она доступна через браузер. Если я изменю
http_request.open (" POST " ;, " /folder/index.html" ;, false);
для изображения http_request.open (" POST " ;, " localhost: 5555 / folder / index.html " ;, false);
open () завершается ошибкой, говоря «Отказано в доступе».

ОБНОВЛЕНИЕ (7 декабря 2009 г.);

Я создал виртуальный каталог в папке ISV CRM и обновил приложение ASP.NET. Теперь, если я перейду к crm.url.nl:5555/ISV/Default.aspx, я получу;

'Microsoft.Crm.WebServices.Crm2007.CookieAndSoapHeaderAuthenticationProvider, Microsoft.Crm.WebServices, версия = 4.0.0.0, культура = нейтральная, PublicKeyToken = 31bf3856ad364e35' не существует. Имя параметра: Microsoft.Crm.WebServices.Crm2007.CookieAndSoapHeaderAuthenticationProvider, Microsoft.Crm.WebServices, Версия = 4.0.0.0, Культура = нейтральная, PublicKeyToken = 31bf3856ad364e35

С помощью трассировки стека;

[ArgumentException: 'Microsoft.Crm.WebServices.Crm2007.CookieAndSoapHeaderAuthenticationProvider, Microsoft.Crm.WebServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' doesn't exist.
Parameter name: Microsoft.Crm.WebServices.Crm2007.CookieAndSoapHeaderAuthenticationProvider, Microsoft.Crm.WebServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]
   Microsoft.Crm.Authentication.BaseAuthenticationSettings.CreateType(String typeName, Type requiredBaseType) +265
   Microsoft.Crm.Authentication.BaseAuthenticationSettings.CreateProvider(String typeName, IDictionary`2 configuration) +28
   Microsoft.Crm.Authentication.AuthenticationPipelineSettings.LoadPipeline() +262
   Microsoft.Crm.Authentication.AuthenticationPipelineSettings.get_AuthenticationProvider() +16
   Microsoft.Crm.Authentication.AuthenticationEngine.Execute(Object sender, EventArgs e) +524
   System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +68
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +75

У кого-нибудь есть идеи? Приложение .NET записывает в Response только одно слово, поэтому в этом нет ничего особенного ...

Это было полезно?

Решение

Хорошо, я узнал, в чем идея. Если вы хотите сделать AJAX-вызов динамического приложения .NET из CRM 4.0, вот что вы делаете.

Поместите сборки вашего приложения .NET в папку CRMWeb / bin в папке CRM. Поместите файлы aspx в папку в папке ISV. Я использовал папку stunnware.com, потому что она там была, но вы можете создать другую папку для удобства. Затем в onSave (или любое событие on) поместите что-то вроде этого;

var xmlHttp = null;
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");

var getstr = "foo=bar&foo2=bar2";
var url = prependOrgName("/ISV/*YOURFOLDER*/Default.aspx?"+getstr);

xmlHttp.open("GET",url,true);
xmlHttp.send(null);

Конечно, если вы хотите, чтобы CRM что-то делал с ответом на xml-запрос, вы можете использовать для этого onreadystatechange.

Надеюсь, что это может помочь другим людям. Это может показаться простым, но мне потребовалось довольно много времени, прежде чем я понял, как это сделать (хотя я знал, как использовать AJAX, .NET и все такое). Я думаю, это позор, что разработчики CRM остались в стороне от Microsoft. Они действительно должны уделить больше времени документированию SDK и тому, как это сделать.

Другие советы

Просто думаю о том, что можно попробовать здесь:

Путь к вашему файлу находится в каталоге CRMWeb? У вас есть виртуальный каталог или что-то в этом роде?

Работает ли /folder/index.html в IFRAME в той же форме?

Возможно, попробуйте что-нибудь, что, как вы знаете, сработает, просто чтобы убедиться: http://stackoverflow.com или http://google.com .

Также обратите внимание, что MS рекомендует поместить все настройки в папку / ISV /. Это не должно вызывать 404 ошибки, но я не уверен, что они сочтут это неподдерживаемым.

Вы действительно вызываете расширение html? Я считаю, что вам нужно использовать prependOrgName (см. SDK) для расширений aspx и asmx. Я не уверен, если это приведет к 404 или просто использовать вашу организацию по умолчанию от руки.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top