在MS CRM中保存多选复选框选择列表...请帮助

时间:2011-01-06 14:31:30

标签: javascript checkbox dynamics-crm

大家好,我正在尝试在Microsoft Dynamics 4.0中创建一个多选复选框选择列表。我能够使用来自link text的Jim Wangs代码创建复选框 我按照指示操​​作,我只是不确定是否需要将我的选项列表中的值放在此脚本中,如果是这样,我不知道在哪里。我是Java Script的新手,所以我不确定哪些字段需要更改(或者什么颜色意味着什么)。当我插入脚本并输入我的PL和PLV名称时;我能够看到我的帐户论坛屏幕上的复选框和值,但是当我点击保存并关闭时,它将无法保存。以下是图片的链接,作为上述链接中的内容示例。在我的选项列表中,我拥有的值(Value,Value1,Value2)就是这样做的,因为它是一个测试,我可以找出所有内容的去向以及是否需要在脚本中使用这些值。正如您在代码中看到的那样,我没有放入选项列表值,这可能会导致保存错误;我只是不知道要改变什么以及插入它的位置。我没有任何人帮助我解决这个问题。所以任何和所有的帮助将非常感激。请帮忙,

金刚石

  

var PL = crmForm.all.new_picklist;
  var PLV =   crmForm.all.new_picklistvalue;
  PL.style.display =“none”;
  PLV.style.display =“none”; VAR   addDiv = document.createElement(“”);
  PL.parentNode.appendChild(addDiv);
  for(var i = 1; i< PL.options.length;   i ++){var pOption =   PL.options [I]; if(!IsChecked(   pOption.text))
        var addInput = document.createElement(“”);
      var addLabel = document.createElement(“”);

addLabel.innerText = pOption.text;      var addBr = document.createElement(
     

“BR”);       PL.nextSibling.appendChild(addInput);   PL.nextSibling.appendChild(addLabel);   PL.nextSibling.appendChild(addBr);
  函数IsChecked(pText)
  {
      if(PLV.value!=“”){
        var PLVT = PLV.value.split(“||”);
        for(var i = 1; i< PLVT.length; i ++)
        {
           if(PLVT [i] == pText)
              返回true;
           }
      }
          返回false; crmForm.attachEvent(“onsave”);
  function OnSave(){PLV.value   =“br”; var getInput = PL.nextSibling.getElementsByTagName(“input”);   for(var i = 1; i< getInput.length;   我++){
        if(getInput [i] .checked)
       {
         PLV.value + = getInput [i] .nextSibling.innerText +   “||”;
       }}

2 个答案:

答案 0 :(得分:0)

我看过你提到的代码。我不喜欢为这样的东西创建两个字段的想法。我想出了以下代码,它运行得很好。我们使用以下代码

通过我们所有crm 4.0页面上的通用js文件加载这个小帮助函数

以下代码没有直接关系。进一步了解辅助函数和示例用法行。

// Get Generic Scripts from server
try{
    var headID = document.getElementsByTagName("head")[0];
    var GenericHelpers = document.createElement('script');
    GenericHelpers.type = 'text/javascript';
    GenericHelpers.src = '/ISV/GenericScripts/Generics.js';
    GenericHelpers.onload = scriptLoaded;
    GenericHelpers.onreadystatechange = function(){if (GenericHelpers.readyState == 'loaded' || GenericHelpers.readyState == 'complete'){scriptLoaded();}};
    headID.appendChild(GenericHelpers);
}
catch(err){
    alert('Failed to attach specific scripts to this form. Please contact IT Support.\n\n Specific Error: ' + err.description);
}

function scriptLoaded(){
    try{
        //all other code...
    }
    catch(err){
        alert('Form load events failed. Functionality of the form may limited or non-functional. Please contact IT Support.\n\n Specific Error: ' + err.description);
    }
}//scriptLoaded()

代码在它的方法上是完全不同的。基本上我们有一个文本字段,在代码中我们实现了各种选项。最后,我们不再使用这种方法,而不是因为它不起作用,而是我们想要展示的其他事情的复杂性。相反,我们创建了一个嵌入在iframe中的html页面,该页面基本上将信息推回​​到文本字段中。总体最终目标是实体驱动调度程序服务。

因为代码保留在我们的generics.js文件中,我认为它有效,但我不能说我检查过它并且因为它已被写入而没有触及它。很高兴回到它,虽然只是给我发电子邮件。

辅助功能

function mvHelper(oElement){

var divTag = document.createElement("<div id='list_" + oElement.id + "' style='overflow-y:auto; border:1px #6699cc solid; background-color:transparent;' />");

this.mvField = oElement;
this.mvField.style.display = "none";
this.mvField.parentNode.appendChild(divTag);

this.addTickBox = function(str){
    var addInput = null;

    if(oElement.value.indexOf(str)>=0){
        addInput = document.createElement("<input checked='true' type='checkbox' title='" + str + "' style='border:none; width:25px; align:left;' />");
    }
    else{
        addInput = document.createElement("<input type='checkbox' title='" + str + "' style='border:none; width:25px; align:left;' />");
    }

    var addLabel = document.createElement("<label style='width:65px; align:left;' />");

    addLabel.innerText = str;

    addInput.onclick = function(){
        if(this.checked){
            oElement.value += str + ',';
        }
        else{
            oElement.value = oElement.value.replace(str + ',','');
        }
    }
    divTag.appendChild(addInput);
    divTag.appendChild(addLabel);
}//mvHelper(oElement)

使用示例

// crmForm.all.new_daysofweek is a text field in crm itself. 
var daysOfWeek = new mvHelper(crmForm.all.new_daysofweek);
dayOfWeek.addTickBox("Mon");
dayOfWeek.addTickBox("Tue");
dayOfWeek.addTickBox("Wed");
dayOfWeek.addTickBox("Thu");
dayOfWeek.addTickBox("Fri");
dayOfWeek.addTickBox("Sat");
dayOfWeek.addTickBox("Sun");

答案 1 :(得分:0)

只是为了补充我的另一篇文章(并不是说上面的内容并不过于全面)。您应该知道,您发布的代码会将其信息存储在文本字段而不是选择列表中。从技术上讲,将其存储在选择列表中是不可能的,因为数据库根本无法在选择列表字段类型中保存多个值。代码仅使用选择列表来获取它转换的值并将其呈现为复选框,但将选项拖放到文本字段中。

如果您需要/想要,您也可以使用html标签在这里创建自己的风格。

看到你的一些其他帖子,并认为这可能是关于代码如何工作的错误概念。