Schönes kleines WTF am späten Nachmittag:
1 2 3 4 |
while( local.objCursor.hasNext() ){ local.structData = local.objCursor.next(); if (structKeyExists(local.structData,'dealIds') && isArray(local.structData.dealIds)) { ... |
BLAM!
Element STRUCTDATA.DEALIDS is undefined in LOCAL.
The error occurred in /var/www/.../some.cfc: line 120
118 : while( local.objCursor.hasNext() ){
119 : local.structData = local.objCursor.next();
120 : if (structKeyExists(local.structData,'dealIds') && isArray(local.structData.dealIds)) {
Erzählt das structKeyExists hier Märchen und das Element gibt’s tatsächlich nicht in der Struture? Natürlich nicht – structKeyExists macht hier durchaus seinen Job, das Element dealIds ist definitiv in local.structData vorhanden.
Die Fehlermeldung gibt den richtigen Hinweis:
Element STRUCTDATA.DEALIDS is undefined in LOCAL
ColdFusion ist nicht case-sensitiv. Intern sind alle Variablen in Uppercase. Wenn man nun wie ich allerdings häufig mit Java-Komponenten hantiert, dann erhält man Structures bzw. Hash-Maps, deren Keys eben nicht in Großbuchstaben geschrieben sind, sondern wie hier in camelCase. Die bequeme Dot-Notation für echte ColdFusion-Structures knallt dann, d.h. man sollte hier tunlichst die eckigen Klammern bemühen:
1 2 3 4 |
while( local.objCursor.hasNext() ){ local.structData = local.objCursor.next(); if (structKeyExists(local.structData,'dealIds') && isArray(local.structData['dealIds'])) { ... |
Dann klappt’s auch mit den Java-HashMaps 🙂