【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<SelectOption> getSelectOptions(){
    sObjectField sof Schema.TestObject__c.SelectField__c;
    Schema.DescribeFieldResult dfr = sof.getDescribe();
    List<SelectOption> Options = new List<SelectOption>();
    for (Schema.PicklistEntry entry : dfr.getPicklistValues()) {
        Options.add(new SelectOption(entry.getValue(), entry.getLabel()));
    }
    return optionList;
}
今回はこの方法を使っていない選択リストで、リスト項目が削除されたために発生しました。
関連する部分も気をつけなければいけませんね。
No comments.