1

我正在尝试在 Dynamics CRM 中的表单上制作一个按钮,以便 onClick 按钮显示一个对话框。我使用的JS代码如下:

function addButton(attributename) {
if (document.getElementById(attributename) != null) {
    var sFieldID = "field" + attributename;
    var elementID = document.getElementById(attributename + "_d");
    var div = document.createElement("div");
    div.style.width = "19%";
    div.style.textAlign = "right";
    div.style.display = "inline";
    elementID.appendChild(div, elementID);
    div.innerHTML = '<button id="' + sFieldID + '"  type="button" style="margin-left: 4px; width: 100%;" ><img src="/_imgs/ico_16_4210.gif" border="0" alt="Dial this number"/></button>';
    document.getElementById(attributename).style.width = "80%";
    document.getElementById(sFieldID).onclick = function () {onbuttonclick(); };
  }
}

    function onbuttonclick() { alert('Hi');}

这个函数是用一个 JS Web 资源编写的,它由联系人实体的表单 onload 事件触发。每当触发表单加载事件时,我都会在对话框中收到以下错误:

此字段的自定义事件出错。字段:窗口事件:加载错误:未定义

请指导我解决问题。代码取自示例示例。

4

1 回答 1

0

这仅仅意味着您的 JavaScript 中某处有错误。

一个更好的解决方案是使用功能区按钮,并让功能区按钮调用 javascript,而不是弄乱 DOM(这是不受支持的)。将以下代码放入您的ribbondiffxml:

<Actions>
    <JavaScriptFunction Library="$[js library name]" FunctionName="[js function name]" />
</Actions>

具体来说,这应该进入 CommandDefinitionNode。
这是我通过javascript打开对话框的示例:

Ribbon.openDialogProcess = function (dialogId, EntityName, objectId) {
var url = Xrm.Page.context.getClientUrl() +
  "/cs/dialog/rundialog.aspx?DialogId=" +
  dialogId + "&EntityName=" +
  EntityName + "&ObjectId=" +
  objectId;
var width = 400;
var height = 400;
var left = (screen.width - width) / 2;
var top = (screen.height - height) / 2;
window.open(url, '', 'location=0,menubar=1,resizable=0,width=' + width + ',height=' + height + ',top=' + top + ',left=' + left + '');
}

所以只需在 RibbonDiffXML 中调用该方法。

于 2015-09-11T18:50:53.470 回答