Data integrity is broken between currency fields and fx_currency_instance in recursive executionDescriptionData integrity is broken between currency fields and fx_currency_instance when in the GlideRecord objects are reused to update the currency field after it is inserted. This reuse of GlideRecord could be done in an after insert business rule or a custom script.Steps to Reproduce Business Rule case 1. Create a standalone table 'u_table1', then create a currency field 'u_field1' to it2. Create an After Insert business rule. In the Script of the business rule, put the following code:current.u_field1 = "USD;0.00";current.update();3. Create a new record in the 'u_table1' from the UI. Input something other than USD 0.00 to u_field1. e.g. $ 1000.00. Save the record.4. Check the created record in the UI, it'll show USD 0.00; check the fx_currency_instance record and it'll show USD 0.00 too; however, check the backend value of u_field1 from the database, it remains in 1000.00. Script case 1. Create a standalone table 'u_table1', then create a currency field 'u_field1' to it. 2. Create a script as below: var gr = new GlideRecord("u_table1");gr.initialize();gr.u_field1 = "USD;1000.00";gr.insert();gr.u_field1 = "USD;0.00";gr.update(); 3. Execute the script. 4. Check the created record in the UI, it'll show USD 0.00; check the fx_currency_instance record and it'll show USD 0.00 too; however, check the backend value of u_field1 from the database, it remains in 1000.00. WorkaroundThis problem is under review and targeted to be fixed in a future release. To receive notifications when more information becomes available, subscribe to this Known Error article by clicking the Subscribe button at the top right of this form. This kind of usage in the Business Rules should be always avoided, no fix is available when caused by a business rule. The workarounds when caused by a script is to create a new GlideRecord to do the update instead of reusing an old one. To fix the existing records with data integrity issues, the script below can be used to read the currency field 'u_field1' and then update it twice to have the correct value written into the database: var sysId = "SYS id Record with data integrity issue"; // modify this to correct sys idtry{ var gr = new GlideRecord("u_table1"); // modify to table name if(gr.get(sysId)){ var element = gr.getElement("u_field1"); // modify to currency field name var originalData = element.getFormattedCurrencyString(); gr.u_field1 = element.getCurrencyCode() + ";1203102984.00"; // update to any random value gr.update(); gr.u_field1 = originalData; gr.update(); }} catch(e) { gs.error("Not able to update the currency field for sys id " + sysId + " .Error: " + e);}Related Problem: PRB1544490