HotDocs to Knackly Functions

Most, if not all functions available in HotDocs are available in Knackly.

HotDocs Function Native JavaScript equivalent Knackly Equivalent
TEXT + TEXT text + text

FIRST( TEXT, NUM ) text.substring(0, num) text.first(num) (extended String prototype)
INTEGER( TEXT ) Number.parseInt(text) text.toInt() (extended String prototype)
LAST( TEXT, NUM ) text.slice(-num) text.last(num) (extended String prototype)
LENGTH( TEXT ) text.length text.length
MID( TEXT, NUM, NUM ) text.substring(num, num) text.substring(num, num)
POSITION( TEXT, TEXT ) (case insensitive) text.indexOf(text) (case sensitive) text.indexOf(text) (case sensitive)
REPLACE( TEXT, TEXT, TEXT, NUM ) (case insensitive) text.replace(text, text) (case sensitive) text.replaceAll(text, text) (extended String prototype)
SPACE( TEXT, TEXT ) text ? text + " " : "" (ternary operator) text ? text + " " : "" (ternary operator)




STRIP( TEXT, TEXT, TRUE_FALSE, TRUE_FALSE )

text.strip(text, true_false, true_false) (extended String prototype)
TRIM( TEXT ) text.trim() text.trim()




NUM + NUM num + num num + num
NUM - NUM num - num num - num
NUM * NUM num * num num * num
NUM / NUM num / num num / num
ABSOLUTE VALUE( NUM ) Math.abs(num) math.abs(num)
CEILING( NUM ) Math.ceil(num) math.ceil(num)
EXPONENTIAL( NUM ) Math.exp(num) math.exp(num)
FLOOR( NUM ) Math.floor(num) math.floor(num)
LOGARITHM( NUM ) Math.log10(num) math.log10(num)
MAX( NUM, NUM ) Math.max(num, num, …) math.max(num, num, …)
MIN( NUM, NUM ) Math.min(num, num, …) math.min(num, num, …)
NATURAL LOGARITHM( NUM ) Math.log(num) math.log(num)
POWER( NUM, NUM ) Math.pow(num, num) math.pow(num, num)
REMAINDER( NUM, NUM ) num % num num % num
ROUND( NUM, NUM ) Math.round(num) math.round(num)
SQUARE ROOT( NUM ) Math.sqrt(num) math.sqrt(num)
TRUNCATE( NUM, NUM ) Math.trunc(num) math.trunc(num)
ZERO( NUM_VAR ) x ? x : 0 (conditional/ternary operator) x ? x : 0 (conditional/ternary operator)




FUTURE VALUE (RATE, TERM, PAYMENT, PRESENT VALUE, TYPE)

finance.FV()
PAYMENT (RATE, TERM, PRESENT VALUE, FUTURE VALUE, TYPE)

finance.PMT()
PRESENT VALUE (RATE, TERM, PAYMENT, FUTURE VALUE, TYPE)

finance.PV()
RATE (TERM, PAYMENT, PRESENT VALUE, FUTURE VALUE, TYPE)

finance.RATE()
TERM (RATE, PAYMENT, PRESENT VALUE, FUTURE VALUE, TYPE)

finance.NPER()




TODAY Date.now() date.today()
DATE + NUM DAYS
date.addDays(date, num)
DATE + NUM MONTHS
date.addMonths(date, num)
DATE + NUM YEARS
date.addYears(date, num)
DATE - NUM DAYS
date.subDays(date, num)
DATE - NUM MONTHS
date.subMonths(date, num)
DATE - NUM YEARS
date.subYears(date, num)
AGE( DATE )
date.age(date)
DATE OF( DAY, MONTH, YEAR ) new Date(year, month-1, day) date.new(year, month, day)
DAY OF( DATE ) date.getDate() date.dayOf(date)
DAY OF WEEK( DATE ) date.getDay() date.dayOfWeek(date)
DAYS FROM( START, FINISH )

date.daysBetween(date, date)
MONTH OF( DATE ) date.getMonth() date.monthOf(date)
MONTHS FROM( DATE, DATE )

date.monthsBetween(date, date)
YEAR OF( DATE ) date.getYear() date.yearOf(date)
YEARS FROM( DATE, DATE )

date.yearsBetween(date, date)




NOT TRUE_FALSE !true_false !true_false
TRUE_FALSE AND TRUE_FALSE true_false && true_false true_false && true_false
TRUE_FALSE OR TRUE_FALSE true_false || true_false true_false || true_false
TRUE_FALSE = TRUE_FALSE true_false == true_false true_false == true_false
TRUE_FALSE != TRUE_FALSE true_false != true_false true_false != true_false
TEXT = TEXT (case insensitive) text == text (case sensitive) text == text (case sensitive)
TEXT != TEXT (case insensitive) text != text (case sensitive) text != text (case sensitive)
TEXT CONTAINS TEXT (case insensitive) text.includes(text) (case sensitive) text.includes(text) (case sensitive)
TEXT ENDS WITH TEXT (case insensitive) text.endsWith(text) (case sensitive) text.endsWith(text) (case sensitive)
TEXT STARTS WITH TEXT (case insensitive) text.startsWith(text) (case sensitive) text.startsWith(text) (case sensitive)
TEXT < TEXT (case insensitive) text < text (case sensitive) text < text (case sensitive)
TEXT <= TEXT (case insensitive) text <= text (case sensitive) text <= text (case sensitive)
TEXT > TEXT (case insensitive) text > text (case sensitive) text > text (case sensitive)
TEXT >= TEXT (case insensitive) text >= text (case sensitive) text >= text (case sensitive)
MULT_CHOICE = TEXT (case insensitive) array.includes(text) (case sensitive) array.includes(text) (case sensitive)
MULT_CHOICE != TEXT (case insensitive) !array.includes(text) (case sensitive) !array.includes(text) (case sensitive)




NUM = NUM num == num num == num
NUM != NUM num != num num != num
NUM < NUM num < num num < num
NUM <= NUM num <= num num <= num
NUM > NUM num > num num > num
NUM >= NUM num >= num num >= num
DATE = DATE
date.isEqualTo( date ) (extended Date prototype)
DATE != DATE
date.isNotEqualTo( date ) (extended Date prototype)
DATE < DATE
date.isBefore( date ) (extended Date prototype)
DATE <= DATE
date.isNotAfter( date ) (extended Date prototype)
DATE > DATE
date.isAfter( date ) (extended Date prototype)
DATE >= DATE
date.isNotBefore( date ) (extended Date prototype)




ANSWERED( VAR ) x (check the var's 'truthiness') x (check the var's 'truthiness')
ANSWERED( DIALOG )


FORMAT( VALUE, "EXAMPLE" )
see "filters" document
UNANSWERED null null
VALUE( VAR, EXPRESSION ) x ? x : expression x ? x : expression




COUNT( DIALOG ) array.length array.length
COUNT( MULT_CHOICE_VAR ) array.length array.length
COUNTER
_index, _index0
note also _parent, which HotDocs did not have
SUM( COMPUTATION_VAR )



SUM( NUM_VAR )


SELECTION( MULT_CHOICE_VAR, NUM ) array[num] array[num]
OTHER( MULT_CHOICE_VAR )

n/a
UNION( MULT_CHOICE, MULT_CHOICE ) array.concat(array) array.concat(array)
Did this answer your question? Thanks for the feedback There was a problem submitting your feedback. Please try again later.

Still need help? Contact Us Contact Us