我试图在2016年禁用帐户查找时的视图选择器。
代码工作正常我的意思是我没有收到任何错误,但代码无法找到" parentaccountid"的特定DIV。
但是当代码试图获取DIV的元素时,它会返回{null} - document.getElementByid(" parentaccountid");
我的代码在机会页面加载时运行。
即使在这一步,我也可以看到特定的DIV元素 - id:parentaccountid
我仍然获得{null}值:
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;
很少提及:
我在加载机会页面时调用DisablePicker方法。 是的,我已经检查过是否存在任何重复的ID,但我没有找到任何ID。
我尝试在加载Account字段时运行此方法,但nope没有响应。
如果在页面加载后从浏览器手动将DIV中的属性disableviewpicker值从0更改为1。打开查找然后它将获取更改值的效果。
我真的不知道为什么它会这样做,我只需要知道我哪里出错了或者它是一个产品错误,但我不认为它是。这是一个非常基本的行为。
PS:对于我的非MS CRM朋友,除了我的JavaScript代码,我无法更改DIV或其他任何内容。
答案 0 :(得分:1)
您的表单代码在与实际CRM表单分开的框架中执行;它在ClientApiWrapper.aspx页面中运行。因此,要从表单脚本中访问要修改的表单元素,表单代码应该parent.document.getElementById
而不是document.getElementById
。
当您使用浏览器的开发工具时,控制台执行的默认框架也不是具有您的表单元素的框架,而且它也不是具有您的表单的框架&#39 ; s代码。对正确帧执行的最简单方法是使用开发工具中的函数来切换帧。在Firefox中,该按钮如下所示:
最简单的方法是将框架设置为ClientApiWrapper.aspx框架,因为它可以访问表单上加载的库以及CRM客户端API。