MS CRM復選框的解決方案

 

CRM 4.0 里的下拉列表控件(PickList)只能存储单一的值,虽然我们可以通过设置 crmForm.all.new_picklist.multiple = true; 来实现多选功能,但用户必须按住CTRL键来逐个选择,效果并不好。我现在这个项目需要一些能够多选的PickList,所以我打算写一个通用的能被用户 认可的控件,并且Keep It Simple and Generic! 便于修改和重用。

使 用方法非常简单:

1. 创建一个标准的Picklist attribute,并且填入所有的列表项,放在窗体上。比如叫做:new_picklist;
2. 创建一个nvarchar attribute,放在窗体上,并且隐藏标签。比如叫做:new_picklistvalue,这个attribute是用来存储picklist的选 中项的;
3. 把下列代码放到窗体OnLoad() 里面。 

tip: 程序的思路是在窗体上绘制一个CheckBox样式的下拉列表,从picklist里取值,从picklistvalue里取选种的值。这种做法其实没有 在picklist里保存任何值,所以对于高级搜索来讲不会搜索到任何内容,建议设置picklist的搜索为“禁止”,同时让用户搜索 picklistvalue里的值。虽然用户不得不手工输入要搜索的内容,但是可以保存搜索设置。 

 

/*
  Checkbox style Multi-Select Picklist
  author: Jim Wang @ January 2009
  http://jianwang.blogspot.com
  http://mscrm.cn
*/

//  PL - the picklist attribute; PLV - used to save selected picklist values 
var  PL  =  crmForm.all.new_picklist;
var  PLV  =  crmForm.all.new_picklistvalue;

if ( PL  !=  null  &&  PLV  !=  null  )
{
  PL.style.display  =  " none " ;
  PLV.style.display  =  " none " ;
  
  
//  Create a DIV container 
   var  addDiv  =  document.createElement( " <div style='overflow-y:auto; height:80px;border: 1px #6699cc solid;background-color: #ffffff;' /> " );
  PL.parentNode.appendChild(addDiv);
  
  
//  Initialise checkbox controls
   for var  i  =  1 ; i  <  PL.options.length; i ++  )  
  { 
    
var  pOption  =  PL.options[i];
    
if ! IsChecked( pOption.text ) )
      
var  addInput  =  document.createElement( " <input type='checkbox' style='border:none; width:25px; align:left;' /> "  );
    
else
      
var  addInput  =  document.createElement( " <input type='checkbox' checked='checked' style='border:none; width:25px; align:left;' / > "  );
  
    
var  addLabel  =  document.createElement(  " <label /> " );
    addLabel.innerText  =  pOption.text;
  
    
var  addBr  =  document.createElement(  " <br /> " );
  
    PL.nextSibling.appendChild(addInput);
    PL.nextSibling.appendChild(addLabel);
    PL.nextSibling.appendChild(addBr);
  }
  
  
//  Check if it is selected
   function  IsChecked( pText )
  {
    
if (PLV.value  !=  "" )
    {
      
var  PLVT  =  PLV.value.split( " || " );
      
for var  i  =  0 ; i  <  PLVT.length; i ++  )  
      { 
        
if ( PLVT[i]  ==  pText )
          
return  true ;
      }  
    }
    
return  false ;
  }
  
  
//  Save the selected text, this filed can also be used in Advanced Find
  crmForm.attachEvent(  " onsave "  , OnSave);
  
function  OnSave()
  {
    PLV.value  =  "" ;
    
var  getInput  =  PL.nextSibling.getElementsByTagName( " input " );
  
    
for var  i  =  0 ; i  <  getInput.length; i ++  )  
    {   
      
if ( getInput[i].checked)
      {
        PLV.value  +=  getInput[i].nextSibling.innerText  +  " || " ;
      }
    }  
  } 
}

你可能感兴趣的:(rm)