2016-04-22 39 views
0

私は標準オプションセットフィールドをMS CRM 2015オンラインのチェックボックスに変換するためにオンラインで見つかったコードを使用しています。それは私に上記のエラーを与え続ける。ここで未定義またはnull参照のプロパティ 'new_textholder'を取得できません

はコードです:

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" をとります。それはフォーム上に定義されており、私はそれを正しく書いていることを確認するためにチェックしました。

何が問題なのですか?

ありがとうございました!

+0

そのコードにnew_textholderはありますか? – epascarello

+0

はありません。イベントハンドラOnLoadを定義する際に、フィールドから使用されているパラメータを定義しました。 param2(関数MultiPickList3のパラメータのリストにある)は "new_textholder"をとります。 –

+0

このコードは、サポートされておらず、Dynamics CRMの新しいバージョンまたはロールアップの更新がリリースされたときに破損する可能性のあるDOMを使いこなしています。私のアドバイスはこれに何の努力もしないことです。代わりに、HTML Webリソースを設計してフォームに埋め込むことをお勧めします。 –

答えて

0

このエラーは、crmForm.all [plText]行から発生している可能性があります。私はあなたの組織が最近のものだと思っていますが、古い4.0 apiのサポートはもはや存在しません。つまり、allオブジェクトがもはや利用できなくなり、そのエラーが発生します(plTextはparam2の値に設定されます)。このコードを変更して2015フォームで動作させることは可能かもしれませんが、現時点では2015個の組織を利用できるわけではありません。

+0

問題の修正方法を教えてください。 –

+0

2015フォームを利用できなければ、言うことは難しいでしょう。まず、次のリンクを確認してください:https://www.google.com/search?q=upgrade+crm+4.0+javascript+to+2011 – Polshgiant

関連する問題