使用structFindKey及其路径添加一个带有coldfusion的新节点

时间:2017-02-28 23:26:07

标签: struct coldfusion lucee

我正在尝试使用structFindKey从查询中创建“org”结构。

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

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

enter image description here

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

这是迄今为止的代码

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

我能够“找到转储关键结果的密钥”:

enter image description here

但是当第一行“Jasmines Region”找到并尝试添加“newChild”时,我收到错误 enter image description here

我尝试了多种与路径相关的组合,包括

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可以让任何人对此有所了解吗?

1 个答案:

答案 0 :(得分:2)

你可能偶然发现了Lucee的一个错误。您的代码似乎适用于Adobe 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>

该要点正在使用Adobe 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>