【问题标题】:Custom event handler - Dynamics crm online自定义事件处理程序 - Dynamics crm online
【发布时间】:2016-04-13 03:43:00
【问题描述】:

我对 Dynamics crm 2015 online 有要求:

  1. 我有一个自定义实体的查找和子网格。
  2. 当用户单击显示搜索框的“搜索”按钮时,我希望使用查找字段值预先填充该搜索,以便用户免于复制/粘贴或将查找值键入搜索框。

到目前为止我已经尝试过! 我编写了一个 JavaScript,在其中我试图捕捉子网格上的“+”按钮事件,在“gridname_addImageButton”id 上使用“addEventListener”,但该事件没有被捕捉到。这对于正常的 Web 开发来说是非常基本的东西,但不会发生在动态 crm 上。

更新 这是出现在网格上的“+”按钮的 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); 

我错过了什么? 问候, 妈咪

【问题讨论】:

  • 好吧,也许用于获取加号按钮的 css 选择器是错误的,因此单击事件未正确附加。没有看到 DOM 或代码就不能说太多。
  • 您想要实现的是不受支持的自定义,可能会在产品的未来版本中中断。而且,如果不共享一些代码,就很难判断出了什么问题。
  • 大家好,我已经更新了我的问题并添加了我使用的 html 和 js 代码。

标签: javascript dynamics-crm


【解决方案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,这可以通过代码完成:

Xrm.Page.getControl(arg).addCustomFilter(filter, entityLogicaName)

其中filter 是具有有效 FetchXML 过滤器的字符串,即:

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

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

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

感谢http://missdynamicscrm.blogspot.com/2014/08/crm-2013-using-addcustomfilter-to-get-filtered-lookup-field-based-on-linked-entity.html 这个完全实现的示例。

function onLoad()
{
    addEventHandler();
}

function addEventHandler() {
    // add the event handler for PreSearch Event
    Xrm.Page.getControl("parentcontactid").addPreSearch(addFilter);
}

function addFilter() {
   //find contact contains this @example.com
   var email = "%@example.com%";

    //create a filter xml
   var filter = "<filter type='and'>" +
                "<condition attribute='emailaddress1' operator='like' value='" + email + "'/>" +
                 "</filter>";

    //add filter
    Xrm.Page.getControl("parentcontactid").addCustomFilter(filter);
}

【讨论】:

    【解决方案2】:

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

    <!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>
    

    【讨论】:

      【解决方案3】:
      • 您必须将 html 脚本作为 Web 资源放入您的解决方案中。
      • 在表单中插入 HTML
      • 您必须将 js 脚本作为 Web 资源放入您的解决方案中。
      • 您必须在表单库上设置框架:网络资源
      • 您必须在 Event Handler -> Form -> onload Add: 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>

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多