Hi, Jason again…
I have created the table Tasks. For every Task it is possible to set superior Task (link to table Task:Task).
I can now see Tasks in hierarchical view (GRID).
But I don’t know how to limit number of levels in hierarchy. In my case I need to limit to 3 levels.
thanks for the tip
Jason
Hello Jason,
thank you for an interesting question. It is good to know that you are using the hierarchy view.
There is a way how to control the level of nesting, it can be set by JavaScript:
const ticketTableId = ‘tasks’;
doo.model.isValid = true;
await parentTicketConstraint();
async function parentTicketConstraint() {
debugger;
const parentTicketCountPromise = calculateParentTicketsCount(doo.model.linkedField?.value?.id);
const childTicketCountPromise = calculateChildTicketsCount(doo.model.id);
const parentTicketCount = await parentTicketCountPromise;
const childTicketCount = await childTicketCountPromise;
if (parentTicketCount + childTicketCount >= 2) {
doo.model.isValid = false;
doo.toast.error('Tasks cannot have a nesting level greater than 2.', 'Error');
}
}
// returns count of Parent tickets of the current ticket
async function calculateParentTicketsCount(parentTicketId?: string): Promise<number> {
debugger;
if (!parentTicketId)
return 0;
const parentTicket = await doo.table.getRecord(ticketTableId, parentTicketId);
let parentsCount = await calculateParentTicketsCount(parentTicket.data?.fields?.linkedField?.id);
return parentsCount + 1;
}
// returns count of child tickets of the current ticket
async function calculateChildTicketsCount(ticketId?: string): Promise<number> {
debugger;
if (!ticketId)
return 0;
const childTickets = await doo.table.getLinkedRecordsV2(ticketTableId, ticketId, 'linkedField');
if (childTickets.data.length === 0)
return 0;
let promises = [];
for (let childTicket of childTickets.data) {
const promise = calculateChildTicketsCount(childTicket.id);
promises.push(promise);
}
let maxDepth = 0;
for (let promise of promises) {
let currentDepth = await promise;
if (maxDepth < currentDepth)
maxDepth = currentDepth;
}
return maxDepth + 1;
}
We would most likely use it in the section Before save as it is bound to the validity of the model.
I hope this helps you to manage your table even better.
Anna
1 Like
I will give it a try. Thanks Anna for fast answer.
Jason