From fdf019a5da397641d70f3e6ebe228462d00efc1e Mon Sep 17 00:00:00 2001 From: Johannes Hoermann <j.hoermann@adito.de> Date: Wed, 3 Apr 2019 14:00:48 +0200 Subject: [PATCH] object tree choose type --- .../ObjectRelationType_entity/titleProcess.js | 3 +- .../recordcontainers/jdito/contentProcess.js | 57 +++++++++++++------ neonView/ObjectTree_view/ObjectTree_view.aod | 11 ++++ process/ObjectRelation_lib/process.js | 51 +++++++++++++---- 4 files changed, 94 insertions(+), 28 deletions(-) diff --git a/entity/ObjectRelationType_entity/titleProcess.js b/entity/ObjectRelationType_entity/titleProcess.js index 6a95b85f755..71a9111fb45 100644 --- a/entity/ObjectRelationType_entity/titleProcess.js +++ b/entity/ObjectRelationType_entity/titleProcess.js @@ -1,4 +1,5 @@ +import("system.translate"); import("system.vars"); import("system.result"); -result.string(vars.get("$field.RELATION_TITLE")) \ No newline at end of file +result.string(translate.text(vars.get("$field.RELATION_TITLE"))) \ No newline at end of file diff --git a/entity/ObjectTree_entity/recordcontainers/jdito/contentProcess.js b/entity/ObjectTree_entity/recordcontainers/jdito/contentProcess.js index 267103d35e5..824c27dc86b 100644 --- a/entity/ObjectTree_entity/recordcontainers/jdito/contentProcess.js +++ b/entity/ObjectTree_entity/recordcontainers/jdito/contentProcess.js @@ -16,7 +16,7 @@ _loadObjectRelationTree(vars.get("$param.ObjectId_param"), vars.get("$param.Obje result.object(tree); -function _loadObjectRelationTree(pObjectId, pObjectType, pObjectRelationType, pNodeId, pLayer) +function _loadObjectRelationTree(pObjectId, pObjectType, pObjectRelationTypeId, pNodeId, pLayer) { if (pLayer == undefined) pLayer = 0; @@ -30,14 +30,22 @@ function _loadObjectRelationTree(pObjectId, pObjectType, pObjectRelationType, pN { if (pLayer == 0) { - if (pObjectRelationType) + if (pObjectRelationTypeId) { + var relationTypeData = ObjectRelationUtils.getRelationType(pObjectRelationTypeId); + relationTypeData = ObjectRelationUtils.getRelationType(relationTypeData[8]); // if hirachy: get most top id else use the current currentObjectId - if (_getHierarchy(pObjectRelationType)) + if (relationTypeData[4] == "1") { - currentObjectId = _getRootID(currentObjectId, pObjectType); - // ??? set type also ??? + currentObjectId = _getRootID(currentObjectId, relationTypeData); } + + let uids = _insertEntry(tree, [[currentObjectId, "", "", "", ""]], pNodeId, pLayer, pObjectType, relationTypeData) + for (let i = 0; i < uids.length; i++) + { + _loadObjectRelationTree(uids[i][0], uids[i][3], relationTypeData[0], uids[i], pLayer+1); + } + } else // no ObjectType chosen { @@ -53,10 +61,10 @@ function _loadObjectRelationTree(pObjectId, pObjectType, pObjectRelationType, pN { // TODO: Icons, BINDATA // var icon = getIcon... - var uid = [currentObjectId, i, relationTypes[i]]; + let uid = [currentObjectId, i, relationTypes[i]]; tree.push([JSON.stringify(uid), translate.text(relationTypes[i][1]), JSON.stringify(pNodeId), true, null, null]); - _loadObjectRelationTree(pObjectId, pObjectType, pObjectRelationType, uid, pLayer+1); + _loadObjectRelationTree(pObjectId, pObjectType, pObjectRelationTypeId, uid, pLayer+1); } } } @@ -71,7 +79,7 @@ function _loadObjectRelationTree(pObjectId, pObjectType, pObjectRelationType, pN var relationType2 = typeData[8]; var direction = typeData[3]; - if (hierarchy == "1" && !pObjectRelationType) + if (hierarchy == "1") { var myData = _getEntryData(pNodeId[0], typeId, direction, relationType1, relationType2) @@ -79,16 +87,16 @@ function _loadObjectRelationTree(pObjectId, pObjectType, pObjectRelationType, pN let uids = _insertEntry(tree, myData, pNodeId, pLayer, destObjectType, typeData) for (let i = 0; i < uids.length; i++) { - _loadObjectRelationTree(uids[i][0], uids[i][3], pObjectRelationType, uids[i], pLayer+1); + _loadObjectRelationTree(uids[i][0], uids[i][3], pObjectRelationTypeId, uids[i], pLayer+1); } } else { // get ObjectRelationType from nodeId - if (!pObjectRelationType) - { + //if (!pObjectRelationTypeId) + //{ _insertEntry(tree, _getEntryData(pNodeId[0], typeId, direction, relationType1, relationType2), pNodeId, pLayer, destObjectType, typeData) - } + //} // TODO: wenn relationtype selected } } @@ -97,7 +105,7 @@ function _loadObjectRelationTree(pObjectId, pObjectType, pObjectRelationType, pN /** * load data for a relation. - * OBJECT_ROWID, AB_OBJECTRELATIONID, AB_OBJECTRELATIONTYPEID, RELATION_TITLE + * OBJECT_ROWID, AB_OBJECTRELATIONID, OBJECT_TYPE, RELATION_TITLE */ function _getEntryData(pObjectId, pRelationTypeId, pDirection, pRelationType1, pRelationType2, pRecursion) { @@ -171,8 +179,25 @@ function _insertEntry (pTree, pEntryData, pNodeId, pLayer, pObjectType, pRelatio return uids; } -function _getHierarchy(pObjectRelationType) +/* +* get most top root of a node +* +* @param {String} pObjectId +* @param {String[]} pObjectRelationTypeData +* +* @return {String} RootObjectId +*/ +function _getRootID(pObjectId, pObjectRelationTypeData) { - return db.cell(SqlCondition.begin().andPrepare("AB_OBJECTRELATIONTYPE.AB_OBJECTRELATIONTYPEID", pObjectRelationType) - .buildSql("select HIERARCHY from AB_OBJECTRELATIONTYPE", "1=2")) == "1"; + var sourceid = pObjectId; + var max = 100; + do + { + var rootid = sourceid; + max--; + sourceid = db.cell("select OBJECT1_ROWID from AB_OBJECTRELATION where OBJECT2_ROWID = '" + sourceid + "' and AB_OBJECTRELATIONTYPE1 = '" + pObjectRelationTypeData[7] + "' and AB_OBJECTRELATIONTYPE2 = '" + pObjectRelationTypeData[8] + "'"); + } + while( sourceid != "" && max > 0 ); + return rootid; + return currentObjectId; } \ No newline at end of file diff --git a/neonView/ObjectTree_view/ObjectTree_view.aod b/neonView/ObjectTree_view/ObjectTree_view.aod index 4395ff39605..ca086186775 100644 --- a/neonView/ObjectTree_view/ObjectTree_view.aod +++ b/neonView/ObjectTree_view/ObjectTree_view.aod @@ -8,6 +8,17 @@ </boxLayout> </layout> <children> + <genericViewTemplate> + <name>Selector</name> + <editMode v="true" /> + <entityField>#ENTITY</entityField> + <fields> + <entityFieldLink> + <name>50eef5d6-418b-411b-a585-8633119b2fb0</name> + <entityField>Selector</entityField> + </entityFieldLink> + </fields> + </genericViewTemplate> <treeViewTemplate> <name>ObjectRelations</name> <parentField>PARENT_ID</parentField> diff --git a/process/ObjectRelation_lib/process.js b/process/ObjectRelation_lib/process.js index 1220a10c17c..a3d375d5c36 100644 --- a/process/ObjectRelation_lib/process.js +++ b/process/ObjectRelation_lib/process.js @@ -40,7 +40,6 @@ ObjectRelationUtils.getPossibleRelationTypes = function(pObjectType, pFullInfo) } // full info: - // TODO: add hierarchy var relationTypes = (db.table( ["select main.AB_OBJECTRELATIONTYPEID, main.RELATION_TITLE, main.RELATION_TYPE, \n\ case when type2.AB_OBJECTRELATIONTYPEID is null then 'same' \n\ @@ -63,15 +62,45 @@ ObjectRelationUtils.getPossibleRelationTypes = function(pObjectType, pFullInfo) ] ])); - // switch the object types, if the direction is normal so that the first one is dest and the second one is source. return relationTypes; - /*.map(function(relationType) - { - if (relationType[3] == "normal") - { - return relationType.slice(0, 6).concat(relationType[7], relationType[6]); - } - - return relationType; - });*/ +} + +/** + * Get all possible relationTypes by a objectType. + * returns the id, title, RELATION_TYPE, direction (normal, reverse, same), hierarchy, OBJECT_TYPE dest, OBJECT_TYPE source, objectrelationtypeId1, objectrelationtypeId2, side + * + * @param {String} pObjectTypeId the object type to load the relation types for.] + * + * @return {String[][]} + */ +ObjectRelationUtils.getRelationType = function(pObjectTypeId) +{ + // TODO: funktionen evtl. zusammenfassen + var sql = " from AB_OBJECTRELATIONTYPE main \n\ + left join AB_OBJECTRELATIONTYPE type2 on (type2.AB_OBJECTRELATIONTYPEID <> main.AB_OBJECTRELATIONTYPEID and type2.RELATION_TYPE = main.RELATION_TYPE) \n\ + where main.AB_OBJECTRELATIONTYPEID = ?" + + // full info: + var relationType = (db.array(db.ROW, + ["select main.AB_OBJECTRELATIONTYPEID, main.RELATION_TITLE, main.RELATION_TYPE, \n\ + case when type2.AB_OBJECTRELATIONTYPEID is null then 'same' \n\ + when main.SIDE = 1 then 'normal'\n\ + else 'reverse'\n\ + end direction,\n\ + main.HIERARCHY, \n\ + type2.OBJECT_TYPE objectType, \n\ + main.OBJECT_TYPE objectType, \n\ + -- typeId of Object2\n\ + case when main.SIDE = 1 then main.AB_OBJECTRELATIONTYPEID\n\ + else type2.AB_OBJECTRELATIONTYPEID end objectrelationtypeId1,\n\ + -- typeId of Object1\n\ + case when type2.AB_OBJECTRELATIONTYPEID is null or main.SIDE = 2 then main.AB_OBJECTRELATIONTYPEID\n\ + else type2.AB_OBJECTRELATIONTYPEID end objectrelationtypeId2, \n\ + main.SIDE" + sql, + [ + [pObjectTypeId, db.getColumnTypes("AB_OBJECTRELATIONTYPE", ["AB_OBJECTRELATIONTYPEID"])[0]], + ] + ])); + + return relationType; } \ No newline at end of file -- GitLab