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