我正在尝试使用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;
}
}
我能够“找到转储关键结果的密钥”:
但是当第一行“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
可以让任何人对此有所了解吗?
答案 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>