- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎06-27-2022 06:20 PM
On a Form I have 3 different Filed from Type currency.
The Values of these 3 fields are set by transform script/ spreadsheet upload. Example:
Open Amount : 600 $
Amount Paid: 0$
Amount Credited: 0$
The requirements is that if Amount Paid or Amount Credited are changed by the user in the form, that the Open Amount is calculated as Open Amount = Amount Paid + Amount Credited is updated in the form.
If for example Amount Paid is updated to 600$ then Open Amount should update in the form as 0$.
Alternative case is if Amount Paid is 400 and Amount Credited is 200, the Open Amount shall calculate to 0.
I wrote initially a Business Rule that works but then the value is re-calculated after form update button is checked, and I would like the user to actually see the Open Amount value change on the form before they update the form.
I think this can be accomplished by a Client Script, but I have not been able to make it work.
(my script below):
function onChange(control, oldValue, newValue, isLoading, isTemplate) {
if (isLoading || newValue === '') {
return;
}
//when any of the Amounts such Paid,Credited,Settled is updated Open Amount shall be re-calculated
var a1 = g_form.getValue('u_amount_credited');
var a2 = g_form.getValue('u_amount_paid');
var OpenAmount= g_form.getValue('u_open_amount')-a1-a2;
g_form.setValue('u_open_amount', OpenAmount);
}
What do I need to change for the script to work? Appreciate the help very much.
Greta
Solved! Go to Solution.

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎06-28-2022 10:31 AM
Hi,
Currency field are a bit special. If you use .getValue() within a client script on a currency field, you get both the currency and the value, example USD;600.00
And that notation will not work to make calculations on.
To only get the actual value, instead use the method g_form.getDecimalValue('field_name')
Also, when setting a currency value with a client script, you must include the currency in the same formatting.
So your code should look something like this:
var creditAmount = g_form.getDecimalValue('u_amount_credited');
var paidAmount = g_form.getDecimalValue('u_amount_paid');
var openAmount = g_form.getDecimalValue('u_open_amount');
var recalculatedAmount = openAmount - creditAmount - paidAmount;
g_form.setValue('u_open_amount', 'USD;' + recalculatedAmount);

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎06-27-2022 06:28 PM
Try updating this line
var OpenAmount= g_form.getValue('u_open_amount')-a1-a2;
to this
var OpenAmount= parseFloat(g_form.getValue('u_open_amount'))-parseFloat(a1)-parseFloat(a2);
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎06-28-2022 09:50 AM
Anirudh, tried it but it didn't fix the problem. The cell that has the calculation doesn't change.
I wonder whether I need a statement such as newValue ...

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎06-28-2022 10:31 AM
Hi,
Currency field are a bit special. If you use .getValue() within a client script on a currency field, you get both the currency and the value, example USD;600.00
And that notation will not work to make calculations on.
To only get the actual value, instead use the method g_form.getDecimalValue('field_name')
Also, when setting a currency value with a client script, you must include the currency in the same formatting.
So your code should look something like this:
var creditAmount = g_form.getDecimalValue('u_amount_credited');
var paidAmount = g_form.getDecimalValue('u_amount_paid');
var openAmount = g_form.getDecimalValue('u_open_amount');
var recalculatedAmount = openAmount - creditAmount - paidAmount;
g_form.setValue('u_open_amount', 'USD;' + recalculatedAmount);
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎06-28-2022 01:06 PM
OlaN,
Thank you, indeed these fields are Currency type.
1. Now amount is recalculated by the script, but it always returns 0$.
Seems that when
var creditAmount = g_form.getDecimalValue('u_amount_credited');
is executed no matter what amount I plug in, it always recalculates the OpenAmount to 0.
Seems that this logic is getting the old value of 0 for amount credited, before the change to the new value.
Also the "Enter" or carriage return does not trigger update, only the Tab triggers update. Any suggestions?