zoukankan      html  css  js  c++  java
  • mscrm Picklist 实现多选

    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
      forvar 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; 25px; align:left;' />" );
        
    else
          
    var addInput = document.createElement("<input type='checkbox' checked='checked' style='border:none; 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("||");
          
    forvar 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");
      
        
    forvar i = 0; i < getInput.length; i++ )  
        {   
          
    if( getInput[i].checked)
          {
            PLV.value 
    += getInput[i].nextSibling.innerText + "||";
          }
        }  
      } 
    }
  • 相关阅读:
    ini 文件
    基元类型、引用 类型与值类型
    C#的 is 和 as 类型转换
    MVC 项目中为什么会有两个web.config
    Linux下安装SVN服务端小白教程
    测试博文中添加可执行JS代码
    坑爹坑娘坑祖宗的87端口(记一次tomcat故障排查)
    fsfds
    高斯混合模型Gaussian Mixture Model (GMM)
    ggplot2绘制概率密度图
  • 原文地址:https://www.cnblogs.com/seerlin/p/1868820.html
Copyright © 2011-2022 走看看