gpt4 book ai didi

javascript - 最后在 CRM 表单中加载 JavaScript 事件

转载 作者:行者123 更新时间:2023-12-03 12:07:03 25 4
gpt4 key购买 nike

我在 Notes 中保存了一张图像,与 CRM Online 2013 自定义实体中的每个表单一起保存。我使用以下代码来查询图像并将其显示在表单上 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>

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

最佳答案

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

也许$ is undefined因为你没有将 jQuery 添加到你的 webressource 中。

还有一些小错误和不吸引人的地方:

第一:您将得到错误的服务器 URL。如果您想访问网络资源中的 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 端点。

我的脚本如下所示:

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。

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

关于javascript - 最后在 CRM 表单中加载 JavaScript 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25139551/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com