Calculate Field Values Dynamically
Automatically calculate field values based on other fields (e.g., calculate total cost, days between dates, percentage).
onChange Table: incident Field: u_quantity
#calculation #onChange #dynamic #math #auto-calculate #total
Script Code
JavaScript
1function onChange(control, oldValue, newValue, isLoading, isTemplate) {
2 // Exit if form is loading
3 if (isLoading) {
4 return;
5 }
6
7 // Example 1: Calculate total cost (quantity × unit price)
8 var quantity = parseFloat(g_form.getValue('u_quantity')) || 0;
9 var unitPrice = parseFloat(g_form.getValue('u_unit_price')) || 0;
10 var totalCost = quantity * unitPrice;
11
12 // Set the calculated total with proper formatting
13 g_form.setValue('u_total_cost', totalCost.toFixed(2));
14
15 // Optional: Show currency formatted value
16 if (totalCost > 0) {
17 var formattedTotal = '$' + totalCost.toFixed(2).replace(/\d(?=(\d{3})+\.)/g, '$&,');
18 g_form.showFieldMsg('u_total_cost', 'Total: ' + formattedTotal, 'info');
19 }
20
21 // Example 2: Calculate percentage
22 // Uncomment to enable
23 /*
24 var completed = parseFloat(g_form.getValue('u_completed_items')) || 0;
25 var total = parseFloat(g_form.getValue('u_total_items')) || 1; // Avoid division by zero
26 var percentage = (completed / total) * 100;
27
28 g_form.setValue('u_completion_percentage', percentage.toFixed(1));
29 */
30
31 // Example 3: Calculate days between dates
32 // Uncomment to enable
33 /*
34 var startDate = g_form.getValue('u_start_date');
35 var endDate = g_form.getValue('u_end_date');
36
37 if (startDate && endDate) {
38 var start = new Date(startDate);
39 var end = new Date(endDate);
40
41 // Calculate difference in days
42 var diffTime = Math.abs(end - start);
43 var diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
44
45 g_form.setValue('u_duration_days', diffDays);
46 g_form.showFieldMsg('u_duration_days', diffDays + ' days between dates', 'info');
47 }
48 */
49
50 // Example 4: Calculate discount and final price
51 // Uncomment to enable
52 /*
53 var originalPrice = parseFloat(g_form.getValue('u_original_price')) || 0;
54 var discountPercent = parseFloat(g_form.getValue('u_discount_percent')) || 0;
55
56 var discountAmount = originalPrice * (discountPercent / 100);
57 var finalPrice = originalPrice - discountAmount;
58
59 g_form.setValue('u_discount_amount', discountAmount.toFixed(2));
60 g_form.setValue('u_final_price', finalPrice.toFixed(2));
61 */
62
63 // Example 5: Calculate average
64 // Uncomment to enable
65 /*
66 var value1 = parseFloat(g_form.getValue('u_value_1')) || 0;
67 var value2 = parseFloat(g_form.getValue('u_value_2')) || 0;
68 var value3 = parseFloat(g_form.getValue('u_value_3')) || 0;
69
70 var average = (value1 + value2 + value3) / 3;
71 g_form.setValue('u_average', average.toFixed(2));
72 */
73
74 // Example 6: Calculate age from date of birth
75 // Uncomment to enable
76 /*
77 var dob = g_form.getValue('u_date_of_birth');
78 if (dob) {
79 var birthDate = new Date(dob);
80 var today = new Date();
81
82 var age = today.getFullYear() - birthDate.getFullYear();
83 var monthDiff = today.getMonth() - birthDate.getMonth();
84
85 if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
86 age--;
87 }
88
89 g_form.setValue('u_age', age);
90 }
91 */
92}
How to Use
1. Create onChange Client Scripts for relevant fields (quantity, price, dates, etc.)
2. Customize the calculation logic for your use case
3. Update field names to match your table structure
4. Uncomment additional calculation examples as needed
5. Consider adding the same script to onLoad to calculate values when form opens
6. Test with various numeric values and edge cases (zero, negative, decimals)
Related Scripts
Auto-populate Related Fields
Automatically populate fields when a reference field changes (e.g., populate caller's phone and email when caller is selected).
Conditional Mandatory Fields
Make fields mandatory based on the value of another field (e.g., require close notes only when state is Resolved).
Dynamic Field Visibility
Show or hide fields based on another field's value (e.g., show "Other reason" field only when user selects "Other" from dropdown).