Ого, это действительно меня смущает.
В цикле (из моего реального кода, зацикливающего массивы веб-сервисов), если я использую что-то вроде:
#StructKeyList(myIndex)#
Он выдает список доступных ключей в myIndex, который включает ВСЕ имена полей, как и ожидалось, включая поля, которые существуют, но являются пустыми.
При выполнении таких проверок, как StructKeyExists (myIndex, «somefield») или isDefined («myIndex.somefield»), возвращается значение true, поскольку ключ существует. Но если я тогда попытаюсь вывести поле myIndex.somefield, я получу поле Элемент some не определен в ошибке myIndex. Я не понимаю, почему это проблема. Я также пытался использовать, но это, похоже, ничего не делает (для моих массивов).
Если я попробую все предыдущие шаги на примере массива и зациклюсь, он будет работать как положено. Только когда я пытаюсь описать вышеизложенное с результатами веб-службы, у меня возникают проблемы.
Кто-нибудь видел эту проблему при работе с наборами записей веб-служб (на CF8)?
Теперь вернемся к обходным решениям…. Одно из предположений, которое работает (спасибо Ли), состоит в том, чтобы вместо использования myIndex.somefield вызывать метод getSomeField в веб-сервисе и использовать вместо него его результат (который работает, даже если значение пусто).
Другая вещь, которую я только что попробовал, которая также (по какой-либо причине) работает - это удаление имени индекса из isDefined, поэтому вместо:
isDefined(“myIndex.somefield”)
Я использую:
isDefined(“somefield”)
Опять же, похоже, это проблема, связанная с CF8, потому что, если я запускаю код на CF9 с использованием StructKeyExists, IsDefined или IsNull, все они работают как положено.