используя structFindKey и его путь, чтобы добавить новый узел с помощью 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;
    }
}

Я могу «найти ключ», который сбрасывает ключевой результат:

введите здесь описание изображения

Но когда первая строка «Регион Жасмин» находит и пытается добавить к ней «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, кто-нибудь может пролить свет на это???


person Lance    schedule 28.02.2017    source источник


Ответы (1)


Возможно, вы наткнулись на ошибку в Lucee. Похоже, ваш код работает с Adobe ColdFusion. Я создал суть на TryCF, показывающую это.

<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.

Например, я создал еще один gist, изменив имя этой структуры на 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>
person Miguel-F    schedule 01.03.2017
comment
Вы можете быть правы. U изменил ключ для структуры с числового (который был фактическим идентификатором для групп) на «a» и groupId, и это сработало. Очевидно, что это не так удобно, и мне придется удалить письмо, если я захочу его использовать (я просто добавил его идентификатор группы в структуру, поэтому мне это не нужно). Сегодня я найду монент, чтобы сообщить об этой ошибке, Спасибо @Miguel-F - person Lance; 01.03.2017