Регистрация  |  Вход

Как определить Required Fields???

Задача такая: юзер заполняет поля объекта (которые сам определил) и нажимает кнопку 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, т.е. пользователь наделал вьюшек и потом играеться с данными объекта. 
Ладно спасибо за помощь.