在MSCRM2011中,可以用Xrm.Page.getControl("字段名").addCustomView(viewId, entityName, viewDisplayName, fetchXml, layoutXml, isDefault)给Lookup控件的查找页面加入自定义筛选器。
使用以下代码可在没有Lookup控件的情况下,直接调用查找页面并加入自定义筛选器:
var entityName = "account"; //实体名
var etc = 1; //实体ObjectTypeCode
var CustomView = { name: "自定义视图", recordType: etc };
CustomView.id = "{65EC9B45-EE81-4F89-BAF6-E8603FF8E1E4}"; //自定义视图id(可随意,不要与系统的重复即可)
CustomView.fetchXml = //不会写fetchXml可用高级查找进行帮助
"<fetch version=\"1.0\" output-format=\"xml-platform\" mapping=\"logical\" distinct=\"false\">" +
"<entity name=\"" + entityName + "\">" +
"<attribute name=\"name\" />" +
"<attribute name=\"ownerid\" />" +
"<filter type=\"and\">" +
"<condition attribute=\"name\" operator=\"eq\" value=\"客户名称\" />" +
"</filter>" +
"</entity>" +
"</fetch>";
CustomView.layoutXml = //显示的视图
"<grid name='resultset' icon='1' preview='1'>" +
"<row name='result' id='" + entityName + "id'>" +
"<cell name='name' width='200' />" +
"<cell name='ownerid' width='200' />" +
"</row>" +
"</grid>";
var url = Xrm.Page.context.prependOrgName("/_controls/lookup/lookupinfo.aspx")
+ "?AllowFilterOff=0" //是否允许关闭筛选器
+ "&objecttypes=" + etc //实体ObjectTypeCode
+ "&DefaultViewId=" + CustomView.id //默认视图id
+ "&DisableQuickFind=1" //是否禁用搜索按钮
+ "&DisableViewPicker=1" //是否禁用视图选择
+ "&LookupStyle=single" //单选还是多选
+ "&ShowNewButton=0" //是否显示新建按钮
+ "&ShowPropButton=1" //是否显示属性按钮
+ "&browse=0"; //如果设为0,则关闭并隐藏筛选器
var args = { availableViews: null, customViews: [], items: [] };
args.customViews.push(CustomView);
var retObj = window.showModalDialog(url, args, "dialogWidth:600px;dialogHeight:600px;help:0;status:1;scroll:0;center:1;resizable:yes;");
返回值中,主数据可用 retObj.items[0].id 和 retObj.items[0].name 获取。
其他数据以Json格式返回,可惜的是关联字段只有显示值,没有GUID(如ownerid只有用户名,没有用户GUID)
if (retObj != undefined)
{
var accountid = retObj.items[0].id; //客户GUID
var accountName = retObj.items[0].name; //客户名称
//由于视图列中定义了客户名称列,也可如下获取客户名称
//var accountName = eval("(" + retObj.items[0].keyValues + ")").name.value;
var ownerName = eval("(" + retObj.items[0].keyValues + ")").ownerid.value; //负责人姓名
}
注:如果在自定义的面中要调用Lookup的查找页面并加入筛选器,
需注意URL地址在AD和IFD模式部署中可能有所差别,以上代码中
的 Xrm.Page.context.prependOrgName 将不再可用。