【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.