Skip to main content
New Member
Apr 27, 2020 2:24 PM UTC
Solved

Converting and altering value in personalisation block

Hi,

 

First post, new to the platform so hoping so clever people can point me in the right direction! I'm trying to set up a personalisation block so I can convert a variable - but I'm struggling!

 

I have an XML string, I'm trying to extract a cost value (e.g. £1,509.10) from the string convert into a number (1,509.10), so I can subtract 10 from it). Any idea how to do this.

 

I've got as far as defining a variable for the XML string in the email - and I can pull out the variable and get rid of the £ sign with something like;

 

<%= escapeXmlStr(ctx.messageMetadata.MainCost.CostAmount).substr(1,10)%>

 

I'm stuck beyond this - any help appreciated.

This post is no longer active and is closed to new replies. Need help? Start a new post to ask your question.
Darren_Bowers
Darren_BowersAccepted solution
Level 9
Apr 28, 2020 12:09 AM UTC

Hi @tarquinius your post was a bit ambiguous. Did you want to remove the decimal part of the value (£1,509) or subtract 10 from the value (£1,499.10)? By the looks of your sample code you posted, its the first one. Anyway, here are both answers:

I am assuming your XML data looks something like this

 

<ctx> <messageMetadata> <MainCost> <CostAmount>£1,509.10</CostAmount> </MainCost> </messageMetadata> </ctx>

 

(a) - uses String.split() to get everything in front of the decimal point.(output £1,509)

 

<%= escapeXmlStr(ctx.messageMetadata.MainCost.CostAmount.toString()).split(".")[0] %>

 

(b) - removes all non-numeric characters from the string, converts it to a float, subtracts 10, then sets the decimal places to two, converts back to a string and replaces the thousands separator back in (output £1,499.10)

 

<%= '£'+(parseFloat(escapeXmlStr(ctx.messageMetadata.MainCost.CostAmount.toString()).replace(/[^0-9.]/g, ''))-10).toFixed(2).toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,') %>

 

4 replies

Darren_Bowers
Darren_BowersAccepted solution
Level 9
Apr 28, 2020 12:09 AM UTC

Hi @tarquinius your post was a bit ambiguous. Did you want to remove the decimal part of the value (£1,509) or subtract 10 from the value (£1,499.10)? By the looks of your sample code you posted, its the first one. Anyway, here are both answers:

I am assuming your XML data looks something like this

 

<ctx> <messageMetadata> <MainCost> <CostAmount>£1,509.10</CostAmount> </MainCost> </messageMetadata> </ctx>

 

(a) - uses String.split() to get everything in front of the decimal point.(output £1,509)

 

<%= escapeXmlStr(ctx.messageMetadata.MainCost.CostAmount.toString()).split(".")[0] %>

 

(b) - removes all non-numeric characters from the string, converts it to a float, subtracts 10, then sets the decimal places to two, converts back to a string and replaces the thousands separator back in (output £1,499.10)

 

<%= '£'+(parseFloat(escapeXmlStr(ctx.messageMetadata.MainCost.CostAmount.toString()).replace(/[^0-9.]/g, ''))-10).toFixed(2).toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,') %>

 

Translate
Darren_Bowers
Level 9
Apr 28, 2020 12:16 AM UTC

<removed> - added to original post

Translate