在MS CRM

时间:2016-04-24 19:00:42

标签: javascript html5 dynamics-crm dynamics-crm-2013 dynamics-crm-2015

我试图在2016年禁用帐户查找时的视图选择器。

代码工作正常我的意思是我没有收到任何错误,但代码无法找到" parentaccountid"的特定DIV。

我在Elements中可以看到它: enter image description here

但是当代码试图获取DIV的元素时,它会返回{null} - document.getElementByid(" parentaccountid");

enter image description here

我的代码在机会页面加载时运行。

enter image description here 即使在这一步,我也可以看到特定的DIV元素 - id:parentaccountid enter image description here

我仍然获得{null}值:

enter image description here enter image description here

2013年,我看到它工作得很好。 对不起,我没有数据可以在这里分享,但它运行正常。

以下是代码:



function DisablePick()
{
	VULoader();
	
	//call this function from OnLoad handler
	function VULoader(){
		var myLookup1;
              alert("Hello..I am Here");
	      var fetch = "<fetch mapping='logical'>"
             +"<entity name='account'>"             
             +"<attribute name='name'/>"                   
             +"<filter type='and'>" 
            +"<condition attribute='name' operator='eq' value='Blue Yonder Airlines (sample)' />" 
            +"</filter>" 
      +"</link-entity>" 
   +"</entity>" 
+"</fetch>";
		
		myLookup1 = new XrmLookupField("parentaccountid");
		myLookup1.AddLockedView(
			//sViewId
			myLookup1.NewGuid() ,
			//sEntityName
			"account",
			//sViewDisplayName
			"My Locked Custom View",
			//sFilterXml
			fetch,
			//sFilterLayout
			layout(1, "name", "accountid")
				.column("name", 200)
			.toString()
		);
	}

	function XrmLookupField(sId) {
		var xlf = this;
		//control instance
		xlf.Ctl = Xrm.Page.getControl(sId);
		//dom instance
		xlf.Dom = document.getElementById(sId);
		//jquery instance
		xlf.$ = $(xlf.Dom);
	  
		/* 2013 addition --- Inline Control instance --- */
		xlf.$i = $("#" + sId + "_i");
	 
		//use that to disable the view picker
		xlf.DisableViewPicker = function () { 
			/* 2013 addition --- The attribute capitalization changed */
			xlf.SetParameter("disableviewpicker", "1"); 
		}
		//use that to enable the view picker
		xlf.EnableViewPicker = function () { 
			/* 2013 addition --- The attribute capitalization changed */
			xlf.SetParameter("disableviewpicker", "0");  
		}
		 
		//set undocumented attributes
			xlf.SetParameter = function (sName, vValue) { 
			xlf.$.attr(sName, vValue);  
	 
			/* 2013 addition --- Also change the inline contorl value */
			xlf.$i.attr(sName, vValue);
		}   
		 
		//add locked view
		xlf.AddLockedView = function (sViewId, sEntityName, sViewDisplayName, sFilterXml, sFilterLayout) {
			//first enable the view picker
			xlf.EnableViewPicker();
			//add the custom view (last parameter set the view as default)
			xlf.Ctl.addCustomView(sViewId, sEntityName, sViewDisplayName, sFilterXml, sFilterLayout, true);
			//lock the view picker
			xlf.DisableViewPicker();
		}
		//create new guid
		xlf.NewGuid = function () {
			var d = new Date().getTime();
			var guid = '{xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx}'.replace(/[xy]/g, function (c) {
				var r = (d + Math.random() * 16) % 16 | 0;
				d = Math.floor(d / 16);
				return (c == 'x' ? r : (r & 0x7 | 0x8)).toString(16);
			});
			return guid;
		}
	}
}
&#13;
&#13;
&#13;

很少提及:

我在加载机会页面时调用DisablePicker方法。 是的,我已经检查过是否存在任何重复的ID,但我没有找到任何ID。

我尝试在加载Account字段时运行此方法,但nope没有响应。

如果在页面加载后从浏览器手动将DIV中的属性disableviewpicker值从0更改为1。打开查找然后它将获取更改值的效果。

我真的不知道为什么它会这样做,我只需要知道我哪里出错了或者它是一个产品错误,但我不认为它是。这是一个非常基本的行为。

PS:对于我的非MS CRM朋友,除了我的JavaScript代码,我无法更改DIV或其他任何内容。

1 个答案:

答案 0 :(得分:1)

您的表单代码在与实际CRM表单分开的框架中执行;它在ClientApiWrapper.aspx页面中运行。因此,要从表单脚本中访问要修改的表单元素,表单代码应该parent.document.getElementById而不是document.getElementById

当您使用浏览器的开发工具时,控制台执行的默认框架也不是具有您的表单元素的框架,而且它也不是具有您的表单的框架&#39 ; s代码。对正确帧执行的最简单方法是使用开发工具中的函数来切换帧。在Firefox中,该按钮如下所示:

enter image description here

最简单的方法是将框架设置为ClientApiWrapper.aspx框架,因为它可以访问表单上加载的库以及CRM客户端API。