使用 structFindKey 及其路径通过 coldfusion 添加新节点

using structFindKey and its path to add a new node with coldfusion

我正在尝试使用 structFindKey 从查询中创建一个 "org" 结构。

我从一个看起来像这样的查询开始。

据此我试图构建一个代表实际组织结构的结构,我希望它看起来像这样:

我从我的 request.hierarchyStruct 开始,看起来像这样:

这是目前的代码

  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;
    }
}

我能够 "find the key" 转储关键结果:

但是当第一行 "Jasmines Region" 找到并尝试将 "newChild" 添加到它时,我得到一个错误

我尝试了多种路径组合,包括

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

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

我不知道这是否很重要,但我使用最新版本的 LUCEE 而不是 adobe 的 coldfusion。

这是第一次使用 structFindKey 并且 path 谁能解释一下这个???

您可能偶然发现了 Lucee 中的一个错误。您的代码似乎适用于 Adob​​e ColdFusion。我创建了一个 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>

该要点正在使用 Adob​​e ColdFusion 11,它将 运行。把引擎改成Lucee,会报错

您可以通过更改 request.hierarchyStruct.0 结构的名称来解决此错误。请注意,它在名为 0 的结构上失败。

例如,我创建了该结构的 another gist changing the name a0,它使用 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>