Javascript 正在MS CRM中保存多选复选框选择列表。。。请帮忙

Javascript 正在MS CRM中保存多选复选框选择列表。。。请帮忙,javascript,checkbox,dynamics-crm,Javascript,Checkbox,Dynamics Crm,大家好,我正在尝试在Microsoft Dynamics 4.0中创建一个多选复选框选择列表。我能够使用Jim Wang的代码创建复选框 我遵循了说明,我只是不确定是否需要将选择列表中的值放在这个脚本中,如果需要,我不知道放在哪里。我是Java脚本的新手,所以我不确定哪些字段需要更改(或者什么颜色意味着什么)。当我插入脚本并输入我的PL和PLV名称时;我可以看到我的帐户论坛屏幕上的复选框和值,但当我点击保存并关闭时,它将不会保存。下面是一个图片链接,作为上面链接的示例。在我的选择列表中,我拥有的

大家好,我正在尝试在Microsoft Dynamics 4.0中创建一个多选复选框选择列表。我能够使用Jim Wang的代码创建复选框 我遵循了说明,我只是不确定是否需要将选择列表中的值放在这个脚本中,如果需要,我不知道放在哪里。我是Java脚本的新手,所以我不确定哪些字段需要更改(或者什么颜色意味着什么)。当我插入脚本并输入我的PL和PLV名称时;我可以看到我的帐户论坛屏幕上的复选框和值,但当我点击保存并关闭时,它将不会保存。下面是一个图片链接,作为上面链接的示例。在我的选择列表中,我拥有的值是(Value,Value1,Value2),之所以这样做是因为这是一个测试,让我知道所有的东西都去了哪里,以及这些值是否需要在脚本中。正如您在代码中所看到的,我没有在picklist中输入值,这可能导致save错误;我只是不知道要更改什么以及在哪里插入它。我没有幸有人帮我做这件事。因此,任何和所有的帮助都将不胜感激。请帮忙

钻石

var PL=crmForm.all.new_选取列表
无功电压= crmForm.all.new_picklistvalue
PL.style.display=“无”
PLV.style.display=“无”;变量 addDiv=document.createElement(“”)
PL.parentNode.appendChild(addDiv)
对于(var i=1;i var addInput=document.createElement(“”;
var addLabel=document.createElement(“”)

“br”); PL.nextSibling.appendChild(addInput); PL.nextSibling.appendChild(addLabel); PL.nextSibling.appendChild(addBr);
}已检查函数(pText)
{
如果(PLV.value!=“”){
变量PLVT=PLV.value.split(“| |”);
对于(变量i=1;i {
如果(PLVT[i]==pText)
返回true;
}
}
返回false;}crmForm.attachEvent(“onsave”)
函数OnSave(){PLV.value =“br”;var getInput=PL.nextSibling.getElementsByTagName(“输入”); 对于(var i=1;i if(getInput[i].选中)
{
PLV.value+=getInput[i].nextSibling.innerText+ “||”;
}}


我看过你提到的代码。我不喜欢为这样的东西创建两个字段的想法。我想出了下面的代码,效果非常好。我们使用下面的代码通过通用js文件在所有crm 4.0页面上加载这个小助手函数

下面的代码没有直接关系。请进一步查看帮助器函数和示例用法行

// 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)

只是补充我的另一篇文章(并不是说上面的内容一开始就不够全面)。您应该知道,您发布的代码将其信息存储在文本字段中,而不是拾取列表中。从技术上讲,无法将其存储在拾取列表中,因为数据库无法在拾取列表字段类型中保存多个值。代码仅使用拾取列表获取其转换的值和渲染为复选框,但将选项拖放到文本字段中

如果需要/想要,您还可以在此处使用html标记创建自己的样式

看到你的一些其他帖子,我想这可能是对代码工作原理的误解

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");