【Salesforce】INVALID_OR_NULL_FOR_RESTRICTED_PICKLIST, FieldLabel:bad value for restricted picklist field: ‘ListValue’: [FieldName__c]

【Salesforce】INVALID_OR_NULL_FOR_RESTRICTED_PICKLIST, FieldLabel:bad value for restricted picklist field: ‘ListValue’: [FieldName__c]

Visualforceで選択リストを使用した際に、このようなエラーが発生しました。

INVALID_OR_NULL_FOR_RESTRICTED_PICKLIST, FieldLabel:bad value for restricted picklist field: ListValue: [FieldName__c]

無効な値かNULLが選択リスト値に設定されたとのこと。

選択リスト値項目の「値セットで定義された値に選択リストを制限します。」にチェックが入っている場合に起きるようです。

イメージとしてはこんな感じです。

1月から12月まで作るつもりが、0月から作っています。

public TestObject__c testObj{get;set;}

public List<SelectOption> getSelectOptions(){

    List<SelectOption> optionList;
    
    // リストを作成する
    optionList = new List<SelectOption>();
    optionList.add('', '');
    for(Integer i = 0; i <= 12; i++){
    
        String value = String.valueOf(i);
        String label = value + '月';
        
        optionList.add(value, label);
    }
    
    return optionList;
}

こちらはVisualforce側です。

<apex:selectList value="{!testObj.SelectField__c}" >
  <apex:selectOptions value="{!SelectOptions}" >
</apex:selectList>

カスタムオブジェクト「TestObject__c」の「SelectField__c」フィールドには1~12までしか定義していません。

その状態で0を設定すると上のようなエラーが発生します。

特殊な処理を行う場合を除いて、Schemaから作成した方が安全ではありますね。

public TestObject__c testObj{get;set;}

public List&lt;SelectOption&gt; getSelectOptions(){

    sObjectField sof Schema.TestObject__c.SelectField__c;
    Schema.DescribeFieldResult dfr = sof.getDescribe();

    List&lt;SelectOption&gt; Options = new List&lt;SelectOption&gt;();

    for (Schema.PicklistEntry entry : dfr.getPicklistValues()) {

        Options.add(new SelectOption(entry.getValue(), entry.getLabel()));
    }

    return optionList;
}

今回はこの方法を使っていない選択リストで、リスト項目が削除されたために発生しました。

関連する部分も気をつけなければいけませんね。

 

No comments.

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です