MSCRM2011用JS直接调用Lookup查找页面并加入自定义筛选器

在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 将不再可用。

posted @ 2014-08-28 16:11  飞雷神  阅读(514)  评论(0编辑  收藏  举报