【问题标题】:Load a JavaScript event the last in CRM form在 CRM 表单中最后加载 JavaScript 事件
【发布时间】:2014-08-05 13:02:52
【问题描述】:

我的 CRM Online 2013 自定义实体中的每个表单都在 Notes 中保存了一张图像。我正在使用以下代码来查询图像并将其显示在表单上 Web 资源中的图像标记中。出于调试目的,我通过按钮调用以下代码,但我希望在表单加载时自动查询注释和在 Web 资源中显示图像的过程。这是我的代码:

<html><head><meta charset="utf-8"></head>


  <body>

   <img id="image" src="nothing.jpg" style="width: 25%; height: auto;" />
    <script type="text/javascript">
    $(windows).load(function()
    {
    var recordId = window.parent.Xrm.Page.data.entity.getId();  
    var serverUrl = Xrm.Page.context.getServerUrl().toString();
    var ODATA_ENDPOINT = "XRMServices/2011/OrganizationData.svc";
    var objAnnotation = new Object();
    ODataPath= serverUrl+ODATA_ENDPOINT;


    var temp= "/AnnotationSet?$select=DocumentBody,FileName,MimeType,ObjectId&$filter=ObjectId/Id eq guid'" + recordId + "'";
    var result =serverUrl + ODATA_ENDPOINT + temp; 

    var retrieveRecordsReq = new XMLHttpRequest();

    retrieveRecordsReq.open('GET', ODataPath + temp, false);
    retrieveRecordsReq.setRequestHeader("Accept", "application/json");
    retrieveRecordsReq.setRequestHeader("Content-Type", "application/json; charset=utf-8");
    retrieveRecordsReq.onreadystatechange = function () 
    {
        if (this.readyState == 4 /* complete */) 
        {
            if (this.status == 200)
            {
                this.onreadystatechange = null; //avoids memory leaks
                var data = JSON.parse(this.responseText, SDK.REST._dateReviver);
                if (data && data.d && data.d.results)
                {
                    SuccessFunc(JSON.parse(this.responseText, SDK.REST._dateReviver).d.results);
                }
            }
            else 
            {
                alert(SDK.REST._errorHandler(this));
            }
        }

    };

     var x = new XMLHttpRequest();
    x.open("GET", result, true);
    x.onreadystatechange = function () 
    {
        if (x.readyState == 4 && x.status == 200)
        {
            var doc = x.responseXML;

            var title = doc.getElementsByTagName("feed")[0].getElementsByTagName("entry")[0].getElementsByTagName("content")[0].getElementsByTagName("m:properties")[0].getElementsByTagName("d:DocumentBody")[0].textContent;
                document.getElementById('image').src ="data:image/png;base64,"+title;

        }

    };
    x.send(null);



   });



    </script>
    </body></html>

我已经删除了按钮标签..现在我希望这个查询在页面加载上发生,但是当我刷新表单时没有任何反应。在我看来,函数在注释加载之前加载。有没有办法让它等待并加载最后一个?

【问题讨论】:

  • 也是给$ is undefined error

标签: javascript jquery dynamics-crm-2011 dynamics-crm dynamics-crm-online


【解决方案1】:

如果您想等待父窗口加载,我认为$(windows).load(myFunction); 应该可以解决问题。

可能是$ is undefined,因为您没有将 jQuery 添加到您的 webressource。

还有一些小错误和不好看的东西:

首先: 你会得到一个错误的服务器 url。 如果你想访问 web 资源中的 Xrm 对象,你总是必须使用 window.parent.Xrm 或者你把它放在一个变量 var Xrm = window.parent.Xrm;

例如:

var Xrm = window.parent.Xrm;
var recordId = Xrm.Page.data.entity.getId();  
var serverUrl = Xrm.Page.context.getServerUrl().toString();

第二: ODataPath 变量未声明。请改用var ODataPath= serverUrl+ODATA_ENDPOINT;。顺便说一句,ODataPath 的值与 OData 无关。它更像是 Dynamics CRM 的 REST-Endpoint。

我的脚本如下所示:

var Xrm, recordId, serverUrl, restEndpointUrl, odataQuery, fullRequestUrl, xmlRequest;

Xrm = window.parent.Xrm;
recordId = Xrm.Page.data.entity.getId();  
serverUrl = Xrm.Page.context.getServerUrl().toString();
restEndpointUrl = serverUrl + "/XRMServices/2011/OrganizationData.svc";
                               ^ I think a '/' was missing there

odataQuery = "/AnnotationSet?$select=DocumentBody,FileName,MimeType,ObjectId&$filter=ObjectId/Id eq guid'" + recordId + "'";
fullRequestUrl = restEndpointUrl + odataQuery;

我也不明白你为什么使用第二个 HttpRequest。

所有这些代码都没有经过测试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-22
    • 1970-01-01
    • 2015-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多