Задача такая: юзер заполняет поля объекта (которые сам определил) и нажимает кнопку Save. Появляеться сообщение, что необходимо заполнить Required Fields. Я хочу организовать проверку раньше нажатия на кнопку. Т.е. я хочу получить список Required Fields и сравнить его с филдами которые выбрал юзер.
Задача такая: юзер заполняет поля объекта (которые сам определил) и нажимает кнопку Save. Появляеться сообщение, что необходимо заполнить Required Fields. Я хочу организовать проверку раньше нажатия на кнопку. Т.е. я хочу получить список Required Fields и сравнить его с филдами которые выбрал юзер.
Есть вот такой замечательный способ:
Schema.DescribeSObjectResult r = User.sObjectType.getDescribe();
Map<String,Schema.SObjectField> M = r.fields.getMap();
for(String fieldName : M.keySet())
{
Schema.SObjectField field = M.get(fieldName);
Schema.DescribeFieldResult F = field.getDescribe();
//A nillable field can have empty content. A isNillable Boolean non-nillable field must have a value for the object to be created or saved.
// if F.isNillable() is false then field is mandatory
Boolean isFieldreq = F.isNillable() ;
System.debug ('F = ' + fieldName + ' isnul= ' + isFieldreq);
}
Можешь вставить в Developer Console и debug log проверить как оно работает.
Увидешь много вот такие строчек (по одной строчке для каждого поля):
USER_DEBUG|[10]|DEBUG|F = Username isnul= false
F = <field name>
isnul = false -> required
= true -> not required
Есть вот такой замечательный способ: [code]Schema.DescribeSObjectResult r = User.sObjectType.getDescribe(); Map<String,Schema.SObjectField> M = r.fields.getMap(); for(String fieldName : M.keySet()) { Schema.SObjectField field = M.get(fieldName); Schema.DescribeFieldResult F = field.getDescribe(); //A nillable field can have empty content. A isNillable Boolean non-nillable field must have a value for the object to be created or saved. // if F.isNillable() is false then field is mandatory Boolean isFieldreq = F.isNillable() ; System.debug ('F = ' + fieldName + ' isnul= ' + isFieldreq); }[/code] Можешь вставить в Developer Console и debug log проверить как оно работает. Увидешь много вот такие строчек (по одной строчке для каждого поля): [code]USER_DEBUG|[10]|DEBUG|F = Username isnul= false[/code] F = <field name> isnul = false -> required = true -> not required
Спасибо, метод isNillable(), не совсем то что нужно. Есть объект Аккаунт при сохранении записей форсе ругаеться только на два поля Нейм и Оунерайди, isNillable() возвращает полей 5 или 8.
Спасибо, метод isNillable(), не совсем то что нужно. Есть объект Аккаунт при сохранении записей форсе ругаеться только на два поля Нейм и Оунерайди, isNillable() возвращает полей 5 или 8.
Все правильно.
Метод, который я привел, показывает ВСЕ поля объекта, в том числе и служебные, которые обычному пользователю не видны и которые заполняет сам salesforce. Можешь в этом убедиться если выведешь список полей в браузере, в обычном интерфейсе и скажем в force.com ide. Поля служебные для всех объектов называются одинаково. Ты можешь просто выписать эти поля и игнорировать при получении списка requiared полей для пользователя.
Напиши поля Account, которые salesforce показывает как обязательные.
Все правильно. Метод, который я привел, показывает ВСЕ поля объекта, в том числе и служебные, которые обычному пользователю не видны и которые заполняет сам salesforce. Можешь в этом убедиться если выведешь список полей в браузере, в обычном интерфейсе и скажем в force.com ide. Поля служебные для всех объектов называются одинаково. Ты можешь просто выписать эти поля и игнорировать при получении списка requiared полей для пользователя. Напиши поля Account, которые salesforce показывает как обязательные.
Филды False:
isDeleted невидимое
systemmodstamp невидимое
createdadate видимое
ownerId видимое ругаеться, говорит надо заполнить
Lastmodifiedbyid видимое
id невидимое
name видимое ругаеться, говорит надо заполнить
Филды False: isDeleted невидимое systemmodstamp невидимое createdadate видимое ownerId видимое ругаеться, говорит надо заполнить Lastmodifiedbyid видимое id невидимое name видимое ругаеться, говорит надо заполнить
Поля: isDeleted, systemmodstamp, createdadate, Lastmodifiedbyid, ownerId, id являются системными и salesforce их заполняет сам, пользователь не имеет права их редактировать напрямую. Эти поля всегда заполнены данными, которые можно читать и использовать.
поле Name у объекта Account обязательное по-умолчанию.
так что все очень даже правильно отработало!
Поля: isDeleted, systemmodstamp, createdadate, Lastmodifiedbyid, ownerId, id являются системными и salesforce их заполняет сам, пользователь не имеет права их редактировать напрямую. Эти поля всегда заполнены данными, которые можно читать и использовать. поле Name у объекта Account обязательное по-умолчанию. так что все очень даже правильно отработало!
Это к сожаление мне не подходит. У меня задача- юзер выбирает поля для редактирования объекта заполняет и по нажатию на кнопку они должны инсертиться. Тут то и появляеться сообщение что нужно было заполнить и обязательные поля которые он не выбрал. Сейчас буду делать кнопку на добавление нового филда, что долго. Я хотел до загрузки выдавать юзеру сообщение, что ему необходимо выбрать обязательные поля и список полей.
Это к сожаление мне не подходит. У меня задача- юзер выбирает поля для редактирования объекта заполняет и по нажатию на кнопку они должны инсертиться. Тут то и появляеться сообщение что нужно было заполнить и обязательные поля которые он не выбрал. Сейчас буду делать кнопку на добавление нового филда, что долго. Я хотел до загрузки выдавать юзеру сообщение, что ему необходимо выбрать обязательные поля и список полей.
А почему не выделить (выбрать) required поля по умолчанию?
Чтобы пользователь не ломал голову какие поля ему надо выбирать чтобы заполнить.
В случае Account. Заходит пользователь на страницу -> видит список полей с чекбоксами -> для поля Name чекбокс включен и неактивен, чтобы выключить нельзя было. В Salesforce так сделано везде.
А системные поля пользователю показывать не надо!!! он все равно к ним доступа не имеет.
Вроде все красиво получилось!
А почему не выделить (выбрать) required поля по умолчанию? Чтобы пользователь не ломал голову какие поля ему надо выбирать чтобы заполнить. В случае Account. Заходит пользователь на страницу -> видит список полей с чекбоксами -> для поля Name чекбокс включен и неактивен, чтобы выключить нельзя было. В Salesforce так сделано везде. А системные поля пользователю показывать не надо!!! он все равно к ним доступа не имеет. Вроде все красиво получилось!
Эт все красиво, но у меня все привязано к Select Fields to Display, т.е. пользователь наделал вьюшек и потом играеться с данными объекта.
Ладно спасибо за помощь.
Эт все красиво, но у меня все привязано к Select Fields to Display, т.е. пользователь наделал вьюшек и потом играеться с данными объекта. Ладно спасибо за помощь.