Modified: nifi/site/trunk/docs/nifi-docs/html/expression-language-guide.html URL: http://svn.apache.org/viewvc/nifi/site/trunk/docs/nifi-docs/html/expression-language-guide.html?rev=1771892&r1=1771891&r2=1771892&view=diff ============================================================================== --- nifi/site/trunk/docs/nifi-docs/html/expression-language-guide.html (original) +++ nifi/site/trunk/docs/nifi-docs/html/expression-language-guide.html Tue Nov 29 12:03:34 2016 @@ -455,127 +455,132 @@ body.book #toc,body.book #preamble,body. <div id="toc" class="toc"> <div id="toctitle">Table of Contents</div> <ul class="sectlevel1"> -<li><a href="expression-language-guide.html#overview">Overview</a></li> -<li><a href="expression-language-guide.html#structure">Structure of a NiFi Expression</a></li> -<li><a href="expression-language-guide.html#usage">Expression Language in the Application</a> +<li><a href="#overview">Overview</a></li> +<li><a href="#structure">Structure of a NiFi Expression</a></li> +<li><a href="#usage">Expression Language in the Application</a> <ul class="sectlevel2"> -<li><a href="expression-language-guide.html#editor">Expression Language Editor</a></li> +<li><a href="#editor">Expression Language Editor</a></li> </ul> </li> -<li><a href="expression-language-guide.html#functions">Functions</a> +<li><a href="#functions">Functions</a> <ul class="sectlevel2"> -<li><a href="expression-language-guide.html#types">Data Types</a></li> +<li><a href="#types">Data Types</a></li> </ul> </li> -<li><a href="expression-language-guide.html#boolean">Boolean Logic</a> +<li><a href="#boolean">Boolean Logic</a> <ul class="sectlevel2"> -<li><a href="expression-language-guide.html#isnull">isNull</a></li> -<li><a href="expression-language-guide.html#notnull">notNull</a></li> -<li><a href="expression-language-guide.html#isempty">isEmpty</a></li> -<li><a href="expression-language-guide.html#equals">equals</a></li> -<li><a href="expression-language-guide.html#equalsignorecase">equalsIgnoreCase</a></li> -<li><a href="expression-language-guide.html#gt">gt</a></li> -<li><a href="expression-language-guide.html#ge">ge</a></li> -<li><a href="expression-language-guide.html#lt">lt</a></li> -<li><a href="expression-language-guide.html#le">le</a></li> -<li><a href="expression-language-guide.html#and">and</a></li> -<li><a href="expression-language-guide.html#or">or</a></li> -<li><a href="expression-language-guide.html#not">not</a></li> +<li><a href="#isnull">isNull</a></li> +<li><a href="#notnull">notNull</a></li> +<li><a href="#isempty">isEmpty</a></li> +<li><a href="#equals">equals</a></li> +<li><a href="#equalsignorecase">equalsIgnoreCase</a></li> +<li><a href="#gt">gt</a></li> +<li><a href="#ge">ge</a></li> +<li><a href="#lt">lt</a></li> +<li><a href="#le">le</a></li> +<li><a href="#and">and</a></li> +<li><a href="#or">or</a></li> +<li><a href="#not">not</a></li> </ul> </li> -<li><a href="expression-language-guide.html#strings">String Manipulation</a> +<li><a href="#strings">String Manipulation</a> <ul class="sectlevel2"> -<li><a href="expression-language-guide.html#toupper">toUpper</a></li> -<li><a href="expression-language-guide.html#tolower">toLower</a></li> -<li><a href="expression-language-guide.html#trim">trim</a></li> -<li><a href="expression-language-guide.html#substring">substring</a></li> -<li><a href="expression-language-guide.html#substringbefore">substringBefore</a></li> -<li><a href="expression-language-guide.html#substringbeforelast">substringBeforeLast</a></li> -<li><a href="expression-language-guide.html#substringafter">substringAfter</a></li> -<li><a href="expression-language-guide.html#substringafterlast">substringAfterLast</a></li> -<li><a href="expression-language-guide.html#getdelimitedfield">getDelimitedField</a></li> -<li><a href="expression-language-guide.html#append">append</a></li> -<li><a href="expression-language-guide.html#prepend">prepend</a></li> -<li><a href="expression-language-guide.html#replace">replace</a></li> -<li><a href="expression-language-guide.html#replacefirst">replaceFirst</a></li> -<li><a href="expression-language-guide.html#replaceall">replaceAll</a></li> -<li><a href="expression-language-guide.html#replacenull">replaceNull</a></li> -<li><a href="expression-language-guide.html#replaceempty">replaceEmpty</a></li> -<li><a href="expression-language-guide.html#length">length</a></li> +<li><a href="#toupper">toUpper</a></li> +<li><a href="#tolower">toLower</a></li> +<li><a href="#trim">trim</a></li> +<li><a href="#substring">substring</a></li> +<li><a href="#substringbefore">substringBefore</a></li> +<li><a href="#substringbeforelast">substringBeforeLast</a></li> +<li><a href="#substringafter">substringAfter</a></li> +<li><a href="#substringafterlast">substringAfterLast</a></li> +<li><a href="#getdelimitedfield">getDelimitedField</a></li> +<li><a href="#append">append</a></li> +<li><a href="#prepend">prepend</a></li> +<li><a href="#replace">replace</a></li> +<li><a href="#replacefirst">replaceFirst</a></li> +<li><a href="#replaceall">replaceAll</a></li> +<li><a href="#replacenull">replaceNull</a></li> +<li><a href="#replaceempty">replaceEmpty</a></li> +<li><a href="#length">length</a></li> </ul> </li> -<li><a href="expression-language-guide.html#encode">Encode/Decode Functions</a> +<li><a href="#encode">Encode/Decode Functions</a> <ul class="sectlevel2"> -<li><a href="expression-language-guide.html#escapejson">escapeJson</a></li> -<li><a href="expression-language-guide.html#escapexml">escapeXml</a></li> -<li><a href="expression-language-guide.html#escapecsv">escapeCsv</a></li> -<li><a href="expression-language-guide.html#escapehtml3">escapeHtml3</a></li> -<li><a href="expression-language-guide.html#escapehtml4">escapeHtml4</a></li> -<li><a href="expression-language-guide.html#unescapejson">unescapeJson</a></li> -<li><a href="expression-language-guide.html#unescapexml">unescapeXml</a></li> -<li><a href="expression-language-guide.html#unescapecsv">unescapeCsv</a></li> -<li><a href="expression-language-guide.html#unescapehtml3">unescapeHtml3</a></li> -<li><a href="expression-language-guide.html#unescapehtml4">unescapeHtml4</a></li> -<li><a href="expression-language-guide.html#urlencode">urlEncode</a></li> -<li><a href="expression-language-guide.html#urldecode">urlDecode</a></li> +<li><a href="#escapejson">escapeJson</a></li> +<li><a href="#escapexml">escapeXml</a></li> +<li><a href="#escapecsv">escapeCsv</a></li> +<li><a href="#escapehtml3">escapeHtml3</a></li> +<li><a href="#escapehtml4">escapeHtml4</a></li> +<li><a href="#unescapejson">unescapeJson</a></li> +<li><a href="#unescapexml">unescapeXml</a></li> +<li><a href="#unescapecsv">unescapeCsv</a></li> +<li><a href="#unescapehtml3">unescapeHtml3</a></li> +<li><a href="#unescapehtml4">unescapeHtml4</a></li> +<li><a href="#urlencode">urlEncode</a></li> +<li><a href="#urldecode">urlDecode</a></li> +<li><a href="#base64encode">base64Encode</a></li> +<li><a href="#base64decode">base64Decode</a></li> </ul> </li> -<li><a href="expression-language-guide.html#searching">Searching</a> +<li><a href="#searching">Searching</a> <ul class="sectlevel2"> -<li><a href="expression-language-guide.html#startswith">startsWith</a></li> -<li><a href="expression-language-guide.html#endswith">endsWith</a></li> -<li><a href="expression-language-guide.html#contains">contains</a></li> -<li><a href="expression-language-guide.html#in">in</a></li> -<li><a href="expression-language-guide.html#find">find</a></li> -<li><a href="expression-language-guide.html#matches">matches</a></li> -<li><a href="expression-language-guide.html#indexof">indexOf</a></li> -<li><a href="expression-language-guide.html#lastindexof">lastIndexOf</a></li> -<li><a href="expression-language-guide.html#jsonpath">jsonPath</a></li> +<li><a href="#startswith">startsWith</a></li> +<li><a href="#endswith">endsWith</a></li> +<li><a href="#contains">contains</a></li> +<li><a href="#in">in</a></li> +<li><a href="#find">find</a></li> +<li><a href="#matches">matches</a></li> +<li><a href="#indexof">indexOf</a></li> +<li><a href="#lastindexof">lastIndexOf</a></li> +<li><a href="#jsonpath">jsonPath</a></li> </ul> </li> -<li><a href="expression-language-guide.html#numbers">Mathematical Operations and Numeric Manipulation</a> +<li><a href="#numbers">Mathematical Operations and Numeric Manipulation</a> <ul class="sectlevel2"> -<li><a href="expression-language-guide.html#plus">plus</a></li> -<li><a href="expression-language-guide.html#minus">minus</a></li> -<li><a href="expression-language-guide.html#multiply">multiply</a></li> -<li><a href="expression-language-guide.html#divide">divide</a></li> -<li><a href="expression-language-guide.html#mod">mod</a></li> -<li><a href="expression-language-guide.html#toradix">toRadix</a></li> -<li><a href="expression-language-guide.html#random">random</a></li> +<li><a href="#plus">plus</a></li> +<li><a href="#minus">minus</a></li> +<li><a href="#multiply">multiply</a></li> +<li><a href="#divide">divide</a></li> +<li><a href="#mod">mod</a></li> +<li><a href="#toradix">toRadix</a></li> +<li><a href="#fromradix">fromRadix</a></li> +<li><a href="#random">random</a></li> +<li><a href="#math">math</a></li> </ul> </li> -<li><a href="expression-language-guide.html#dates">Date Manipulation</a> +<li><a href="#dates">Date Manipulation</a> <ul class="sectlevel2"> -<li><a href="expression-language-guide.html#format">format</a></li> -<li><a href="expression-language-guide.html#todate">toDate</a></li> -<li><a href="expression-language-guide.html#now">now</a></li> +<li><a href="#format">format</a></li> +<li><a href="#todate">toDate</a></li> +<li><a href="#now">now</a></li> </ul> </li> -<li><a href="expression-language-guide.html#type_cast">Type Coercion</a> +<li><a href="#type_cast">Type Coercion</a> <ul class="sectlevel2"> -<li><a href="expression-language-guide.html#tostring">toString</a></li> -<li><a href="expression-language-guide.html#tonumber">toNumber</a></li> +<li><a href="#tostring">toString</a></li> +<li><a href="#tonumber">toNumber</a></li> +<li><a href="#todecimal">toDecimal</a></li> </ul> </li> -<li><a href="expression-language-guide.html#subjectless">Subjectless Functions</a> +<li><a href="#subjectless">Subjectless Functions</a> <ul class="sectlevel2"> -<li><a href="expression-language-guide.html#ip">ip</a></li> -<li><a href="expression-language-guide.html#hostname">hostname</a></li> -<li><a href="expression-language-guide.html#uuid">UUID</a></li> -<li><a href="expression-language-guide.html#nextint">nextInt</a></li> -<li><a href="expression-language-guide.html#literal">literal</a></li> +<li><a href="#ip">ip</a></li> +<li><a href="#hostname">hostname</a></li> +<li><a href="#uuid">UUID</a></li> +<li><a href="#nextint">nextInt</a></li> +<li><a href="#literal">literal</a></li> </ul> </li> -<li><a href="expression-language-guide.html#multi">Evaluating Multiple Attributes</a> +<li><a href="#multi">Evaluating Multiple Attributes</a> <ul class="sectlevel2"> -<li><a href="expression-language-guide.html#anyattribute">anyAttribute</a></li> -<li><a href="expression-language-guide.html#allattributes">allAttributes</a></li> -<li><a href="expression-language-guide.html#anymatchingattribute">anyMatchingAttribute</a></li> -<li><a href="expression-language-guide.html#allmatchingattributes">allMatchingAttributes</a></li> -<li><a href="expression-language-guide.html#anydelineatedvalue">anyDelineatedValue</a></li> -<li><a href="expression-language-guide.html#alldelineatedvalues">allDelineatedValues</a></li> -<li><a href="expression-language-guide.html#join">join</a></li> -<li><a href="expression-language-guide.html#count">count</a></li> +<li><a href="#anyattribute">anyAttribute</a></li> +<li><a href="#allattributes">allAttributes</a></li> +<li><a href="#anymatchingattribute">anyMatchingAttribute</a></li> +<li><a href="#allmatchingattributes">allMatchingAttributes</a></li> +<li><a href="#anydelineatedvalue">anyDelineatedValue</a></li> +<li><a href="#alldelineatedvalues">allDelineatedValues</a></li> +<li><a href="#join">join</a></li> +<li><a href="#count">count</a></li> </ul> </li> </ul> @@ -583,7 +588,7 @@ body.book #toc,body.book #preamble,body. </div> <div id="content"> <div class="sect1"> -<h2 id="overview"><a class="anchor" href="expression-language-guide.html#overview"></a>Overview</h2> +<h2 id="overview"><a class="anchor" href="#overview"></a>Overview</h2> <div class="sectionbody"> <div class="paragraph"> <p>All data in Apache NiFi is represented by an abstraction called a FlowFile. @@ -615,7 +620,7 @@ and manipulate their values.</p> </div> </div> <div class="sect1"> -<h2 id="structure"><a class="anchor" href="expression-language-guide.html#structure"></a>Structure of a NiFi Expression</h2> +<h2 id="structure"><a class="anchor" href="#structure"></a>Structure of a NiFi Expression</h2> <div class="sectionbody"> <div class="paragraph"> <p>The NiFi Expression Language always begins with the start delimiter <code>${</code> and ends @@ -639,7 +644,7 @@ by the Expression Language to achieve ma manipulation, such as the <code>toUpper</code> function. Others, such as the <code>equals</code> and <code>matches</code> functions, provide comparison functionality. Functions also exist for manipulating dates and times and for performing mathematical operations. Each of these functions is described below, in the -<a href="expression-language-guide.html#functions">Functions</a> section, with an explanation of what the function does, the arguments that it +<a href="#functions">Functions</a> section, with an explanation of what the function does, the arguments that it requires, and the type of information that it returns.</p> </div> <div class="paragraph"> @@ -730,7 +735,7 @@ the Expression Language will return a <c <p>There also exist some functions that expect to have no subject. These functions are invoked simply by calling the function at the beginning of the Expression, such as <code>${hostname()}</code>. These functions can then be changed together, as well. For example, <code>${hostname():toUpper()}</code>. Attempting to -evaluate the function with subject will result in an error. In the <a href="expression-language-guide.html#functions">Functions</a> +evaluate the function with subject will result in an error. In the <a href="#functions">Functions</a> section below, these functions will clearly indicate in their descriptions that they do not require a subject.</p> </div> @@ -749,7 +754,7 @@ in <code>file</code> and <code>name</cod </div> </div> <div class="sect1"> -<h2 id="usage"><a class="anchor" href="expression-language-guide.html#usage"></a>Expression Language in the Application</h2> +<h2 id="usage"><a class="anchor" href="#usage"></a>Expression Language in the Application</h2> <div class="sectionbody"> <div class="paragraph"> <p>The Expression Language is used heavily throughout the NiFi application for configuring Processor @@ -761,14 +766,14 @@ whether or not the Expression Language i <div class="paragraph"> <p>In the application, when configuring a Processor property, the User Interface provides an Information icon ( -<span class="image"><img src="images/iconInfo.png" alt="Info"></span> +<span class="image"><img src="./images/iconInfo.png" alt="Info"></span> ) next to the name of the Property. Hovering over this icon with the mouse will provide a tooltip that provides helpful information about the Property. This information includes a description of the Property, the default value (if any), historically configured values (if any), and whether or not this Property supports the expression language.</p> </div> <div class="sect2"> -<h3 id="editor"><a class="anchor" href="expression-language-guide.html#editor"></a>Expression Language Editor</h3> +<h3 id="editor"><a class="anchor" href="#editor"></a>Expression Language Editor</h3> <div class="paragraph"> <p>When configuring the value of a Processor property, the NiFi User Interface provides help with the Expression Language using the Expression Language editor. Once an Expression is begin by typing <code>${</code>, @@ -789,17 +794,17 @@ it with the mouse or using the arrow key </div> </div> <div class="sect1"> -<h2 id="functions"><a class="anchor" href="expression-language-guide.html#functions"></a>Functions</h2> +<h2 id="functions"><a class="anchor" href="#functions"></a>Functions</h2> <div class="sectionbody"> <div class="paragraph"> <p>Functions provide a convenient way to manipulate and compare values of attributes. The Expression Language provides many different functions to meet the needs of a automated dataflow. Each function takes zero or more arguments and returns a single value. These functions can then be chained together to create -powerful Expressions to evaluate conditions and manipulate values. See <a href="expression-language-guide.html#structure">Structure of a NiFi Expression</a> for more information +powerful Expressions to evaluate conditions and manipulate values. See <a href="#structure">Structure of a NiFi Expression</a> for more information on how to call and chain functions together.</p> </div> <div class="sect2"> -<h3 id="types"><a class="anchor" href="expression-language-guide.html#types"></a>Data Types</h3> +<h3 id="types"><a class="anchor" href="#types"></a>Data Types</h3> <div class="paragraph"> <p>Each argument to a function and each value returned from a function has a specific data type. The Expression Language supports four different data types:</p> @@ -811,12 +816,31 @@ Language supports four different data ty special characters.</p> </li> <li> -<p><strong>Number</strong>: A Number is an integer comprised of one or more digits (<code>0</code> through <code>9</code>). The Expression Language -does not provide support for fractional numbers. When converting to numbers from Date data types, they are represented as +<p><strong>Number</strong>: A Number is an whole number comprised of one or more digits (<code>0</code> through <code>9</code>). When converting to numbers from Date data types, they are represented as the number of milliseconds since midnight GMT on January 1, 1970.</p> </li> <li> -<p><strong>Date</strong>: A Date is an object that holds a Date and Time. Utilizing the <a href="expression-language-guide.html#dates">Date Manipulation</a> and <a href="expression-language-guide.html#type_cast">Type Coercion</a> functions this data +<p><strong>Decimal</strong>: A Decimal is a numeric value that can support decimals and larger values with minimal loss of precision. More precisely it +is a double-precision 64-bit IEEE 754 floating point. Due to this minimal loss of precision this data type should not be used for +very precise values, such as currency. For more documentation on the range of values stored in this data type +refer to this <a href="https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.3">link</a>. The following are some examples of the forms of +literal decimals that are supported in expression language (the "E" can also be lower-case):</p> +<div class="ulist"> +<ul> +<li> +<p>1.1</p> +</li> +<li> +<p>.1E1</p> +</li> +<li> +<p>1.11E-12</p> +</li> +</ul> +</div> +</li> +<li> +<p><strong>Date</strong>: A Date is an object that holds a Date and Time. Utilizing the <a href="#dates">Date Manipulation</a> and <a href="#type_cast">Type Coercion</a> functions this data type can be converted to/from Strings and numbers. If the whole Expression Language expression is evaluated to be a date then it will be converted to a String with the format: "<Day of Week> <Month> <Day of Month> <Hour>:<Minute>:<Second> <Time Zone> <Year>". Also expressed as "E MMM dd HH:mm:ss z yyyy" in Java SimpleDateFormat format. For example: "Wed Dec 31 12:00:04 UTC 2016".</p> @@ -827,18 +851,32 @@ Also expressed as "E MMM dd HH:mm:ss z y </ul> </div> <div class="paragraph"> -<p>All attributes are considered to be of type String.</p> +<p>After evaluating expression language functions, all attributes are stored as type String.</p> </div> <div class="paragraph"> <p>The Expression Language is generally able to automatically coerce a value of one data type to the appropriate data type for a function. However, functions do exist to manually coerce a value into a specific data type. -See the <a href="expression-language-guide.html#type_cast">Type Coercion</a> section for more information.</p> +See the <a href="#type_cast">Type Coercion</a> section for more information.</p> +</div> +<div class="paragraph"> +<p>Hex values are supported for Number and Decimal types but they must be quoted and prepended with "0x" when being +interpreted as literals. For example these two expressions are valid (without the quotes or "0x" the expression would fail to run properly):</p> +</div> +<div class="ulist"> +<ul> +<li> +<p>${literal("0xF"):toNumber()}</p> +</li> +<li> +<p>${literal("0xF.Fp10"):toDecimal()}</p> +</li> +</ul> </div> </div> </div> </div> <div class="sect1"> -<h2 id="boolean"><a class="anchor" href="expression-language-guide.html#boolean"></a>Boolean Logic</h2> +<h2 id="boolean"><a class="anchor" href="#boolean"></a>Boolean Logic</h2> <div class="sectionbody"> <div class="paragraph"> <p>One of the most powerful features of the Expression Language is the ability to compare an attribute value against @@ -847,7 +885,7 @@ functions are used for performing boolea Each of these functions returns a value of type Boolean.</p> </div> <div class="sect2 function"> -<h3 id="isnull"><a class="anchor" href="expression-language-guide.html#isnull"></a>isNull</h3> +<h3 id="isnull"><a class="anchor" href="#isnull"></a>isNull</h3> <div class="paragraph"> <p><strong>Description</strong>: <span class="description">The <code>isNull</code> function returns <code>true</code> if the subject is null, <code>false</code> otherwise. This is typically used to determine if an attribute exists.</span></p> @@ -867,7 +905,7 @@ if an attribute exists.</span></p> </div> </div> <div class="sect2 function"> -<h3 id="notnull"><a class="anchor" href="expression-language-guide.html#notnull"></a>notNull</h3> +<h3 id="notnull"><a class="anchor" href="#notnull"></a>notNull</h3> <div class="paragraph"> <p><strong>Description</strong>: <span class="description">The <code>notNull</code> function returns the opposite value of the <code>isNull</code> function. That is, it will return <code>true</code> if the subject exists and <code>false</code> otherwise.</span></p> @@ -887,7 +925,7 @@ subject exists and <code>false</code> ot </div> </div> <div class="sect2 function"> -<h3 id="isempty"><a class="anchor" href="expression-language-guide.html#isempty"></a>isEmpty</h3> +<h3 id="isempty"><a class="anchor" href="#isempty"></a>isEmpty</h3> <div class="paragraph"> <p><strong>Description</strong>: <span class="description">The <code>isEmpty</code> function returns <code>true</code> if the Subject is null or contains only white-space (new line, carriage return, space, tab), <code>false</code> otherwise.</span></p> @@ -907,11 +945,11 @@ subject exists and <code>false</code> ot </div> </div> <div class="sect2 function"> -<h3 id="equals"><a class="anchor" href="expression-language-guide.html#equals"></a>equals</h3> +<h3 id="equals"><a class="anchor" href="#equals"></a>equals</h3> <div class="paragraph description"> <p><strong>Description</strong>: <span class="description">The <code>equals</code> function is very widely used and determines if its subject is equal to another String value. Note that the <code>equals</code> function performs a direct comparison of two String values. Take care not to confuse this - function with the <a href="expression-language-guide.html#matches">matches</a> function, which evaluates its subject against a Regular Expression.</span></p> + function with the <a href="#matches">matches</a> function, which evaluates its subject against a Regular Expression.</span></p> </div> <div class="paragraph subject"> <p><strong>Subject Type</strong>: <span class="subject">Any</span></p> @@ -937,7 +975,7 @@ or we could check if the value of the at </div> </div> <div class="sect2 function"> -<h3 id="equalsignorecase"><a class="anchor" href="expression-language-guide.html#equalsignorecase"></a>equalsIgnoreCase</h3> +<h3 id="equalsignorecase"><a class="anchor" href="#equalsignorecase"></a>equalsIgnoreCase</h3> <div class="paragraph"> <p><strong>Description</strong>: <span class="description">Similar to the <code>equals</code> function, the <code>equalsIgnoreCase</code> function compares its subject against a String value but returns <code>true</code> if the two values differ only by case (upper case vs. lower case).</span></p> @@ -964,7 +1002,7 @@ or we could check if the value of the at </div> </div> <div class="sect2 function"> -<h3 id="gt"><a class="anchor" href="expression-language-guide.html#gt"></a>gt</h3> +<h3 id="gt"><a class="anchor" href="#gt"></a>gt</h3> <div class="paragraph"> <p><strong>Description</strong>: <span class="description">The <code>gt</code> function is used for numeric comparison and returns <code>true</code> if the subject is Greater Than its argument. If either the subject or the argument cannot be coerced into a Number, @@ -992,7 +1030,7 @@ or we could check if the value of the at </div> </div> <div class="sect2 function"> -<h3 id="ge"><a class="anchor" href="expression-language-guide.html#ge"></a>ge</h3> +<h3 id="ge"><a class="anchor" href="#ge"></a>ge</h3> <div class="paragraph"> <p><strong>Description</strong>: <span class="description">The <code>ge</code> function is used for numeric comparison and returns <code>true</code> if the subject is Greater Than Or Equal To its argument. If either the subject or the argument cannot be coerced into a Number, @@ -1020,7 +1058,7 @@ or we could check if the value of the at </div> </div> <div class="sect2 function"> -<h3 id="lt"><a class="anchor" href="expression-language-guide.html#lt"></a>lt</h3> +<h3 id="lt"><a class="anchor" href="#lt"></a>lt</h3> <div class="paragraph"> <p><strong>Description</strong>: <span class="description">The <code>lt</code> function is used for numeric comparison and returns <code>true</code> if the subject is Less Than its argument. If either the subject or the argument cannot be coerced into a Number, @@ -1048,7 +1086,7 @@ or we could check if the value of the at </div> </div> <div class="sect2 function"> -<h3 id="le"><a class="anchor" href="expression-language-guide.html#le"></a>le</h3> +<h3 id="le"><a class="anchor" href="#le"></a>le</h3> <div class="paragraph"> <p><strong>Description</strong>: <span class="description">The <code>le</code> function is used for numeric comparison and returns <code>true</code> if the subject is Less Than Or Equal To its argument. If either the subject or the argument cannot be coerced into a Number, @@ -1076,7 +1114,7 @@ or we could check if the value of the at </div> </div> <div class="sect2 function"> -<h3 id="and"><a class="anchor" href="expression-language-guide.html#and"></a>and</h3> +<h3 id="and"><a class="anchor" href="#and"></a>and</h3> <div class="paragraph"> <p><strong>Description</strong>: <span class="description">The <code>and</code> function takes as a single argument a Boolean value and returns <code>true</code> if both the Subject and the argument are <code>true</code>. If either the subject or the argument is <code>false</code> or cannot be coerced into a Boolean, @@ -1110,7 +1148,7 @@ or we could check if the value of the at </div> </div> <div class="sect2 function"> -<h3 id="or"><a class="anchor" href="expression-language-guide.html#or"></a>or</h3> +<h3 id="or"><a class="anchor" href="#or"></a>or</h3> <div class="paragraph"> <p><strong>Description</strong>: <span class="description">The <code>or</code> function takes as a single argument a Boolean value and returns <code>true</code> if either the Subject or the argument is <code>true</code>. If both the subject and the argument are <code>false</code>, the function returns <code>false</code>. If @@ -1145,7 +1183,7 @@ or we could check if the value of the at </div> </div> <div class="sect2 function"> -<h3 id="not"><a class="anchor" href="expression-language-guide.html#not"></a>not</h3> +<h3 id="not"><a class="anchor" href="#not"></a>not</h3> <div class="paragraph description"> <p><strong>Description</strong>: <span class="description">The <code>not</code> function returns the negation of the Boolean value of the subject.</span></p> </div> @@ -1167,13 +1205,13 @@ or we could check if the value of the at </div> </div> <div class="sect1"> -<h2 id="strings"><a class="anchor" href="expression-language-guide.html#strings"></a>String Manipulation</h2> +<h2 id="strings"><a class="anchor" href="#strings"></a>String Manipulation</h2> <div class="sectionbody"> <div class="paragraph"> <p>Each of the following functions manipulates a String in some way.</p> </div> <div class="sect2 function"> -<h3 id="toupper"><a class="anchor" href="expression-language-guide.html#toupper"></a>toUpper</h3> +<h3 id="toupper"><a class="anchor" href="#toupper"></a>toUpper</h3> <div class="paragraph"> <p><strong>Description</strong>: <span class="description">This function converts the Subject into an all upper-case String. Said another way, it replaces any lowercase letter with the uppercase equivalent.</span></p> @@ -1193,7 +1231,7 @@ or we could check if the value of the at </div> </div> <div class="sect2 function"> -<h3 id="tolower"><a class="anchor" href="expression-language-guide.html#tolower"></a>toLower</h3> +<h3 id="tolower"><a class="anchor" href="#tolower"></a>toLower</h3> <div class="paragraph"> <p><strong>Description</strong>: <span class="description">This function converts the Subject into an all lower-case String. Said another way, it replaces any uppercase letter with the lowercase equivalent.</span></p> @@ -1213,7 +1251,7 @@ or we could check if the value of the at </div> </div> <div class="sect2 function"> -<h3 id="trim"><a class="anchor" href="expression-language-guide.html#trim"></a>trim</h3> +<h3 id="trim"><a class="anchor" href="#trim"></a>trim</h3> <div class="paragraph"> <p><strong>Description</strong>: <span class="description">The <code>trim</code> function will remove any leading or trailing white space from its subject.</span></p> </div> @@ -1232,7 +1270,7 @@ or we could check if the value of the at </div> </div> <div class="sect2 function"> -<h3 id="substring"><a class="anchor" href="expression-language-guide.html#substring"></a>substring</h3> +<h3 id="substring"><a class="anchor" href="#substring"></a>substring</h3> <div class="paragraph"> <p><strong>Description</strong>: <span class="description">Returns a portion of the Subject, given a <em>starting index</em> and an optional <em>ending index</em>. @@ -1311,7 +1349,7 @@ then the following Expressions will resu </table> </div> <div class="sect2 function"> -<h3 id="substringbefore"><a class="anchor" href="expression-language-guide.html#substringbefore"></a>substringBefore</h3> +<h3 id="substringbefore"><a class="anchor" href="#substringbefore"></a>substringBefore</h3> <div class="paragraph"> <p><strong>Description</strong>: <span class="description">Returns a portion of the Subject, starting with the first character of the Subject and ending with the character immediately before the first occurrence of the argument. If @@ -1368,7 +1406,7 @@ then the following Expressions will resu </table> </div> <div class="sect2 function"> -<h3 id="substringbeforelast"><a class="anchor" href="expression-language-guide.html#substringbeforelast"></a>substringBeforeLast</h3> +<h3 id="substringbeforelast"><a class="anchor" href="#substringbeforelast"></a>substringBeforeLast</h3> <div class="paragraph"> <p><strong>Description</strong>: <span class="description">Returns a portion of the Subject, starting with the first character of the Subject and ending with the character immediately before the last occurrence of the argument. If @@ -1425,7 +1463,7 @@ then the following Expressions will resu </table> </div> <div class="sect2 function"> -<h3 id="substringafter"><a class="anchor" href="expression-language-guide.html#substringafter"></a>substringAfter</h3> +<h3 id="substringafter"><a class="anchor" href="#substringafter"></a>substringAfter</h3> <div class="paragraph"> <p><strong>Description</strong>: <span class="description">Returns a portion of the Subject, starting with the character immediately after the first occurrence of the argument and extending to the end of the Subject. If @@ -1482,7 +1520,7 @@ then the following Expressions will resu </table> </div> <div class="sect2 function"> -<h3 id="substringafterlast"><a class="anchor" href="expression-language-guide.html#substringafterlast"></a>substringAfterLast</h3> +<h3 id="substringafterlast"><a class="anchor" href="#substringafterlast"></a>substringAfterLast</h3> <div class="paragraph"> <p><strong>Description</strong>: <span class="description">Returns a portion of the Subject, starting with the character immediately after the last occurrence of the argument and extending to the end of the Subject. If @@ -1539,7 +1577,7 @@ then the following Expressions will resu </table> </div> <div class="sect2 function"> -<h3 id="getdelimitedfield"><a class="anchor" href="expression-language-guide.html#getdelimitedfield"></a>getDelimitedField</h3> +<h3 id="getdelimitedfield"><a class="anchor" href="#getdelimitedfield"></a>getDelimitedField</h3> <div class="paragraph"> <p><strong>Description</strong>: <span class="description">Parses the Subject as a delimited line of text and returns just a single field from that delimited text.</span></p> @@ -1613,14 +1651,14 @@ or <code>false</code>.</span></p> <td class="tableblock halign-left valign-top"><p class="tableblock">Jacobson, John</p></td> </tr> <tr> -<td class="tableblock halign-left valign-top"><p class="tableblock">`${altLine:getDelimitedField(1, '</p></td> -<td class="tableblock halign-left valign-top"><p class="tableblock">')}</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>${altLine:getDelimitedField(1, '|')}</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Jacobson, John</p></td> </tr> </tbody> </table> </div> <div class="sect2 function"> -<h3 id="append"><a class="anchor" href="expression-language-guide.html#append"></a>append</h3> +<h3 id="append"><a class="anchor" href="#append"></a>append</h3> <div class="paragraph"> <p><strong>Description</strong>: <span class="description">The <code>append</code> function returns the result of appending the argument to the value of the Subject. If the Subject is null, returns the argument itself.</span></p> @@ -1647,7 +1685,7 @@ or <code>false</code>.</span></p> </div> </div> <div class="sect2 function"> -<h3 id="prepend"><a class="anchor" href="expression-language-guide.html#prepend"></a>prepend</h3> +<h3 id="prepend"><a class="anchor" href="#prepend"></a>prepend</h3> <div class="paragraph"> <p><strong>Description</strong>: <span class="description">The <code>prepend</code> function returns the result of prepending the argument to the value of the Subject. If the subject is null, returns the argument itself.</span></p> @@ -1674,7 +1712,7 @@ or <code>false</code>.</span></p> </div> </div> <div class="sect2 function"> -<h3 id="replace"><a class="anchor" href="expression-language-guide.html#replace"></a>replace</h3> +<h3 id="replace"><a class="anchor" href="#replace"></a>replace</h3> <div class="paragraph"> <p><strong>Description</strong>: <span class="description">Replaces <strong>all</strong> occurrences of one literal String within the Subject with another String.</span></p> </div> @@ -1732,7 +1770,7 @@ Expressions will provide the following r </table> </div> <div class="sect2 function"> -<h3 id="replacefirst"><a class="anchor" href="expression-language-guide.html#replacefirst"></a>replaceFirst</h3> +<h3 id="replacefirst"><a class="anchor" href="#replacefirst"></a>replaceFirst</h3> <div class="paragraph"> <p><strong>Description</strong>: <span class="description">Replaces <strong>the first</strong> occurrence of one literal String or regular expression within the Subject with another String.</span></p> </div> @@ -1790,7 +1828,7 @@ Expressions will provide the following r </table> </div> <div class="sect2 function"> -<h3 id="replaceall"><a class="anchor" href="expression-language-guide.html#replaceall"></a>replaceAll</h3> +<h3 id="replaceall"><a class="anchor" href="#replaceall"></a>replaceAll</h3> <div class="paragraph"> <p><strong>Description</strong>: <span class="description">The <code>replaceAll</code> function takes two String arguments: a literal String or Regular Expression (NiFi uses the Java Pattern syntax), and a replacement string. The return value is the result of substituting the replacement string for @@ -1854,7 +1892,7 @@ Expressions will provide the following r </table> </div> <div class="sect2 function"> -<h3 id="replacenull"><a class="anchor" href="expression-language-guide.html#replacenull"></a>replaceNull</h3> +<h3 id="replacenull"><a class="anchor" href="#replacenull"></a>replaceNull</h3> <div class="paragraph"> <p><strong>Description</strong>: <span class="description">The <code>replaceNull</code> function returns the argument if the Subject is null. Otherwise, returns the Subject.</span></p> @@ -1882,7 +1920,7 @@ Expressions will provide the following r </div> </div> <div class="sect2 function"> -<h3 id="replaceempty"><a class="anchor" href="expression-language-guide.html#replaceempty"></a>replaceEmpty</h3> +<h3 id="replaceempty"><a class="anchor" href="#replaceempty"></a>replaceEmpty</h3> <div class="paragraph"> <p><strong>Description</strong>: <span class="description">The <code>replaceEmpty</code> function returns the argument if the Subject is null or if the Subject consists only of white space (new line, carriage return, tab, space). Otherwise, @@ -1911,7 +1949,7 @@ Expressions will provide the following r </div> </div> <div class="sect2 function"> -<h3 id="length"><a class="anchor" href="expression-language-guide.html#length"></a>length</h3> +<h3 id="length"><a class="anchor" href="#length"></a>length</h3> <div class="paragraph"> <p><strong>Description</strong>: <span class="description">Returns the length of the Subject</span></p> </div> @@ -1933,13 +1971,13 @@ Expressions will provide the following r </div> </div> <div class="sect1"> -<h2 id="encode"><a class="anchor" href="expression-language-guide.html#encode"></a>Encode/Decode Functions</h2> +<h2 id="encode"><a class="anchor" href="#encode"></a>Encode/Decode Functions</h2> <div class="sectionbody"> <div class="paragraph"> <p>Each of the following functions will encode a string according the rules of the given data format.</p> </div> <div class="sect2 function"> -<h3 id="escapejson"><a class="anchor" href="expression-language-guide.html#escapejson"></a>escapeJson</h3> +<h3 id="escapejson"><a class="anchor" href="#escapejson"></a>escapeJson</h3> <div class="paragraph"> <p><strong>Description</strong>: <span class="description">This function prepares the Subject to be inserted into JSON document by escaping the characters in the String using Json String rules. The function correctly escapes quotes and control-chars (tab, backslash, @@ -1960,7 +1998,7 @@ Expressions will provide the following r </div> </div> <div class="sect2 function"> -<h3 id="escapexml"><a class="anchor" href="expression-language-guide.html#escapexml"></a>escapeXml</h3> +<h3 id="escapexml"><a class="anchor" href="#escapexml"></a>escapeXml</h3> <div class="paragraph"> <p><strong>Description</strong>: <span class="description">This function prepares the Subject to be inserted into XML document by escaping the characters in a String using XML entities. The function correctly escapes quotes, apostrophe, ampersand, <, > and @@ -1981,7 +2019,7 @@ Expressions will provide the following r </div> </div> <div class="sect2 function"> -<h3 id="escapecsv"><a class="anchor" href="expression-language-guide.html#escapecsv"></a>escapeCsv</h3> +<h3 id="escapecsv"><a class="anchor" href="#escapecsv"></a>escapeCsv</h3> <div class="paragraph"> <p><strong>Description</strong>: <span class="description">This function prepares the Subject to be inserted into CSV document by escaping the characters in a String using the rules in RFC 4180. The function correctly escapes quotes and surround the string in quotes if needed.</span></p> @@ -2001,7 +2039,7 @@ Expressions will provide the following r </div> </div> <div class="sect2 function"> -<h3 id="escapehtml3"><a class="anchor" href="expression-language-guide.html#escapehtml3"></a>escapeHtml3</h3> +<h3 id="escapehtml3"><a class="anchor" href="#escapehtml3"></a>escapeHtml3</h3> <div class="paragraph"> <p><strong>Description</strong>: <span class="description">This function prepares the Subject to be inserted into HTML document by escaping the characters in a String using the HTML entities. Supports only the HTML 3.0 entities.</span></p> @@ -2021,7 +2059,7 @@ Expressions will provide the following r </div> </div> <div class="sect2 function"> -<h3 id="escapehtml4"><a class="anchor" href="expression-language-guide.html#escapehtml4"></a>escapeHtml4</h3> +<h3 id="escapehtml4"><a class="anchor" href="#escapehtml4"></a>escapeHtml4</h3> <div class="paragraph"> <p><strong>Description</strong>: <span class="description">This function prepares the Subject to be inserted into HTML document by escaping the characters in a String using the HTML entities. Supports all known HTML 4.0 entities.</span></p> @@ -2041,7 +2079,7 @@ Expressions will provide the following r </div> </div> <div class="sect2 function"> -<h3 id="unescapejson"><a class="anchor" href="expression-language-guide.html#unescapejson"></a>unescapeJson</h3> +<h3 id="unescapejson"><a class="anchor" href="#unescapejson"></a>unescapeJson</h3> <div class="paragraph"> <p><strong>Description</strong>: <span class="description">This function unescapes any Json literals found in the String.</span></p> </div> @@ -2060,7 +2098,7 @@ Expressions will provide the following r </div> </div> <div class="sect2 function"> -<h3 id="unescapexml"><a class="anchor" href="expression-language-guide.html#unescapexml"></a>unescapeXml</h3> +<h3 id="unescapexml"><a class="anchor" href="#unescapexml"></a>unescapeXml</h3> <div class="paragraph"> <p><strong>Description</strong>: <span class="description">This function unescapes a string containing XML entity escapes to a string containing the actual Unicode characters corresponding to the escapes. Supports only the five basic XML entities (gt, lt, @@ -2081,7 +2119,7 @@ Expressions will provide the following r </div> </div> <div class="sect2 function"> -<h3 id="unescapecsv"><a class="anchor" href="expression-language-guide.html#unescapecsv"></a>unescapeCsv</h3> +<h3 id="unescapecsv"><a class="anchor" href="#unescapecsv"></a>unescapeCsv</h3> <div class="paragraph"> <p><strong>Description</strong>: <span class="description">This function unescapes a String from a CSV document according to the rules of RFC 4180.</span></p> </div> @@ -2100,7 +2138,7 @@ Expressions will provide the following r </div> </div> <div class="sect2 function"> -<h3 id="unescapehtml3"><a class="anchor" href="expression-language-guide.html#unescapehtml3"></a>unescapeHtml3</h3> +<h3 id="unescapehtml3"><a class="anchor" href="#unescapehtml3"></a>unescapeHtml3</h3> <div class="paragraph"> <p><strong>Description</strong>: <span class="description">This function unescapes a string containing HTML 3 entity to a string containing the actual Unicode characters corresponding to the escapes. Supports only HTML 3.0 entities.</span></p> @@ -2120,7 +2158,7 @@ Expressions will provide the following r </div> </div> <div class="sect2 function"> -<h3 id="unescapehtml4"><a class="anchor" href="expression-language-guide.html#unescapehtml4"></a>unescapeHtml4</h3> +<h3 id="unescapehtml4"><a class="anchor" href="#unescapehtml4"></a>unescapeHtml4</h3> <div class="paragraph"> <p><strong>Description</strong>: <span class="description">This function unescapes a string containing HTML 4 entity to a string containing the actual Unicode characters corresponding to the escapes. Supports all known HTML 4.0 entities.</span></p> @@ -2140,7 +2178,7 @@ Expressions will provide the following r </div> </div> <div class="sect2 function"> -<h3 id="urlencode"><a class="anchor" href="expression-language-guide.html#urlencode"></a>urlEncode</h3> +<h3 id="urlencode"><a class="anchor" href="#urlencode"></a>urlEncode</h3> <div class="paragraph"> <p><strong>Description</strong>: <span class="description">Returns a URL-friendly version of the Subject. This is useful, for instance, when using an attribute value to indicate the URL of a website.</span></p> @@ -2161,7 +2199,7 @@ Expressions will provide the following r </div> </div> <div class="sect2 function"> -<h3 id="urldecode"><a class="anchor" href="expression-language-guide.html#urldecode"></a>urlDecode</h3> +<h3 id="urldecode"><a class="anchor" href="#urldecode"></a>urlDecode</h3> <div class="paragraph"> <p><strong>Description</strong>: <span class="description">Converts a URL-friendly version of the Subject into a human-readable form.</span></p> </div> @@ -2180,16 +2218,56 @@ Expressions will provide the following r <code>${url:urlDecode()}</code> will return "https://nifi.apache.org/some value with spaces".</p> </div> </div> +<div class="sect2 function"> +<h3 id="base64encode"><a class="anchor" href="#base64encode"></a>base64Encode</h3> +<div class="paragraph"> +<p><strong>Description</strong>: <span class="description">Returns a Base64 encoded string. This is useful for being able to transfer binary data as ascii.</span></p> +</div> +<div class="paragraph"> +<p><strong>Subject Type</strong>: <span class="subject">String</span></p> +</div> +<div class="paragraph"> +<p><strong>Arguments</strong>: No arguments</p> +</div> +<div class="paragraph"> +<p><strong>Return Type</strong>: <span class="returnType">String</span></p> +</div> +<div class="paragraph"> +<p><strong>Examples</strong>: We can Base64-Encoded an attribute named "payload" by using the Expression + <code>${payload:base64Encode()}</code> If the attribute payload had a value of "admin:admin" + then the Expression <code>${payload:base64Encode()}</code> will return "YWRtaW46YWRtaW4=".</p> +</div> +</div> +<div class="sect2 function"> +<h3 id="base64decode"><a class="anchor" href="#base64decode"></a>base64Decode</h3> +<div class="paragraph"> +<p><strong>Description</strong>: <span class="description">Reverses the Base64 encoding on given string.</span></p> +</div> +<div class="paragraph"> +<p><strong>Subject Type</strong>: <span class="subject">String</span></p> +</div> +<div class="paragraph"> +<p><strong>Arguments</strong>: No arguments</p> +</div> +<div class="paragraph"> +<p><strong>Return Type</strong>: <span class="returnType">String</span></p> +</div> +<div class="paragraph"> +<p><strong>Examples</strong>: If we have a Base64-Encoded attribute named "payload" with the value + "YWRtaW46YWRtaW4=", then the Expression + <code>${payload:base64Decode()}</code> will return "admin:admin".</p> +</div> +</div> </div> </div> <div class="sect1"> -<h2 id="searching"><a class="anchor" href="expression-language-guide.html#searching"></a>Searching</h2> +<h2 id="searching"><a class="anchor" href="#searching"></a>Searching</h2> <div class="sectionbody"> <div class="paragraph"> <p>Each of the following functions is used to search its subject for some value.</p> </div> <div class="sect2 function"> -<h3 id="startswith"><a class="anchor" href="expression-language-guide.html#startswith"></a>startsWith</h3> +<h3 id="startswith"><a class="anchor" href="#startswith"></a>startsWith</h3> <div class="paragraph"> <p><strong>Description</strong>: <span class="description">Returns <code>true</code> if the Subject starts with the String provided as the argument, <code>false</code> otherwise.</span></p> @@ -2217,7 +2295,7 @@ Expressions will provide the following r </div> </div> <div class="sect2 function"> -<h3 id="endswith"><a class="anchor" href="expression-language-guide.html#endswith"></a>endsWith</h3> +<h3 id="endswith"><a class="anchor" href="#endswith"></a>endsWith</h3> <div class="paragraph"> <p><strong>Description</strong>: <span class="description">Returns <code>true</code> if the Subject ends with the String provided as the argument, <code>false</code> otherwise.</span></p> @@ -2245,7 +2323,7 @@ Expressions will provide the following r </div> </div> <div class="sect2 function"> -<h3 id="contains"><a class="anchor" href="expression-language-guide.html#contains"></a>contains</h3> +<h3 id="contains"><a class="anchor" href="#contains"></a>contains</h3> <div class="paragraph"> <p><strong>Description</strong>: <span class="description">Returns <code>true</code> if the Subject contains the value of the argument anywhere in the value.</span></p> </div> @@ -2272,7 +2350,7 @@ Expressions will provide the following r </div> </div> <div class="sect2 function"> -<h3 id="in"><a class="anchor" href="expression-language-guide.html#in"></a>in</h3> +<h3 id="in"><a class="anchor" href="#in"></a>in</h3> <div class="paragraph"> <p><strong>Description</strong>: <span class="description">Returns <code>true</code> if the Subject is matching one of the provided arguments.</span></p> </div> @@ -2302,7 +2380,7 @@ Expressions will provide the following r </div> </div> <div class="sect2 function"> -<h3 id="find"><a class="anchor" href="expression-language-guide.html#find"></a>find</h3> +<h3 id="find"><a class="anchor" href="#find"></a>find</h3> <div class="paragraph"> <p><strong>Description</strong>: <span class="description">Returns <code>true</code> if the Subject contains any sequence of characters that matches the Regular Expression provided by the argument.</span></p> @@ -2357,7 +2435,7 @@ Expressions will provide the following r </table> </div> <div class="sect2 function"> -<h3 id="matches"><a class="anchor" href="expression-language-guide.html#matches"></a>matches</h3> +<h3 id="matches"><a class="anchor" href="#matches"></a>matches</h3> <div class="paragraph"> <p><strong>Description</strong>: <span class="description">Returns <code>true</code> if the Subject exactly matches the Regular Expression provided by the argument.</span></p> </div> @@ -2411,7 +2489,7 @@ Expressions will provide the following r </table> </div> <div class="sect2 function"> -<h3 id="indexof"><a class="anchor" href="expression-language-guide.html#indexof"></a>indexOf</h3> +<h3 id="indexof"><a class="anchor" href="#indexof"></a>indexOf</h3> <div class="paragraph"> <p><strong>Description</strong>: <span class="description">Returns the index of the first character in the Subject that matches the String value provided as an argument. If the argument is found multiple times within the Subject, the value returned is the @@ -2470,7 +2548,7 @@ Expressions will provide the following r </table> </div> <div class="sect2 function"> -<h3 id="lastindexof"><a class="anchor" href="expression-language-guide.html#lastindexof"></a>lastIndexOf</h3> +<h3 id="lastindexof"><a class="anchor" href="#lastindexof"></a>lastIndexOf</h3> <div class="paragraph"> <p><strong>Description</strong>: <span class="description">Returns the index of the first character in the Subject that matches the String value provided as an argument. If the argument is found multiple times within the Subject, the value returned is the @@ -2529,7 +2607,7 @@ Expressions will provide the following r </table> </div> <div class="sect2 function"> -<h3 id="jsonpath"><a class="anchor" href="expression-language-guide.html#jsonpath"></a>jsonPath</h3> +<h3 id="jsonpath"><a class="anchor" href="#jsonpath"></a>jsonPath</h3> <div class="paragraph"> <p><strong>Description</strong>: <span class="description">The <code>jsonPath</code> function generates a string by evaluating the Subject as JSON and applying a JSON path expression. An empty string is generated if the Subject does not contain valid JSON, the <em>jsonPath</em> is invalid, or the path @@ -2622,16 +2700,21 @@ Expressions will provide the following r </div> </div> <div class="sect1"> -<h2 id="numbers"><a class="anchor" href="expression-language-guide.html#numbers"></a>Mathematical Operations and Numeric Manipulation</h2> +<h2 id="numbers"><a class="anchor" href="#numbers"></a>Mathematical Operations and Numeric Manipulation</h2> <div class="sectionbody"> +<div class="paragraph"> +<p>For those functions that support Decimal and Number (whole number) types, the return value type depends on the input types. If either the +subject or argument are a Decimal then the result will be a Decimal. If both values are Numbers then the result will be a Number. This includes +Divide. This is to preserve backwards compatibility and to not force rounding errors.</p> +</div> <div class="sect2 function"> -<h3 id="plus"><a class="anchor" href="expression-language-guide.html#plus"></a>plus</h3> +<h3 id="plus"><a class="anchor" href="#plus"></a>plus</h3> <div class="paragraph"> <p><strong>Description</strong>: <span class="description">Adds a numeric value to the Subject. If either the argument or the Subject cannot be coerced into a Number, returns <code>null</code>.</span></p> </div> <div class="paragraph"> -<p><strong>Subject Type</strong>: <span class="subject">Number</span></p> +<p><strong>Subject Type</strong>: <span class="subject">Number or Decimal</span></p> </div> <div class="paragraph"> <p><strong>Arguments</strong>:</p> @@ -2644,7 +2727,7 @@ Expressions will provide the following r </ul> </div> <div class="paragraph"> -<p><strong>Return Type</strong>: <span class="returnType">Number</span></p> +<p><strong>Return Type</strong>: <span class="returnType">Number or Decimal (depending on input types)</span></p> </div> <div class="paragraph"> <p><strong>Examples</strong>: If the "fileSize" attribute has a value of 100, then the Expression <code>${fileSize:plus(1000)}</code> @@ -2652,12 +2735,12 @@ Expressions will provide the following r </div> </div> <div class="sect2 function"> -<h3 id="minus"><a class="anchor" href="expression-language-guide.html#minus"></a>minus</h3> +<h3 id="minus"><a class="anchor" href="#minus"></a>minus</h3> <div class="paragraph"> <p><strong>Description</strong>: <span class="description">Subtracts a numeric value from the Subject.</span></p> </div> <div class="paragraph"> -<p><strong>Subject Type</strong>: <span class="subject">Number</span></p> +<p><strong>Subject Type</strong>: <span class="subject">Number or Decimal</span></p> </div> <div class="paragraph"> <p><strong>Arguments</strong>:</p> @@ -2670,7 +2753,7 @@ Expressions will provide the following r </ul> </div> <div class="paragraph"> -<p><strong>Return Type</strong>: <span class="returnType">Number</span></p> +<p><strong>Return Type</strong>: <span class="returnType">Number or Decimal (depending on input types)</span></p> </div> <div class="paragraph"> <p><strong>Examples</strong>: If the "fileSize" attribute has a value of 100, then the Expression <code>${fileSize:minus(100)}</code> @@ -2678,12 +2761,12 @@ Expressions will provide the following r </div> </div> <div class="sect2 function"> -<h3 id="multiply"><a class="anchor" href="expression-language-guide.html#multiply"></a>multiply</h3> +<h3 id="multiply"><a class="anchor" href="#multiply"></a>multiply</h3> <div class="paragraph"> <p><strong>Description</strong>: <span class="description">Multiplies a numeric value by the Subject and returns the product.</span></p> </div> <div class="paragraph"> -<p><strong>Subject Type</strong>: <span class="subject">Number</span></p> +<p><strong>Subject Type</strong>: <span class="subject">Number or Decimal</span></p> </div> <div class="paragraph"> <p><strong>Arguments</strong>:</p> @@ -2696,7 +2779,7 @@ Expressions will provide the following r </ul> </div> <div class="paragraph"> -<p><strong>Return Type</strong>: <span class="returnType">Number</span></p> +<p><strong>Return Type</strong>: <span class="returnType">Number or Decimal (depending on input types)</span></p> </div> <div class="paragraph"> <p><strong>Examples</strong>: If the "fileSize" attribute has a value of 100, then the Expression <code>${fileSize:multiply(1024)}</code> @@ -2704,12 +2787,12 @@ Expressions will provide the following r </div> </div> <div class="sect2 function"> -<h3 id="divide"><a class="anchor" href="expression-language-guide.html#divide"></a>divide</h3> +<h3 id="divide"><a class="anchor" href="#divide"></a>divide</h3> <div class="paragraph"> -<p><strong>Description</strong>: <span class="description">Divides a numeric value by the Subject and returns the result, rounded down to the nearest integer.</span></p> +<p><strong>Description</strong>: <span class="description">Divides the Subject by a numeric value and returns the result.</span></p> </div> <div class="paragraph"> -<p><strong>Subject Type</strong>: <span class="subject">Number</span></p> +<p><strong>Subject Type</strong>: <span class="subject">Number or Decimal</span></p> </div> <div class="paragraph"> <p><strong>Arguments</strong>:</p> @@ -2717,12 +2800,12 @@ Expressions will provide the following r <div class="ulist"> <ul> <li> -<p><span class="argName"><em>Operand</em></span> : <span class="argDesc">The value to add divide the Subject by</span></p> +<p><span class="argName"><em>Operand</em></span> : <span class="argDesc">The value to divide the Subject by</span></p> </li> </ul> </div> <div class="paragraph"> -<p><strong>Return Type</strong>: <span class="returnType">Number</span></p> +<p><strong>Return Type</strong>: <span class="returnType">Number or Decimal (depending on input types)</span></p> </div> <div class="paragraph"> <p><strong>Examples</strong>: If the "fileSize" attribute has a value of 100, then the Expression <code>${fileSize:divide(12)}</code> @@ -2730,13 +2813,13 @@ Expressions will provide the following r </div> </div> <div class="sect2 function"> -<h3 id="mod"><a class="anchor" href="expression-language-guide.html#mod"></a>mod</h3> +<h3 id="mod"><a class="anchor" href="#mod"></a>mod</h3> <div class="paragraph"> <p><strong>Description</strong>: <span class="description">Performs a modular division of the Subject by the argument. That is, this function will divide the Subject by the value of the argument and return not the quotient but rather the remainder.</span></p> </div> <div class="paragraph"> -<p><strong>Subject Type</strong>: <span class="subject">Number</span></p> +<p><strong>Subject Type</strong>: <span class="subject">Number or Decimal</span></p> </div> <div class="paragraph"> <p><strong>Arguments</strong>:</p> @@ -2749,7 +2832,7 @@ Expressions will provide the following r </ul> </div> <div class="paragraph"> -<p><strong>Return Type</strong>: <span class="returnType">Number</span></p> +<p><strong>Return Type</strong>: <span class="returnType">Number or Decimal (depending on input types)</span></p> </div> <div class="paragraph"> <p><strong>Examples</strong>: If the "fileSize" attribute has a value of 100, then the Expression <code>${fileSize:mod(12)}</code> @@ -2757,11 +2840,16 @@ Expressions will provide the following r </div> </div> <div class="sect2 function"> -<h3 id="toradix"><a class="anchor" href="expression-language-guide.html#toradix"></a>toRadix</h3> +<h3 id="toradix"><a class="anchor" href="#toradix"></a>toRadix</h3> <div class="paragraph"> -<p><strong>Description</strong>: <span class="description">Converts the Subject from a Base 10 number to a different Radix (or number base). An optional +<p><strong>Description</strong>: [.description]#Converts the Subject from a Base 10 number to a different Radix (or number base). An optional second argument can be used to indicate the minimum number of characters to be used. If the converted value - has fewer than this number of characters, the number will be padded with leading zeroes.</span></p> + has fewer than this number of characters, the number will be padded with leading zeroes.</p> +</div> +<div class="literalblock"> +<div class="content"> +<pre>If a decimal is passed as the subject, it will first be converted to a whole number and then processed.#</pre> +</div> </div> <div class="paragraph"> <p><strong>Subject Type</strong>: <span class="subject">Number</span></p> @@ -2829,9 +2917,66 @@ Expressions will provide the following r </table> </div> <div class="sect2 function"> -<h3 id="random"><a class="anchor" href="expression-language-guide.html#random"></a>random</h3> +<h3 id="fromradix"><a class="anchor" href="#fromradix"></a>fromRadix</h3> +<div class="paragraph"> +<p><strong>Description</strong>: [.description]#Converts the Subject from a specified Radix (or number base) to a base ten whole number. The subject will converted as is, without interpretation, and all characters +must be valid for the base being converted from. For example converting "0xFF" from hex will not work due to "x" being a invalid hex character.</p> +</div> +<div class="literalblock"> +<div class="content"> +<pre>If a decimal is passed as the subject, it will first be converted to a whole number and then processed.#</pre> +</div> +</div> +<div class="paragraph"> +<p><strong>Subject Type</strong>: <span class="subject">String</span></p> +</div> +<div class="paragraph"> +<p><strong>Arguments</strong>:</p> +</div> +<div class="ulist"> +<ul> +<li> +<p><span class="argName"><em>Subject Base</em></span> : <span class="argDesc">A Number between 2 and 36 (inclusive)</span></p> +</li> +</ul> +</div> +<div class="paragraph"> +<p><strong>Return Type</strong>: <span class="returnType">Number</span></p> +</div> +<div class="paragraph"> +<p><strong>Examples</strong>: If the "fileSize" attributes has a value of 1234A, then the following Expressions will yield + the following results:</p> +</div> +<table class="tableblock frame-all grid-all spread"> +<caption class="title">Table 16. toRadix Examples</caption> +<colgroup> +<col style="width: 50%;"> +<col style="width: 50%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Expression</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Value</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>${fileSize:fromRadix(11)}</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>17720</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>${fileSize:fromRadix(16)}</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>74570</code></p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>${fileSize:fromRadix(20)}</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>177290</code></p></td> +</tr> +</tbody> +</table> +</div> +<div class="sect2 function"> +<h3 id="random"><a class="anchor" href="#random"></a>random</h3> <div class="paragraph"> -<p><strong>Description</strong>: <span class="description">Returns a random number ( 0 to 2^63 - 1) using an insecure random number generator.</span></p> +<p><strong>Description</strong>: <span class="description">Returns a random whole number ( 0 to 2^63 - 1) using an insecure random number generator.</span></p> </div> <div class="paragraph"> <p><strong>Subject Type</strong>: <span class="subjectless">No subject</span></p> @@ -2846,13 +2991,54 @@ Expressions will provide the following r <p><strong>Examples</strong>: ${random():mod(10):plus(1)} returns random number between 1 and 10 inclusive.</p> </div> </div> +<div class="sect2 function"> +<h3 id="math"><a class="anchor" href="#math"></a>math</h3> +<div class="paragraph"> +<p><strong>Description</strong>: <span class="description">ADVANCED FEATURE. This expression is designed to be used by advanced users only. It utilizes Java Reflection to run arbitrary java.lang.Math static methods. The exact API will depend on the version of Java you are running. The Java 8 API can be found here: <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Math.html" class="bare">https://docs.oracle.com/javase/8/docs/api/java/lang/Math.html</a> +<br> +In order to run the correct method, the parameter types must be correct. The Expression Language "Number" (whole number) type is interpreted as a Java "long". The "Decimal" type is interpreted as a Java "double". Running the desired method may require calling "toNumber()" or "toDecimal()" in order to "cast" the value to the desired type. This also is important to remember when cascading "math()" calls since the return type depends on the method that was run.</span></p> +</div> +<div class="paragraph"> +<p><strong>Subject Type</strong>: <span class="subject subjectless">Subjectless, Number or Decimal (depending on the desired method to run)</span></p> +</div> +<div class="paragraph"> +<p><strong>Arguments</strong>: + - <span class="argName"><em>Method</em></span> : <span class="argDesc">The name of the Java Math method to run</span> + - <span class="argName"><em>Optional Argument</em></span> : <span class="argDesc">Optional argument that acts as the second parameter to the method.</span></p> +</div> +<div class="paragraph"> +<p><strong>Return Type</strong>: <span class="returnType">Number or Decimal (depending on method run)</span></p> +</div> +<div class="paragraph"> +<p><strong>Examples</strong>:</p> +</div> +<div class="ulist"> +<ul> +<li> +<p>${math("random")} runs Math.random().</p> +</li> +<li> +<p>${literal(2):toDecimal:math("pow", 2.5)} runs Math.pow(2D,2.5D).</p> +</li> +<li> +<p>${literal(64):toDouble():math("cbrt"):toNumber():math("max", 5)} runs Math.maxDouble.valueOf(Math.cbrt(64D).longValue(), 5L). Note that the toDecimal() is needed because "cbrt" takes a "double" as input and the "64" will get interpreted as a long. The "toDecimal()" call is necessary to correctly call the method. that the "toNumber()" call is necessary because "cbrt" returns a double and the "max" method is must have parameters of the same type and "5" is interpreted as a long.</p> +</li> +<li> +<p>${literal(5.4):math("scalb", 2)} runs Math.scalb(5.4, 2). This example is important because NiFi EL treats all whole numbers as "longs" and there is no concept of an "int". "scalb" takes a second parameter of an "int" and it is not overloaded to accept longs so it could not be run without special type handling. In the instance where the Java method cannot be found using parameters of type "double" and "long" the "math()" EL function will attempt to find a Java method with the same name but parameters of "double" and "int".</p> +</li> +<li> +<p>${first:toDecimal():math("pow", ${second:toDecimal()})} where attributes evaluate to "first" = 2.5 and "second" = 2. This example runs Math.pow(2.5D, 2D). The explicit calls to toDecimal() are important because of the dynamic nature of EL. When creating the flow, the user is unaware if the expression language values will be able to be interpreted as a whole number or not. In this example without the explicit calls "toDecimal" the "math" function would attempt to run a Java method "pow" with types "double" and "long" (which doesn’t exist).</p> +</li> +</ul> +</div> +</div> </div> </div> <div class="sect1"> -<h2 id="dates"><a class="anchor" href="expression-language-guide.html#dates"></a>Date Manipulation</h2> +<h2 id="dates"><a class="anchor" href="#dates"></a>Date Manipulation</h2> <div class="sectionbody"> <div class="sect2 function"> -<h3 id="format"><a class="anchor" href="expression-language-guide.html#format"></a>format</h3> +<h3 id="format"><a class="anchor" href="#format"></a>format</h3> <div class="paragraph"> <p><strong>Description</strong>: <span class="description">Formats a number as a date/time according to the format specified by the argument. The argument must be a String that is a valid Java SimpleDateFormat format. The Subject is expected to be a Number that @@ -2879,7 +3065,7 @@ Expressions will provide the following r the following results:</p> </div> <table class="tableblock frame-all grid-all spread"> -<caption class="title">Table 16. format Examples</caption> +<caption class="title">Table 17. format Examples</caption> <colgroup> <col style="width: 50%;"> <col style="width: 50%;"> @@ -2909,7 +3095,7 @@ Expressions will provide the following r </table> </div> <div class="sect2 function"> -<h3 id="todate"><a class="anchor" href="expression-language-guide.html#todate"></a>toDate</h3> +<h3 id="todate"><a class="anchor" href="#todate"></a>toDate</h3> <div class="paragraph"> <p><strong>Description</strong>: <span class="description">Converts a String into a Date data type, based on the format specified by the argument. The argument must be a String that is a valid Java SimpleDateFormat syntax. The Subject is expected to be a String that is formatted @@ -2938,13 +3124,13 @@ Expressions will provide the following r 15:36:03.264 GMT on December 31, 2014.</p> </div> <div class="paragraph"> -<p>Often, this function is used in conjunction with the <a href="expression-language-guide.html#format">format</a> function to change the format of a date/time. For example, +<p>Often, this function is used in conjunction with the <a href="#format">format</a> function to change the format of a date/time. For example, if the attribute "date" has the value "12-24-2014" and we want to change the format to "2014/12/24", we can do so by chaining together the two functions: <code>${date:toDate('MM-dd-yyyy'):format('yyyy/MM/dd')}</code>.</p> </div> </div> <div class="sect2 function"> -<h3 id="now"><a class="anchor" href="expression-language-guide.html#now"></a>now</h3> +<h3 id="now"><a class="anchor" href="#now"></a>now</h3> <div class="paragraph"> <p><strong>Description</strong>: <span class="description">Returns the current date and time as a Date data type object.</span></p> </div> @@ -2964,13 +3150,13 @@ chaining together the two functions: <co <code>Wed Dec 31 15:36:03 EST 2014</code> when the expression completes.</p> </div> <div class="paragraph"> -<p>Utilizing the <a href="expression-language-guide.html#tonumber">toNumber</a> method, <code>now</code> can provide the current date and time as the number of milliseconds since +<p>Utilizing the <a href="#tonumber">toNumber</a> method, <code>now</code> can provide the current date and time as the number of milliseconds since Midnight GMT on January 1, 1970. For instance, if instead of executing <code>${now()}</code> in the previous example <code>${now():toNumber()}</code> was run then it would output <code>1453843201123</code>. This method provides millisecond-level precision and provides the ability to manipulate the value.</p> </div> <table class="tableblock frame-all grid-all spread"> -<caption class="title">Table 17. now Examples</caption> +<caption class="title">Table 18. now Examples</caption> <colgroup> <col style="width: 50%;"> <col style="width: 50%;"> @@ -3007,10 +3193,10 @@ manipulate the value.</p> </div> </div> <div class="sect1"> -<h2 id="type_cast"><a class="anchor" href="expression-language-guide.html#type_cast"></a>Type Coercion</h2> +<h2 id="type_cast"><a class="anchor" href="#type_cast"></a>Type Coercion</h2> <div class="sectionbody"> <div class="sect2 function"> -<h3 id="tostring"><a class="anchor" href="expression-language-guide.html#tostring"></a>toString</h3> +<h3 id="tostring"><a class="anchor" href="#tostring"></a>toString</h3> <div class="paragraph"> <p><strong>Description</strong>: <span class="description">Coerces the Subject into a String</span></p> </div> @@ -3029,12 +3215,12 @@ manipulate the value.</p> </div> </div> <div class="sect2 function"> -<h3 id="tonumber"><a class="anchor" href="expression-language-guide.html#tonumber"></a>toNumber</h3> +<h3 id="tonumber"><a class="anchor" href="#tonumber"></a>toNumber</h3> <div class="paragraph"> <p><strong>Description</strong>: <span class="description">Coerces the Subject into a Number</span></p> </div> <div class="paragraph"> -<p><strong>Subject Type</strong>: <span class="subject">String</span></p> +<p><strong>Subject Type</strong>: <span class="subject">String, Decimal, or Date</span></p> </div> <div class="paragraph"> <p><strong>Arguments</strong>: No arguments</p> @@ -3043,13 +3229,31 @@ manipulate the value.</p> <p><strong>Return Type</strong>: <span class="returnType">Number</span></p> </div> <div class="paragraph"> -<p><strong>Examples</strong>: The Expression <code>${fileSize:toNumber()}</code> converts the String attribute value of "fileSize" to a number.</p> +<p><strong>Examples</strong>: The Expression <code>${fileSize:toNumber()}</code> converts the attribute value of "fileSize" to a number.</p> +</div> +</div> +<div class="sect2 function"> +<h3 id="todecimal"><a class="anchor" href="#todecimal"></a>toDecimal</h3> +<div class="paragraph"> +<p><strong>Description</strong>: <span class="description">Coerces the Subject into a Decimal</span></p> +</div> +<div class="paragraph"> +<p><strong>Subject Type</strong>: <span class="subject">String, Whole Number or Date</span></p> +</div> +<div class="paragraph"> +<p><strong>Arguments</strong>: No arguments</p> +</div> +<div class="paragraph"> +<p><strong>Return Type</strong>: <span class="returnType">Decimal</span></p> +</div> +<div class="paragraph"> +<p><strong>Examples</strong>: The Expression <code>${fileSize:toDecimal()}</code> converts the attribute value of "fileSize" to a decimal.</p> </div> </div> </div> </div> <div class="sect1"> -<h2 id="subjectless"><a class="anchor" href="expression-language-guide.html#subjectless"></a>Subjectless Functions</h2> +<h2 id="subjectless"><a class="anchor" href="#subjectless"></a>Subjectless Functions</h2> <div class="sectionbody"> <div class="paragraph"> <p>While the majority of functions in the Expression Language are called by using the syntax @@ -3060,7 +3264,7 @@ without a subject. Attempting to call a an error when validating the function.</p> </div> <div class="sect2 function"> -<h3 id="ip"><a class="anchor" href="expression-language-guide.html#ip"></a>ip</h3> +<h3 id="ip"><a class="anchor" href="#ip"></a>ip</h3> <div class="paragraph"> <p><strong>Description</strong>: <span class="description">Returns the IP address of the machine.</span></p> </div> @@ -3078,7 +3282,7 @@ an error when validating the function.</ </div> </div> <div class="sect2 function"> -<h3 id="hostname"><a class="anchor" href="expression-language-guide.html#hostname"></a>hostname</h3> +<h3 id="hostname"><a class="anchor" href="#hostname"></a>hostname</h3> <div class="paragraph"> <p><strong>Description</strong>: <span class="description">Returns the Hostname of the machine. An optional argument of type Boolean can be provided to specify whether or not the Fully Qualified Domain Name should be used. If <code>false</code>, or not specified, @@ -3108,7 +3312,7 @@ fully qualified. If not specified, defau </div> </div> <div class="sect2 function"> -<h3 id="uuid"><a class="anchor" href="expression-language-guide.html#uuid"></a>UUID</h3> +<h3 id="uuid"><a class="anchor" href="#uuid"></a>UUID</h3> <div class="paragraph"> <p><strong>Description</strong>: <span class="description">Returns a randomly generated UUID.</span></p> </div> @@ -3126,7 +3330,7 @@ fully qualified. If not specified, defau </div> </div> <div class="sect2 function"> -<h3 id="nextint"><a class="anchor" href="expression-language-guide.html#nextint"></a>nextInt</h3> +<h3 id="nextint"><a class="anchor" href="#nextint"></a>nextInt</h3> <div class="paragraph"> <p><strong>Description</strong>: <span class="description">Returns a one-up value (starting at 0) and increasing over the lifetime of the running instance of NiFi. This value is not persisted across restarts and is not guaranteed to be unique across a cluster. @@ -3149,7 +3353,7 @@ fully qualified. If not specified, defau </div> </div> <div class="sect2 function"> -<h3 id="literal"><a class="anchor" href="expression-language-guide.html#literal"></a>literal</h3> +<h3 id="literal"><a class="anchor" href="#literal"></a>literal</h3> <div class="paragraph"> <p><strong>Description</strong>: <span class="description">Returns its argument as a literal String value. This is useful in order to treat a string or a number at the beginning of an Expression as an actual value, rather than treating it as an attribute name. Additionally, it @@ -3182,7 +3386,7 @@ names begin with the letter <code>a</cod </div> </div> <div class="sect1"> -<h2 id="multi"><a class="anchor" href="expression-language-guide.html#multi"></a>Evaluating Multiple Attributes</h2> +<h2 id="multi"><a class="anchor" href="#multi"></a>Evaluating Multiple Attributes</h2> <div class="sectionbody"> <div class="paragraph"> <p>When it becomes necessary to evaluate the same conditions against multiple attributes, this can be accomplished by means of the @@ -3190,7 +3394,7 @@ names begin with the letter <code>a</cod provides several functions for evaluating the same conditions against groups of attributes at the same time.</p> </div> <div class="sect2 function"> -<h3 id="anyattribute"><a class="anchor" href="expression-language-guide.html#anyattribute"></a>anyAttribute</h3> +<h3 id="anyattribute"><a class="anchor" href="#anyattribute"></a>anyAttribute</h3> <div class="paragraph"> <p><strong>Description</strong>: <span class="description">Checks to see if any of the given attributes, match the given condition. This function has no subject and takes one or more arguments that are the names of attributes to which the remainder of the Expression is to be applied. If any of the attributes specified, @@ -3218,7 +3422,7 @@ provides several functions for evaluatin and "filename" contains "file.txt" consider the following examples:</p> </div> <table class="tableblock frame-all grid-all spread"> -<caption class="title">Table 18. anyAttribute Examples</caption> +<caption class="title">Table 19. anyAttribute Examples</caption> <colgroup> <col style="width: 50%;"> <col style="width: 50%;"> @@ -3240,7 +3444,7 @@ provides several functions for evaluatin </table> </div> <div class="sect2 function"> -<h3 id="allattributes"><a class="anchor" href="expression-language-guide.html#allattributes"></a>allAttributes</h3> +<h3 id="allattributes"><a class="anchor" href="#allattributes"></a>allAttributes</h3> <div class="paragraph"> <p><strong>Description</strong>: <span class="description">Checks to see if any of the given attributes, match the given condition. This function has no subject and takes one or more arguments that are the names of attributes to which the remainder of the Expression is to be applied. If all of the attributes specified, @@ -3268,7 +3472,7 @@ provides several functions for evaluatin and "filename" contains "file.txt" consider the following examples:</p> </div> <table class="tableblock frame-all grid-all spread"> -<caption class="title">Table 19. allAttributes Example</caption> +<caption class="title">Table 20. allAttributes Example</caption> <colgroup> <col style="width: 50%;"> <col style="width: 50%;"> @@ -3290,7 +3494,7 @@ provides several functions for evaluatin </table> </div> <div class="sect2 function"> -<h3 id="anymatchingattribute"><a class="anchor" href="expression-language-guide.html#anymatchingattribute"></a>anyMatchingAttribute</h3> +<h3 id="anymatchingattribute"><a class="anchor" href="#anymatchingattribute"></a>anyMatchingAttribute</h3> <div class="paragraph"> <p><strong>Description</strong>: <span class="description">Checks to see if any of the given attributes, match the given condition. This function has no subject and takes one or more arguments that are Regular Expressions to match against attribute names. Any attribute whose name matches one of the supplied @@ -3319,7 +3523,7 @@ provides several functions for evaluatin and "filename" contains "file.txt" consider the following examples:</p> </div> <table class="tableblock frame-all grid-all spread"> -<caption class="title">Table 20. anyMatchingAttribute Example</caption> +<caption class="title">Table 21. anyMatchingAttribute Example</caption> <colgroup> <col style="width: 50%;"> <col style="width: 50%;"> @@ -3341,7 +3545,7 @@ provides several functions for evaluatin </table> </div> <div class="sect2 function"> -<h3 id="allmatchingattributes"><a class="anchor" href="expression-language-guide.html#allmatchingattributes"></a>allMatchingAttributes</h3> +<h3 id="allmatchingattributes"><a class="anchor" href="#allmatchingattributes"></a>allMatchingAttributes</h3> <div class="paragraph"> <p><strong>Description</strong>: <span class="description">Checks to see if any of the given attributes, match the given condition. This function has no subject and takes one or more arguments that are Regular Expressions to match against attribute names. Any attribute whose name matches one of the supplied @@ -3367,7 +3571,7 @@ provides several functions for evaluatin and "filename" contains "file.txt" consider the following examples:</p> </div> <table class="tableblock frame-all grid-all spread"> -<caption class="title">Table 21. anyMatchingAttributes Examples</caption> +<caption class="title">Table 22. anyMatchingAttributes Examples</caption> <colgroup> <col style="width: 50%;"> <col style="width: 50%;"> @@ -3393,7 +3597,7 @@ provides several functions for evaluatin </table> </div> <div class="sect2 function"> -<h3 id="anydelineatedvalue"><a class="anchor" href="expression-language-guide.html#anydelineatedvalue"></a>anyDelineatedValue</h3> +<h3 id="anydelineatedvalue"><a class="anchor" href="#anydelineatedvalue"></a>anyDelineatedValue</h3> <div class="paragraph"> <p><strong>Description</strong>: <span class="description">Splits a String apart according to a delimiter that is provided, and then evaluates each of the values against the rest of the Expression. If the Expression, when evaluated against any of the individual values, returns <code>true</code>, this @@ -3424,7 +3628,7 @@ though it does not have to be.</span></p consider the following examples:</p> </div> <table class="tableblock frame-all grid-all spread"> -<caption class="title">Table 22. anyDelineatedValue Examples</caption> +<caption class="title">Table 23. anyDelineatedValue Examples</caption> <colgroup> <col style="width: 50%;"> <col style="width: 50%;"> @@ -3446,7 +3650,7 @@ though it does not have to be.</span></p </table> </div> <div class="sect2 function"> -<h3 id="alldelineatedvalues"><a class="anchor" href="expression-language-guide.html#alldelineatedvalues"></a>allDelineatedValues</h3> +<h3 id="alldelineatedvalues"><a class="anchor" href="#alldelineatedvalues"></a>allDelineatedValues</h3> <div class="paragraph"> <p><strong>Description</strong>: <span class="description">Splits a String apart according to a delimiter that is provided, and then evaluates each of the values against the rest of the Expression. If the Expression, when evaluated against all of the individual values, returns <code>true</code> in each @@ -3477,7 +3681,7 @@ an embedded Expression, though it does n consider the following examples:</p> </div> <table class="tableblock frame-all grid-all spread"> -<caption class="title">Table 23. allDelineatedValues Examples</caption> +<caption class="title">Table 24. allDelineatedValues Examples</caption> <colgroup> <col style="width: 50%;"> <col style="width: 50%;"> @@ -3507,7 +3711,7 @@ an embedded Expression, though it does n </table> </div> <div class="sect2 function"> -<h3 id="join"><a class="anchor" href="expression-language-guide.html#join"></a>join</h3> +<h3 id="join"><a class="anchor" href="#join"></a>join</h3> <div class="paragraph"> <p><strong>Description</strong>: <span class="description">Aggregate function that concatenates multiple values with the specified delimiter. This function may be used only in conjunction with the <code>allAttributes</code>, <code>allMatchingAttributes</code>, and <code>allDelineatedValues</code> @@ -3534,7 +3738,7 @@ an embedded Expression, though it does n and "filename" contains "file.txt" consider the following examples:</p> </div> <table class="tableblock frame-all grid-all spread"> -<caption class="title">Table 24. join Examples</caption> +<caption class="title">Table 25. join Examples</caption> <colgroup> <col style="width: 50%;"> <col style="width: 50%;"> @@ -3556,7 +3760,7 @@ an embedded Expression, though it does n </table> </div> <div class="sect2 function"> -<h3 id="count"><a class="anchor" href="expression-language-guide.html#count"></a>count</h3> +<h3 id="count"><a class="anchor" href="#count"></a>count</h3> <div class="paragraph"> <p><strong>Description</strong>: <span class="description">Aggregate function that counts the number of non-null, non-false values returned by the <code>allAttributes</code>, <code>allMatchingAttributes</code>, and <code>allDelineatedValues</code>. This function @@ -3577,7 +3781,7 @@ an embedded Expression, though it does n and "number_list" contains "1,2,3,4,5" consider the following examples:</p> </div> <table class="tableblock frame-all grid-all spread"> -<caption class="title">Table 25. count Examples</caption> +<caption class="title">Table 26. count Examples</caption> <colgroup> <col style="width: 50%;"> <col style="width: 50%;"> @@ -3615,7 +3819,7 @@ an embedded Expression, though it does n </div> <div id="footer"> <div id="footer-text"> -Last updated 2016-08-29 08:05:44 -04:00 +Last updated 2016-11-26 01:07:10 -05:00 </div> </div> </body>
