Something went wrong on our end
contentProcess.js 5.93 KiB
import("KeywordRegistry_basic");
import("system.vars");
import("Sql_lib")
import("system.result");
import("system.db");
var fixedContextName = vars.get("$param.ContextName_param");
var fixedID = vars.get("$param.ID_param");
let resArray = [];
var cond = new SqlCondition();
// Query root element
var root = queryRootElement(fixedContextName, fixedID, true);
if (root !== null) {
// Push root element
resArray.push(root);
// Query children of root
var children = queryChildrenElements(fixedContextName, fixedID);
if (children !== null) {
// Push each children
resArray = resArray.concat(children);
result.object(resArray);
}
}
/**
* Queries the children of the given parent element.
* This function will recursively go through each level of children.
*
* @param pContextName Context name of the parent element.
* @param pID ID of the parent element.
*/
function queryChildrenElements (pContextName, pID) {
var taskResult = db.table(SqlCondition.begin()
.andPrepare("TASK.PARENT_ID", pID)
.andPrepare("TASK.PARENT_CONTEXT", pContextName)
.andPrepare("TASK.TYPE", $KeywordRegistry.taskType$task())
.buildSql("select TASKID, PARENT_ID, PARENT_CONTEXT, SUBJECT, DESCRIPTION from TASK"));
var ticketResult = db.table(SqlCondition.begin()
.andPrepare("TASK.PARENT_ID", pID)
.andPrepare("TASK.PARENT_CONTEXT", pContextName)
.buildSql("select TICKETID, PARENT_ID, PARENT_CONTEXT, SUBJECT, DESCRIPTION from TICKET left join TASK on TASK_ID = TASKID"));
var activityResult = db.table(SqlCondition.begin()
.andPrepare("ACTIVITY.PARENT_ID", pID)
.andPrepare("ACTIVITY.PARENT_CONTEXT", pContextName)
.buildSql("select ACTIVITYID, PARENT_ID, PARENT_CONTEXT, SUBJECT, INFO from ACTIVITY"));
var res = []
for (let i = 0; i < taskResult.length; i++) {
// Augment data
taskResult[i] = augmentData(taskResult[i], "Task");
res.push(taskResult[i]);
// Query children
let children = queryChildrenElements("Task", taskResult[i][0]);
res = res.concat(children);
}
for (let i = 0; i < activityResult.length; i++) {
// Augment data
activityResult[i] = augmentData(activityResult[i], "Activity");
res.push(activityResult[i]);
// Query children
let children = queryChildrenElements("Activity", activityResult[i][0]);
res = res.concat(children);
}
for (let i = 0; i < ticketResult.length; i++) {
// Augment data
ticketResult[i] = augmentData(ticketResult[i], "SupportTicket");
res.push(ticketResult[i]);
// Query children
let children = queryChildrenElements("SupportTicket", ticketResult[i][0]);
res = res.concat(children);
}
return res;
}
/**
* Queries the root element.
*
* @param pContextName Context name of the root element.
* @param pID ID of the root element.
* @param pGetFirst start from the first element
*/
function queryRootElement (pContextName, pID, pGetFirst) {
var resultArray;
if (pContextName === "Task") {
resultArray = db.array(db.ROW, "select TASKID, PARENT_ID, PARENT_CONTEXT, SUBJECT, DESCRIPTION from TASK where TASKID = '" + pID + "'");
if (resultArray.length === 0) {
return null;
}
if (pGetFirst && resultArray[1] && resultArray[2])
return queryRootElement(resultArray[2], resultArray[1], pGetFirst);
if (pGetFirst)
{
fixedContextName = "Task";
fixedID = resultArray[0];
}
return augmentData(resultArray, "Task");
} else if (pContextName === "Activity") {
resultArray = db.array(db.ROW, "select ACTIVITYID, PARENT_ID, PARENT_CONTEXT, SUBJECT, INFO from ACTIVITY where ACTIVITYID = '" + pID +"'");
if (resultArray.length === 0) {
return null;
}
if (pGetFirst && resultArray[1] && resultArray[2])
return queryRootElement(resultArray[2], resultArray[1], pGetFirst);
if (pGetFirst)
{
fixedContextName = "Activity";
fixedID = resultArray[0];
}
return augmentData(resultArray, "Activity");
}
else if (pContextName === "SupportTicket") {
resultArray = db.array(db.ROW, "select TICKETID, PARENT_ID, PARENT_CONTEXT, SUBJECT, DESCRIPTION from TICKET left join TASK on TASK_ID = TASKID where TICKETID = '" + pID +"'");
if (resultArray.length === 0) {
return null;
}
if (pGetFirst && resultArray[1] && resultArray[2])
return queryRootElement(resultArray[2], resultArray[1], pGetFirst);
if (pGetFirst)
{
fixedContextName = "SupportTicket";
fixedID = resultArray[0];
}
return augmentData(resultArray, "SupportTicket");}
else {
return null;
}
}
/**
* Augments the given row to match the required result signature.
*
* @param pDataRow Requires the following format:
* UID, PARENT_ID, PARENT_CONTEXT, TITLE, DESCRIPTION
* @param pType The type of the row which needs adjustment.
* @return Returns the following format:
* UID, TYPE, PARENT_ID, PARENT_CONTEX, TITL, DESCRIPTION, ICON
*
*/
function augmentData (pDataRow, pType) {
if (pDataRow === null || pDataRow === undefined)
return null;
if (pDataRow.length === 0)
return null;
if (pType !== "Task" && pType !== "Activity" && pType !="SupportTicket")
return null;
// PARENT_ID check
if (pDataRow[2] === "")
pDataRow[2] = null;
// PARENT_CONTEXT check
if (pDataRow[3] === "")
pDataRow[3] = null;
// Insert type
pDataRow.splice(1, 0, pType);
// Insert icon
pDataRow.splice(6, 0, pType === "Task" ? "VAADIN:TASKS" : pType === "Activity" ? "VAADIN:HOURGLASS_END": pType==="SupportTicket" ? "VAADIN:QUESTION": null);
return pDataRow;
}