Frequently used functions

This article contains examples of common functions

1. Calculate the sum of linked activities

let total = 0;

// Make sure you select correct dependencies
from the 'Linked From field' selection.

// Loop through the array of linked activities and
match against allowed fields (Total price)
for (let value of dep['Total price']) {
    total += value || 0;

// Use Math.round function to limit number of decicamls, and then return.
function round(input) {
    return Math.round(input * 100) / 100;

return round(total);

2. Calculate the actual project margin in percent (%)

let total = 0;

//Set project budget and cost, default to 0 if empty
const totalPrice = dep['Total Price'] || 0;
const totalCost = dep['Total Cost'] || 0;

total += (1-(totalCost / totalPrice))*100;

//Round total in return to keep numer of decimals and output clean
return Math.round(total*100)/100

3. Automatic naming of project activity 

// Fetch customer name when customer is selected in an activity link field 
// DO NOT USE dep['Customer'].name property
const customer = dep['Customer name'] || 'Customer not selected';

// Fetch project name
const project = dep['Project name'] || 'Project name missing';

// Return customer and project name
return customer + ' - ' + project;

4. Fetch unit price of the product but prevent a field from auto-updating and allow manual overwrite

// Set activity field and linkedTo field dependencies with same name
// Place activity field dep above linkedTo field dep
// Function will read activity field first, if empty, it will read linkedTo field.
// Field where this is returned is "Price per unit"
// Return current value if not 0 or null

return dep['Price per unit'] || 0;

5. Taking the values of two date fields into one date range field

return {start:dep['Start date'], end:dep['End date']};

Take a look at more examples in Bitbucket