Sitecore Rules Engine - decimal macro
Posted 16 October 2016 by Marek Musielak
Some time ago I worked on a project where we had access to plenty of numeric data stored in the fields of our content items. The plan was to use this data to personalize the content on the site. Some of the data was decimal numbers. I hoped to use a built-in Sitecore macro which would allow me to create a condition like
where the decimal value of field compares to number but to my surprise, there was no macro for decimal or any other floating point number.
I checked what macros are available in Sitecore out of the box. There were macros for
Treelist which both allow item selection. There was
DateTimeMacro, there was even
GenderMacro. But there was no
DecimalMacro or whatever we could call a macro which uses floating point numbers.
Ok, not a big deal. Lets check how
IntegerMacro works and write my custom macro for decimal numbers. When I decompiled
IntegerMacro and checked its code, I realized that I can create my custom condition without any coding.
IntegerMacro accepts additional parameters for validation regex and validation text which allows to create a condition which accepts floating point numbers.
Syntax of the parametrized list in the condition is:
so e.g. for a condition which uses
Tree macro, parametrized list in the condition can look like this:
And that's the 3rd parameters which allows custom logic for
IntegerMacro. You pass there 2 values:
- validation - url encoded regex for the input
- validationText - text used when the value of the input is incorrect
If they are not specified,
Please enter a valid integer value. parameters. So what I've done? I created new condition and passed encoded
Plase enter a valid decimal value. to the macro using:
where the decimal value of [FieldId,Tree,root=/sitecore/system/Settings/Rules/Definitions/My Custom Fields,field] [operatorid,Operator,,compares to] [value,Integer,validation=%5E%5Cd%2B(%5C.%5Cd%2B)%3F%24&validationText=Please enter a valid decimal value,number]
And that's it. Now when I used the condition, input field which allowed only integers before, accepts decimal numbers now.
And if you're interested in Sitecore Rules Engine, check out my previous blog post about Sitecore Insert Options Rules.