我在联系表单中添加了一个html资源,其中只包含一个小图片,以便将其放在联系人字段旁边。当用户点击它时,它会启动一个javascript函数,我想在其中获取表单特定字段的值。该字段是联系实体的属性。 这是HTML网络资源:
<html>
<head>
<style type="text/css">
body
{
margin: 0;
padding: 0;
}
</style>
<script type="text/javascript">
function call() {
var phoneNumber = window.parent.Xrm.Page.getAttribute("mobilephone").getValue();
}
</script>
<meta>
</head>
<body style="word-wrap: break-word;">
<img onmouseover="this.style.cursor='pointer';" src="/webresources/new_/image/image.png" onclick="call()">
</body>
</html>
我也尝试过如下获取数据:
window.parent.Xrm.Page.data.entity.attributes.get("telephone1").getValue()
但它也不起作用: 无法读取null的实体
问题是getAttribut返回null,尽管我想要的实体字段。它总是 未定义 有人有想法吗?
答案 0 :(得分:1)
GetGlobalContext function and ClientGlobalContext.js.aspx (client-side reference)
使用Web资源编程时使用GetGlobalContext函数 获取上下文信息的访问权限。获取GetGlobalContext HTML网络资源中的函数,包括对引用的引用 ClientGlobalContext.js.aspx。
包含引用时,可以使用GetGlobalContext函数 到位于Web根目录的ClientGlobalContext.js.aspx页面 资源目录。
更多建议:
尝试从window
中删除window.parent.Xrm.Page
。
添加到表单的HTML Web资源无法使用定义的全局对象 由表单中加载的JavaScript库。 HTML网络资源可能 与表单中的Xrm.Page或Xrm.Utility对象进行交互 使用parent.Xrm.Page或parent.Xrm.Utility ,但是使用全局对象 使用父级无法访问由表单脚本定义的内容。您 应该加载HTML Web资源所需的任何库 HTML Web资源,因此它们不依赖于加载的脚本 形式。
Use IFRAME and web resource controls on a form
尝试从表单脚本传递输入。
对于网页(HTML)网络资源,请使用setSrc方法进行操作 查询字符串参数直接。
在HTML页面中,可以使用以下方法访问参数 JavaScript中的window.location.search属性。
Sample: Pass multiple values to a web resource through the data parameter
答案 1 :(得分:0)
如果您不能采用优秀的James Wood解决方案,请尝试:
<强> 1。您必须检查您的商品是否在iframe中
您可以从以下脚本中获得灵感:
Xrm.Page.ui.controls.get('id_iframe').getObject().onload= function() {
var element = Xrm.Page.ui.controls.get('id_iframe').getObject().contentWindow.document.getElementById('id_element_inside_iframe');
console.log(element);
};
Xrm.Page.ui.controls.get('id_iframe')。getObject():返回HTML对象iFrame
<强> 2。你可能会遇到一个叫做问题的事件。
您可以从以下脚本中获得灵感:
<HTML>
<BODY onload="SetupEvents()">
<label id="myLabel" >Click me</label>
</BODY>
<SCRIPT>
function DoTheThing() { alert('thing was done'); }
function SetupEvents() {
addEvent( document.getElementById('myLabel'),'click', function () { DoTheThing(); });
}
function addEvent(element, evnt, funct){
if (element.attachEvent)
return element.attachEvent('on'+evnt, funct);
else
return element.addEventListener(evnt, funct, false);
}
</SCRIPT>
</HTML>
答案 2 :(得分:0)
我认为这是一个Turbo Forms问题,因为Turbo Forms并行加载Javascript并加载 ClientGlobalContext.js.aspx 作为最后一项。 IFrame包含 OnReadyStateCompleted 事件,我建议您在该事件下添加以下代码。
function call() {
var phoneNumber = window.parent.Xrm.Page.getAttribute("mobilephone").getValue();
}
答案 3 :(得分:0)
让我们说你的网络资源是根标签...然后你必须首先添加ClientGlobalContext参考
<script src="ClientGlobalContext.js.aspx" type="text/javascript"></script>
执行此操作后,您应该能够通过首先删除"window"
部分来获取您的函数的属性值
<script type="text/javascript">
function call() {
var phoneNumber = parent.Xrm.Page.getAttribute("mobilephone").getValue();
}
</script>