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

История одного бага с Multipicklist

Сегодня потратил часть своей жизни чтобы выловить преинтересный баг в SF.

Попытка вызвать Remote Action проваливалась с ошибкой

Internal Exception
java.lang.UnsupportedOperationException

Явно не родная ошибка для SF. Естественно все попытки дебажить проваливались.

Все усугубляло еще то что логика писалась до меня и я просто скопипастил слегка подправив один небольшой блок кода + добавил бэкенд логику.

И вот самое интересное - на бэкенде надо было проверить содержит ли мультипиклист значение и в соотвествии с этим выставить нужный Рекорд Тайп на записи. Так как проверка мультипиклиста никогда не вызывала трудности, то все силы были брошены на работу с Рекорд Тайпом. Но даже последующее исключение этой логики из кода не исправило проблему. Это уже стало намного интереснее. Тут еще немного отсутпая назад скажу, что без бэкенд логики запись отлично создавалась с выбранным значением в поле Multipicklist - т.е. это прямо говорило что значение приходит правильное и базу попадает то что надо.

В итоге вся бэкенд логика сократилась до 1 строки - тупо вывода в лог значения из поля Multipicklist - и о чудо - ошибка прямо на этой единственной строчке. Тут уже пришел к мысли проверить что же уходит в запросе из Remote Action - а там, блин, уходил массив значений, а не строка через ";" как вроде положено. Поправил на фронтенде исправление формата в этом поле перед отправкой - все заработало.

Вывод: Каким-то чудом SF спокойно десериализирует массив в поле Multipicklist и, самое интересное, правильно сохраняет в базу! Но при попытке обратиться (считать) к данному полю в apex коде - получаем Internal Exception.

Интересное такое расследование получилось !!!

Сегодня потратил часть своей жизни чтобы выловить преинтересный баг в SF.

Попытка вызвать Remote Action проваливалась с ошибкой

Internal Exception
java.lang.UnsupportedOperationException 

Явно не родная ошибка для SF. Естественно все попытки дебажить проваливались.

Все усугубляло еще то что логика писалась до меня и я просто скопипастил слегка подправив один небольшой блок кода + добавил бэкенд логику.

И вот самое интересное - на бэкенде надо было проверить содержит ли мультипиклист значение и в соотвествии с этим выставить нужный Рекорд Тайп на записи. Так как проверка мультипиклиста никогда не вызывала трудности, то все силы были брошены на работу с Рекорд Тайпом. Но даже последующее исключение этой логики из кода не исправило проблему. Это уже стало намного интереснее. Тут еще немного отсутпая назад скажу, что без бэкенд логики запись отлично создавалась с выбранным значением в поле Multipicklist - т.е. это прямо говорило что значение приходит правильное и базу попадает то что надо.

В итоге вся бэкенд логика сократилась до 1 строки - тупо вывода в лог значения из поля Multipicklist - и о чудо - ошибка прямо на этой единственной строчке. Тут уже пришел к мысли проверить что же уходит в запросе из Remote Action - а там, блин, уходил массив значений, а не строка через ";" как вроде положено. Поправил на фронтенде исправление формата в этом поле перед отправкой - все заработало.

Вывод: Каким-то чудом SF спокойно десериализирует массив в поле Multipicklist и, самое интересное, правильно сохраняет в базу! Но при попытке обратиться (считать) к данному полю в apex коде - получаем Internal Exception.

Интересное такое расследование получилось :D !!!