无法获取未定义或空引用的属性“new_textholder”

时间:2016-04-22 15:16:11

标签: javascript null undefined-reference dynamics-crm-2015

我正在使用我在网上找到的代码将标准选项集字段转换为MS CRM 2015在线的复选框。它一直给我上述错误。

以下是代码:

function MultiPickList3(param1, param2, param3,param4,param5) 
{ 
try 
{ 
var fn = arguments.callee.toString().match(/function\s+([^\s\(]+)/);  

if (param1==null || param2==null) 
{ 
alert("Error: Parameter missing. \n Format: <optionset fieldname> ,  <option value text field> ,  [<option header>], [<select color>]   ,   [<deselect color>] ,  \n ["+"Function="+fn[1]+"]"  ); 
return true; 
} 

var tparamtype=Xrm.Page.data.entity.attributes.get(param1).getAttributeType(); 
if (tparamtype!="optionset") 
  { alert (param1+"(first parameter) should be of type optionset \n"+"[function="+fn[1]+"]"); 
    return true; 
  } 

var tparamtype=Xrm.Page.data.entity.attributes.get(param2).getAttributeType(); 
if (tparamtype!="memo") 
  { alert (param2+"(second parameter) should be of type memo (text with mutiline) \n[function="+fn[1]+"]"); 
    return true; 
  } 

var plOptions=param1;       
var plText=param2;     
var plMenuItem="View Selected List"; 
var SelectedList_orig = crmForm.all[plText]; 
var FullList=crmForm.all[plOptions]; 

var SelCtr=-1; 
var new_selColor="orange"; 
var new_deSelColor="white"; 
if (param4!=null) 
    new_selColor=param4; 
if (param5!=null) 
    new_deSelColor=param5; 

var SelectedList =SelectedList_orig.value.split("\r\n"); 
crmForm.all[plText].style.display="none"; 

if(FullList!=null && SelectedList!=null) 
    { 
     initColor(); 
     if (param3!=null && param3!="") 
        { 
             plMenuItem=param3; 
        } 
   else 
       {  
          plMenuItem=FullList.options[0].text; 
           changeColor("grey",0); 
       } 

     for (var ctr=0; ctr<SelectedList.length;ctr++) 
         { 
           selCtr=SelectedIndex(SelectedList[ctr]); 
             if (selCtr >-1) 
               {        
                   changeColor(new_selColor,selCtr); 
                } 
         } 
     } 

function SelectedIndex(selectedText) 
{ 
var FullListText; 
for (var ctr1=0; ctr1<FullList.options.length;ctr1++) 
    { 
      FullListText=FullList.options[ctr1].text; 
      if ( FullListText==selectedText) 
         { 
            return ctr1; 
         } 
     } 
return -2; 
} 

crmForm.all[plOptions].attachEvent('onchange', OnChangePL); 

function OnChangePL()  
{ 
var SelCtr=-1; 
var sel=crmForm.all[plOptions].SelectedText; 

if (sel==plMenuItem) 
return; 

SelCtr=SelectedIndex(sel); 
var SelColor="grey";  
SelColor=crmForm.all[plOptions][SelCtr].style.backgroundColor; 

if (SelColor==new_selColor) 
     { 
       changeColor(new_deSelColor,SelCtr); 
       saveChanges(sel,selCtr,"del"); 
    } 
else 
    { 
       changeColor(new_selColor, SelCtr);              
       saveChanges(sel,selCtr,"add"); 
    } 
} 

function saveChanges(p_selText,p_SelCtr,p_mode) 
{ 
switch(p_mode) 
{ 
    case "add": 
            SelectedList.push(p_selText); 
            break; 
    case "del": 
            for (var ctr2=0;ctr2<SelectedList.length;ctr2++) 
                 { 
                  if (SelectedList[ctr2]==p_selText) 
                       { 
                         SelectedList.splice(ctr2,1); 
                         break; 
                       }  
                  } 
              break; 
} 
Xrm.Page.getAttribute(plText).setValue(SelectedList.join("\r\n"));   
} 

function initColor() 
{ 
      for (var ctr3=0; ctr3<FullList.options.length;ctr3++) 
           {             changeColor(new_deSelColor, ctr3);   } 
} 

function changeColor(newColor, newCtr) 
{ 
      crmForm.all[plOptions][newCtr].style.backgroundColor=newColor; 
} 

} 
catch (e) 
         {  alert (e.description);} 
} 

param2取字段“new_textholder”,这是一个多行文本字段。它在表单上定义,我已经检查以确保我正确地写它。

可能是什么问题?

谢谢!

1 个答案:

答案 0 :(得分:0)

此错误可能来自crmForm.all [plText]行。我猜你的组织已经足够支持旧的4.0 api不再存在,这意味着all对象不再可用,这会给你这个错误(plText被设置为值param2)。您可能可以修改此代码以使用您的2015表格,但我目前没有可用的2015年组织,因此我无法肯定地说。