2017-02-28 1 views
3

J'essaye d'utiliser structFindKey pour créer une structure "org" à partir d'une requête.en utilisant structFindKey et son chemin pour ajouter un nouveau noeud avec coldfusion

Je commence par une requête qui ressemble à ceci. enter image description here

de ce que je suis en train de construire une structure qui représente la structure organisationnelle réelle que je voudrais ressembler à ceci:

enter image description here

Je commence avec mon request.hierarchyStruct qui ressemble à ceci : enter image description here

ici est le code jusqu'à présent

for(row in getCorpUserHierarchy){ 

     insertIntoHierachy(row); 

    } 


function insertIntoHierachy(thisRow){ 
    var thisKey = thisRow.parentGroupId; 
    var newChild = { 
     "level" = thisRow.ThisLevel 
    , "levelName" = thisRow.levelName 
    , "groupName" = thisRow.groupName 
    , "members" = [] 
    }; 

    keyResult = structFindKey(request.hierarchyStruct, thisKey, "one"); 
    if(arrayLen(keyResult) > 0){ 
     writeDump(keyResult); 
     newPath = 'request.hierarchyStruct' & keyResult[1].path; 
     foundKey = structGet(newPath); 
     foundKey[thisRow.groupId] = newChild; 
    } 
} 

Je suis en mesure de « trouver la clé » qui décharge le résultat clé:

enter image description here

Mais quand la première ligne « Région jasmins » trouve et essayer d'ajouter le « newChild » à ce que je reçois un erreur enter image description here

J'ai essayé une variété de combinaisons avec le chemin comprenant

var newPath = keyResult[1].path;  
var fullPath = 'request.hierarchyStruct' 
      var pathArray = listToArray(newPath,'.'); 

      for(i in pathArray){ 
       fullPath = fullpath & "." & i ; 
      } 

Je ne sais pas si ce sujet s beaucoup, mais je suis en utilisant la dernière version de LUCEE pas coldfusion adobe.

Ceci est la première fois en utilisant structFindKey et path quelqu'un peut-il faire la lumière sur ce ???

Répondre

2

Vous avez peut-être trouvé un bug dans Lucee. Votre code semble fonctionner avec Adobe ColdFusion. J'ai créé un gist on TryCF showing this.

<cfscript> 
hierarchyStruct = {}; 
hierarchyStruct.0 = { 
    "groupName" = "top level" 
    , "level" = "1" 
    , "levelName" = "region" 
}; 
writeDump(hierarchyStruct); 

keyResult = structFindKey(hierarchyStruct, "0", "one"); 
writeDump(keyResult); 

newPath = 'hierarchyStruct' & keyResult[1].path; 
writeDump(newPath); 

foundKey = structGet(newPath); 
writeDump(foundKey); 
</cfscript> 

Ce document utilise Adobe ColdFusion 11 et sera exécuté. Changez le moteur à Lucee et il y aura une erreur.

Vous pouvez contourner cette erreur en modifiant le nom de la structure request.hierarchyStruct.0. Notez qu'il échoue sur cette structure étant nommé 0.

Par exemple, j'ai créé another gist changing the name de cette structure à a0 et il fonctionne en utilisant Lucee.

<cfscript> 
hierarchyStruct = {}; 
hierarchyStruct.a0 = { 
    "groupName" = "top level" 
    , "level" = "1" 
    , "levelName" = "region" 
}; 
writeDump(hierarchyStruct); 

keyResult = structFindKey(hierarchyStruct, "a0", "one"); 
writeDump(keyResult); 

newPath = 'hierarchyStruct' & keyResult[1].path; 
writeDump(newPath); 

foundKey = structGet(newPath); 
writeDump(foundKey); 
</cfscript> 
+0

Vous avez peut-être raison. U a changé la clé pour la structure de numeric (qui était l'ID réel pour les groupes) à 'a' & groupId et cela a fonctionné. Evidemment ce n'est pas aussi pratique et je devrai enlever la lettre si je veux l'utiliser (je viens de rajouter le groupe Id à la struct donc je n'ai pas à le faire) Je trouverai un monent aujourd'hui pour signaler ce bug, Merci @ Miguel-F – Lance