代码之家  ›  专栏  ›  技术社区  ›  user254875486 TM Creative

从MS CRM事件发出Ajax请求

  •  1
  • user254875486 TM Creative  · 技术社区  · 15 年前

    我需要从MS CRM Dynamics 4.0中表单的OnSave事件向某些脚本发出Ajax请求。 我现在的密码是

    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()失败,表示“权限被拒绝”。

    更新(2009年12月7日);

    我在CRM的ISV文件夹中创建了一个虚拟目录,并上传了一个ASP.NET应用程序。现在,如果我转到crm.url.nl:5555/isv/default.aspx,我会得到;

    'microsoft.crm.webservices.crm2007.cookie和soapheaderauthenticationProvider,microsoft.crm.webservices,version=4.0.0.0,culture=neutral,publickeytoken=31bf3856ad364e35'不存在。 参数名称:microsoft.crm.webservices.crm2007.cookieandsoapheaderauthenticationProvider,microsoft.crm.webservices,version=4.0.0.0,culture=neutral,publickeytoken=31bf3856ad364e35

    具有stacktrace;

    [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应用程序只写一个单词来响应,所以没有什么特别的…

    2 回复  |  直到 14 年前
        1
  •  1
  •   user254875486 TM Creative    15 年前

    好吧,我知道这个主意是什么。 如果您想从CRM 4.0调用一个动态.NET应用程序的Ajax,下面是您要做的。

    将.NET应用程序的程序集放在CRM文件夹的crmweb/bin文件夹中。将ASPX文件放在ISV文件夹中的文件夹中。我使用了stunware.com文件夹,因为它在那里,但是为了整齐起见,您可能需要创建另一个文件夹。 然后,在onsave(或任何on-event)中放置类似的内容;

    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开发人员是一种耻辱。他们真的应该花更多的时间来记录SDK以及如何做类似的事情。

        2
  •  0
  •   John Hoven    15 年前

    只是想在这里尝试一下:

    文件的路径在crmweb目录中?您是否设置了虚拟目录或进行了其他操作?

    /folder/index.html在同一表单上的iframe中工作吗?

    也许你可以尝试一些你知道会奏效的方法来确保: http://stackoverflow.com http://google.com .

    还请注意,MS建议将所有自定义设置放在/isv/文件夹中。这不会导致404个错误,但我不确定他们是否会认为这是不支持的。

    您真的在调用HTML扩展吗?我相信您需要为ASPX和ASMX扩展使用prependergname(参见sdk)。我不确定这是否会导致404,或者只是使用你的默认组织。

    推荐文章