自定义事件处理程序 - Dynamics crm online

时间:2016-01-08 12:40:36

标签: javascript dynamics-crm

我对Dynamics crm 2015在线有要求:

  1. 我在自定义实体上有查找和子网格。
  2. 当用户点击显示搜索框的“搜索”按钮时,我希望使用查找字段值预先填充搜索,以便保存用户免于复制/粘贴或将查找值键入搜索框。
  3. 到目前为止我尝试了什么! 我编写了一个JavaScript,其中我尝试在子网格上捕获'+'按钮的事件,在'gridname_addImageButton'id上使用'addEventListener',但事件未被捕获。这对于正常的Web开发来说是非常基本的东西,但不会发生在动态crm上。

    What I am trying to achieve!

    更新 这是网格上出现的“+”按钮的HTML。

    <a action="tec|ManyToMany|SubGridStandard|Mscrm.AddExistingRecordFromSubGridAssociated" tabindex="1340"
    title="Add record." class="ms-crm-ImageStrip-addButton" style="display: block; cursor: pointer;"
    onclick="return false;" id="tec_addImageButton" href="#">
      <img class="ms-crm-add-button-icon" title="Add Experlogix Model record." alt="Add record."
      id="Tec_addImageButtonImage" src="/_imgs/imagestrips/transparent_spacer.gif?ver=-893257913" />
    </a>
    

    这是我试过的javascript:

    var elem = document.getElementById('tec_addImageButton'); 
    elem.addEventListener('click',myFunc(),false); 
    

    我错过了什么? 问候, 莫米

3 个答案:

答案 0 :(得分:1)

CRM表单不是“正常的Web开发”,因为该产品不支持直接的DOM操作。允许的唯一操作是使用CRM的Xrm.Page对象完成的操作。 SDK中记录了使用Xrm.Page的一般方法:https://msdn.microsoft.com/en-us/library/gg328261.aspx

具体来说,您期待add a custom filter to a lookup,可以使用以下代码完成:

Admin/System/User/API

其中Xrm.Page.getControl(arg).addCustomFilter(filter, entityLogicaName)是一个带有有效FetchXML过滤器的字符串,即:

filter

您可以在OnLoad事件中调用addCustomFilter,也可以使用PreSearch event handler添加过滤器:

<filter type="and"> <condition attribute="new_somefieldname" operator="eq" value="somevalue" /> </filter>

对于这个完全实现的示例,请归功于http://missdynamicscrm.blogspot.com/2014/08/crm-2013-using-addcustomfilter-to-get-filtered-lookup-field-based-on-linked-entity.html

Xrm.Page.getControl(arg).addPreSearch(handler)

答案 1 :(得分:0)

确保事件附加到锚点,并在添加事件侦听器时添加不带括号()的函数,如下例所示。

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
    <script type="text/javascript">

        window.onload = function () {
            document.getElementById('tec_addImageButton').addEventListener('click', myFunc, false)
        }  

        function myFunc() {
            alert("testing");
        }
    </script>
</head>
<body>
    <a id="tec_addImageButton" href="#">test button</a>
</body>
</html>

答案 2 :(得分:0)

  • 您必须将html脚本作为Web资源放在解决方案中。
  • 在表单中插入HTML
  • 您必须将js脚本作为Web资源放在解决方案中。
  • 您必须在表单库上发布框架:web资源
  • 你必须在Event Handler上发布框架 - &gt;表格 - &gt; onload添加:myObj.init()

if (typeof (myObj) == "undefined") {
    myObj = {};
}
(function () {

    myObj.init = function () {
		Xrm.Page.ui.controls.get('id_iframe').getObject().onload= function() {
			var el = Xrm.Page.ui.controls.get('id_iframe').getObject().contentWindow.document.getElementById('myLabel');
	        addEvent(el, 'click', function () { alert('Evento'); });
		};
    }

    function addEvent(element, evnt, funct) {
        if (element.attachEvent)
            return element.attachEvent('on' + evnt, funct);
        else
            return element.addEventListener(evnt, funct, false);
    }

})();
<HTML>
  <BODY onload="SetupEvents()">
    <label id="myLabel" >Click me</label>
</HTML>