使用 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 中的一个错误。您的代码似乎适用于 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>
我正在尝试使用 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 中的一个错误。您的代码似乎适用于 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>