Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //ISUT-542 получение значений из класса/справочника по имени класса/справочника
- def getData(def requestData) {
- if(!requestData?.className) {
- "Не задан код справочника или класса".with{ utils.throwReadableException(it, null); }
- }
- logger.error(modules.common.gson(requestData))
- return modules.common.gson(findRecursive(requestData));
- }
- //ISUT-542 метод для рекурсивного получения значений колонки
- def findRecursive(def requestData) {
- logger.error(modules.common.gson("sel cols "+requestData.selectColumns))
- def selectAttrs = requestData.selectColumns ?: api.metainfo.getMetaClass(requestData.className).attributes*.code;
- def queryColumns = requestData.queryColumns ?: [:];
- utils.find(requestData.className, queryColumns).collect{ obj ->
- selectAttrs.collectEntries { attr ->
- expression: {
- //ISUT-542 проверка на . означает, что нужно идти дальше по атрибутам класса
- if(attr.indexOf('.') > 0)
- {
- def keys = attr.split('\\.');
- def attribute = api.metainfo.getMetaClass(requestData.className).getAttribute(keys[0]);
- def relatedClass = api.metainfo.getMetaClass(attribute.type.relatedMetaClass.code);
- def linkedQuery = relatedClass.attributes.collectEntries {
- it?.type?.relatedMetaClass?.code == requestData.className.split('\\$')[0]
- ? [(it.code) : obj?.UUID] : [:]
- }
- //ISUT-542 проверка на то, что количество колонок разделенных . больше 2, если больше, то по цепочке дальше передаем слитые через . колонки дальше в рекурсию. иначе берем просто колонку после . исходной строки
- def joinedColumn = keys.size()-1 > 1 ? keys[1,keys.size()-1].join('.') : keys[1];
- def recursiveData = [className: attribute.type.relatedMetaClass.code, selectColumns: [joinedColumn], queryColumns: linkedQuery]
- def tempObject = ["${attr}": findRecursive(recursiveData)]
- return tempObject;
- }
- //ISUT-542 проверка на [ означает, что нужно вернуть набор колонок (а не стандартные значения атрибута)
- else if(attr.indexOf('[') > 0)
- {
- def keys = attr.split('\\[');
- def attribute = api.metainfo.getMetaClass(requestData.className).getAttribute(keys[0]);
- def relatedClass = api.metainfo.getMetaClass(attribute.type.relatedMetaClass.code);
- def linkedQuery = relatedClass.attributes.collectEntries {
- it?.type?.relatedMetaClass?.code == requestData.className.split('\\$')[0]
- ? [(it.code) : obj?.UUID] : [:]
- }
- def columns = [];
- def joinedColumn = keys[1].substring(keys[1].indexOf('[')+1, keys[1].indexOf(']'));
- //ISUT-542 проверка на , означает, что нужно вернуть несколько колонок
- if(joinedColumn.indexOf(',') > 0 && keys.size()-1 <= 1)
- {
- columns = joinedColumn.split(',');
- }
- else
- {
- columns.push(joinedColumn);
- }
- def recursiveData = [className: attribute.type.relatedMetaClass.code, selectColumns: columns, queryColumns: linkedQuery]
- def tempObject = ["${attr}": findRecursive(recursiveData)]
- return tempObject
- }
- else
- return ["${attr}": handleAttr(requestData.className, attr, obj."${attr}")];
- }
- }
- }
- }
- //ISUT-542 получение кодов колонок класса по имени класса
- def handleAttr(def className, attrName, def attr) {
- def attrCode = api.metainfo.getMetaClass(className).getAttribute(attrName).type.code;
- switch (attrCode) {
- case ['object']:
- return ['UUID': attr?.UUID, 'title': attr?.title];
- case ['catalogItem']:
- return ['UUID': attr?.UUID, 'code': attr?.code, 'title': attr?.title];
- case ['secGroups']:
- return ['UUID': attr?.code, 'title': attr?.title];
- case ['catalogItemSet']:
- def map = [];
- attr.each{at -> map.push(['UUID': at?.UUID, 'code': at?.code, 'title': at?.title])}
- return map;
- case ['secGroups', 'boLinks', 'backBOLinks']:
- def map = [];
- attr.each{at -> map.push(['UUID': at?.UUID, 'title': at?.title])}
- return map;
- default:
- return attr;
- }
- }
- def requestData=[className: 'ae$subSystem', selectColumns: [/*"infSysVer.verNumber", */"infSysVer.stages[dateFrom,devStage]", "metaClass", "title", "UUID"], queryColumns: ["title": "[552] Некая система, которая что-то делает"]]
- getData(requestData)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement