{"id":10741,"date":"2015-05-18T09:44:29","date_gmt":"2015-05-18T14:44:29","guid":{"rendered":"http:\/\/jianmingli.com\/wp\/?p=10741"},"modified":"2015-10-21T09:43:08","modified_gmt":"2015-10-21T14:43:08","slug":"sun-idm-xpress-language","status":"publish","type":"post","link":"https:\/\/jianmingli.com\/wp\/?p=10741","title":{"rendered":"Sun IDM: XPRESS Language"},"content":{"rendered":"<div class='toc wptoc'>\n<h2>Contents<\/h2>\n<ol class='toc-odd level-1'>\n\t<li>\n\t\t<a href=\"#Intro\">Intro<\/a>\n\t<\/li>\n\t<li>\n\t\t<a href=\"#Example_Usages\">Example Usages<\/a>\n\t\t<ol class='toc-even level-2'>\n\t\t\t<li>\n\t\t\t\t<a href=\"#Control_Field_Visibility\">Control Field Visibility<\/a>\n\t\t\t<\/li>\n\t\t\t<li>\n\t\t\t\t<a href=\"#Calculating_Default_Field_Values\">Calculating Default Field Values<\/a>\n\t\t\t<\/li>\n\t\t\t<li>\n\t\t\t\t<a href=\"#Deriving_Field_Values\">Deriving Field Values<\/a>\n\t\t\t<\/li>\n\t\t\t<li>\n\t\t\t\t<a href=\"#Generating_Field_Values\">Generating Field Values<\/a>\n\t\t\t<\/li>\n\t\t\t<li>\n\t\t\t\t<a href=\"#Workflow_Transition_Conditions\">Workflow Transition Conditions<\/a>\n\t\t\t<\/li>\n\t\t\t<li>\n\t\t\t\t<a href=\"#Workflow_Actions\">Workflow Actions<\/a>\n\t\t\t<\/li>\n\t\t\t<li>\n\t\t\t\t<a href=\"#Invoking_Java_Methods_from_Workflow_Actions\">Invoking Java Methods from Workflow Actions<\/a>\n\t\t\t<\/li>\n\t\t\t<li>\n\t\t\t\t<a href=\"#Test_Expressions\">Test Expressions<\/a>\n\t\t\t<\/li>\n\t\t\t<li>\n\t\t\t\t<a href=\"#Tracing_XPRESS_Evaluation\">Tracing XPRESS Evaluation<\/a>\n\t\t\t<\/li>\n\t\t<\/ol>\n\t<li>\n\t\t<a href=\"#Functions\">Functions<\/a>\n\t\t<ol class='toc-even level-2'>\n\t\t\t<li>\n\t\t\t\t<a href=\"#Value_Constructor_Expressions\">Value Constructor Expressions<\/a>\n\t\t\t<\/li>\n\t\t\t<li>\n\t\t\t\t<a href=\"#Arithmetic_Expressions\">Arithmetic Expressions<\/a>\n\t\t\t<\/li>\n\t\t\t<li>\n\t\t\t\t<a href=\"#Logical_Expressions\">Logical Expressions<\/a>\n\t\t\t<\/li>\n\t\t\t<li>\n\t\t\t\t<a href=\"#String_Manipulation_Expressions\">String Manipulation Expressions<\/a>\n\t\t\t<\/li>\n\t\t\t<li>\n\t\t\t\t<a href=\"#List_Manipulation_Expressions\">List Manipulation Expressions<\/a>\n\t\t\t<\/li>\n\t\t\t<li>\n\t\t\t\t<a href=\"#Conditional_Iteration_and_Block_Expressions\">Conditional, Iteration, and Block Expressions<\/a>\n\t\t\t<\/li>\n\t\t\t<li>\n\t\t\t\t<a href=\"#Variables_and_Function_Definition_Expressions\">Variables and Function Definition Expressions<\/a>\n\t\t\t<\/li>\n\t\t\t<li>\n\t\t\t\t<a href=\"#Object_Manipulation_Expressions\">Object Manipulation Expressions<\/a>\n\t\t\t<\/li>\n\t\t\t<li>\n\t\t\t\t<a href=\"#Java_and_JavaScript_Expressions\">Java and JavaScript Expressions<\/a>\n\t\t\t<\/li>\n\t\t\t<li>\n\t\t\t\t<a href=\"#Debugging_and_Testing_Expressions\">Debugging and Testing Expressions<\/a>\n\t\t\t<\/li>\n\t\t<\/ol>\n\t<li>\n\t\t<a href=\"#Data_Types\">Data Types<\/a>\n\t<\/li>\n\t<li>\n\t\t<a href=\"#References\">References<\/a>\n\t<\/li>\n<\/ol>\n<\/ol>\n<\/div>\n<div class='wptoc-end'>&nbsp;<\/div>\n<span id=\"Intro\"><h2>Intro<\/h2><\/span>\n<p>* A functional language that uses<br \/>\n&#8211; syntax based on XML<br \/>\n&#8211; prefix notation ( == x 42 vs x == 42 )<br \/>\n* and can<br \/>\n&#8211; invoke methods of any Java class<br \/>\n&#8211; evaluate JavaScript<br \/>\n* Examples:<br \/>\n&#8211; Hello world:<\/p>\n<pre lang=\"xml\">\r\n<print><s>Hello World!<\/s><\/print><\/pre>\n<p>&#8211; Add calculation:<\/p>\n<pre lang=\"xml\">\r\n<add> <ref>counter<\/ref> <i>10<\/i> <\/add><\/pre>\n<p>* Used in IDM for:<br \/>\n&#8211; Customize UIs<br \/>\n&#8211; Defined workflow flow control<br \/>\n&#8211; Implement workflow actions<\/p>\n<span id=\"Example_Usages\"><h2>Example Usages<\/h2><\/span>\n<span id=\"Control_Field_Visibility\"><h3>Control Field Visibility<\/h3><\/span>\n<p>* Hide HomeDirectory if account type is not Solaris:<\/p>\n<pre lang=\"xml\">\r\n<Field name='HomeDirectory'>\r\n   <Display class='Text'\/>\r\n      <Property name='title' value='HomeDirectory'\/>\r\n   <\/Display>\r\n   <Disable>\r\n      <not>\r\n          <contains>\r\n            <ref>accountInfo.typeNames<\/ref>\r\n            <s>Solaris<\/s>\r\n         <\/contains>\r\n      <\/not>\r\n   <\/Disable>\r\n<\/Field><\/pre>\n<span id=\"Calculating_Default_Field_Values\"><h3>Calculating Default Field Values<\/h3><\/span>\n<pre lang=\"xml\">\r\n<Field name='waveset.accountId'>\r\n   <Display class='Text'\/>\r\n      <Property name='title' value='AccountID'\/>\r\n   <\/Display>\r\n   <Default>\r\n\t   <cond>\r\n\t\t <and>\r\n\t\t   <notnull><ref>accounts[AD].firstname<\/ref><\/notnull>\r\n\t\t   <notnull><ref>accounts[AD].lastname<\/ref><\/notnull>\r\n\t\t <\/and>\r\n\t\t <concat>\r\n\t\t   <substr>\r\n\t\t\t\t<ref>accounts[AD].firstname<\/ref>\r\n\t\t\t\t<i>0<\/i>\r\n\t\t\t\t<i>1<\/i>\r\n\t\t\t<\/substr>\r\n\t\t   <ref>accounts[AD].lastname<\/ref>\r\n\t\t <\/concat>\r\n\t   <\/cond>\r\n   <\/Default>\r\n<\/Field><\/pre>\n<span id=\"Deriving_Field_Values\"><h3>Deriving Field Values<\/h3><\/span>\n<p>* Display location based on location code:<\/p>\n<pre lang=\"xml\">\r\n<Field name='location' prompt='Location'>\r\n   <Display class='Text'\/>\r\n      <Derivation>\r\n         <switch>\r\n            <ref>accounts[Oracle].locCode<\/ref>\r\n            <case>\r\n               <s>AUS<\/s>\r\n               <s>Austin<\/s>\r\n            <\/case>\r\n            <case>\r\n               <s>HOU<\/s>\r\n               <s>Houston<\/s>\r\n            <\/case>\r\n            <case>\r\n               <s>DAL<\/s>\r\n               <s>Dallas<\/s>\r\n            <\/case>\r\n            <case default='true'>\r\n               <s>unknown<\/s>\r\n            <\/case>\r\n         <\/switch>\r\n   <\/Derivation>\r\n<\/Field><\/pre>\n<span id=\"Generating_Field_Values\"><h3>Generating Field Values<\/h3><\/span>\n<pre lang=\"xml\">\r\n<Field name='accounts[Oracle].locCode'>\r\n   <Expansion>\r\n      <switch>\r\n         <ref>location<\/ref>\r\n         <case>\r\n            <s>Austin<\/s>\r\n            <s>AUS<\/s>\r\n         <\/case>\r\n         <case>\r\n            <s>Houston<\/s>\r\n            <s>HOU<\/s>\r\n         <\/case>\r\n         <case>\r\n            <s>Dallas<\/s>\r\n            <s>DAL<\/s>\r\n         <\/case>\r\n      <\/switch>\r\n   <\/Expansion>\r\n<\/Field><\/pre>\n<span id=\"Workflow_Transition_Conditions\"><h3>Workflow Transition Conditions<\/h3><\/span>\n<pre lang=\"xml\">\r\n<Activity name='Check Results'>\r\n   <Transition to='Log Errors'>\r\n      <gt> <ref>ERROR_COUNT<\/ref> <i>0<\/i> <\/gt>\r\n   <\/Transition>\r\n   <Transition to='end'\/>\r\n<\/Activity><\/pre>\n<span id=\"Workflow_Actions\"><h3>Workflow Actions<\/h3><\/span>\n<pre lang=\"xml\">\r\n<Activity name='Increment Counter'>\r\n   <Action>\r\n      <expression>\r\n         <set name='counter'>\r\n            <add> <ref>counter<\/ref> <i>1<\/i> <\/add>\r\n         <\/set>\r\n      <\/expression>\r\n   <\/Action>\r\n   <Transition to='Next'\/>\r\n<\/Activity><\/pre>\n<span id=\"Invoking_Java_Methods_from_Workflow_Actions\"><h3>Invoking Java Methods from Workflow Actions<\/h3><\/span>\n<pre lang=\"xml\">\r\n<Activity name='Log Status'>\r\n\r\n   <Action>\r\n      <expression>\r\n         <invoke name='logStatus'\r\n            class='custom.OracleStatusLog'>\r\n            <ref>accountId<\/ref>\r\n            <ref>email<\/ref>\r\n            <ref>status<\/ref>\r\n         <\/invoke>\r\n      <\/expression>\r\n   <\/Action>\r\n   <Transition to='Next'\/>\r\n<\/Activity><\/pre>\n<span id=\"Test_Expressions\"><h3>Test Expressions<\/h3><\/span>\n<p>* With lh command:<\/p>\n<pre lang=\"bash\">\r\ncd %WSHOME%\\bin\r\nlh xmlparse xpress_file<\/pre>\n<span id=\"Tracing_XPRESS_Evaluation\"><h3>Tracing XPRESS Evaluation<\/h3><\/span>\n<p>* Two tracing levels:<br \/>\n&#8211; global<br \/>\n&#8211; block level<br \/>\n* Turn on global tracing in Waveset.properties (and don&#8217;t forget to reload properties):<br \/>\nxpress.trace=true<br \/>\n* Turn on block level tracing:<\/p>\n<pre lang=\"xml\">\r\n<block trace='true'>\r\n   <invoke name='getTime' class='java.util.Date'\/>\r\n<\/block><\/pre>\n<pre lang=\"xml\">\r\n<Default>\r\n   <block trace = 'true'>\r\n      <ref>global.accountId<\/ref>\r\n   <\/block>\r\n<\/Default><\/pre>\n<p>&#8211; invalid block examples:<\/p>\n<pre lang=\"xml\">\r\n<block trace='true'>\r\n   <Field name ='field1'>\r\n\u2026\r\n   <\/Field>\r\n<\/block><\/pre>\n<pre lang=\"xml\">\r\n<Field name='Field2'>\r\n   <block trace='true'>\r\n      <Default>\r\n         <ref>global.accounts<\/ref>\r\n      <\/Default>\r\n   <\/block>\r\n<\/Field><\/pre>\n<span id=\"Functions\"><h2>Functions<\/h2><\/span>\n<span id=\"Value_Constructor_Expressions\"><h3>Value Constructor Expressions<\/h3><\/span>\n<p>* array<\/p>\n<pre lang=\"xml\">\r\n<array>\r\n   <s>apples<\/s>\r\n   <s>oranges<\/s>\r\n   <s>wiper blades<\/s>\r\n<\/array><\/pre>\n<p>* i<\/p>\n<pre lang=\"xml\">\r\n<i>42<\/i>\r\n<i>-1234<\/i><\/pre>\n<p>* list<\/p>\n<pre lang=\"xml\">\r\n\t<list>\r\n   <s>apples<\/s>\r\n   <s>oranges<\/s>\r\n   <s>wiper blades<\/s>\r\n<\/list><\/pre>\n<p>* map<\/p>\n<pre lang=\"xml\">\r\n<map>\r\n   <!--Key 1-->\r\n   <!--Value 1-->\r\n   <!--Key n-->\r\n   <!--Value n-->\r\n<\/map><\/pre>\n<p>* null<\/p>\n<pre lang=\"xml\">\r\n<null\/>\r\n<null><\/null><\/pre>\n<p>* s<\/p>\n<pre lang=\"xml\">\r\n<s>Now is the time<\/s><\/pre>\n<span id=\"Arithmetic_Expressions\"><h3>Arithmetic Expressions<\/h3><\/span>\n<p>* add<\/p>\n<pre lang=\"xml\">\r\n<add> <i>40<\/i> <i>1<\/i> <s>1<\/s> <\/add><\/pre>\n<p>* div<\/p>\n<pre lang=\"xml\">\r\n<div> <i>84<\/i> <i>2<\/i><\/div><\/pre>\n<p>* mod<\/p>\n<pre lang=\"xml\">\r\n<mod> <i>142<\/i> <i>100<\/i> <\/mod><\/pre>\n<p>* mult<\/p>\n<pre lang=\"xml\">\r\n<mult> <i>7<\/i> <i>3<\/i> <i>2<\/i> <\/mult><\/pre>\n<p>* sub<\/p>\n<pre lang=\"xml\">\r\n<sub> <i>50<\/i> <i>6<\/i> <i>2<\/i> <\/sub><\/pre>\n<span id=\"Logical_Expressions\"><h3>Logical Expressions<\/h3><\/span>\n<p>* and<\/p>\n<pre lang=\"xml\">\r\n<and> <i>42<\/i> <s>cat<\/s> <i>null<\/i> <\/and> # return zero\r\n<and> <i>42<\/i> <s>cat<\/s> <\/and> # return cat<\/pre>\n<p>* cmp<\/p>\n<pre lang=\"xml\">\r\n<cmp>\r\n    <i>20<\/i>\r\n    <i>100<\/i>\r\n <\/cmp> # returns -1\r\n\r\n <cmp>\r\n    <s>bob<\/s>\r\n    <s>ray<\/s>\r\n <\/cmp> # returns -16 (b is 16 positions behind r)\r\n <cmp>\r\n    <s>daryl<\/s>\r\n    <s>daryl<\/s>\r\n <\/cmp> # returns true<\/pre>\n<p>* eq<br \/>\n0: false<br \/>\n1: true<\/p>\n<pre lang=\"xml\">\r\n<eq> <ref>role<\/ref> <s>engineering<\/s> <\/eq><\/pre>\n<p>* gt<\/p>\n<pre lang=\"xml\">\r\n<gt>\r\n    <ref>age<\/ref>\r\n    <i>42<\/i>\r\n <\/gt><\/pre>\n<p>* gte<\/p>\n<pre lang=\"xml\">\r\n<gte>\r\n   <i>10<\/i>\r\n   <i>5<\/i>\r\n<\/gte> # return 1 (true)<\/pre>\n<p>* isFalse<\/p>\n<pre lang=\"xml\">\r\n0: true\r\n1: false\r\n<isFalse>\r\n   <s>false<\/s>\r\n<\/isFalse> # returns 1 (false)<\/pre>\n<p>* isnull<br \/>\n0: not null<br \/>\n1: is null<\/p>\n<pre lang=\"xml\">\r\n<isnull> <null\/> <\/isnull> # returns 1 (null)\r\n<isnull> <i>0<\/i> <\/isnull> # return 0 (not null)<\/pre>\n<p>* isTrue<br \/>\n0: the argument is logically false. The following are considered true: the string true, a Boolean true, and a non-zero integer. (Anything else is considered false.)<br \/>\n1: the argument is logically true.<\/p>\n<pre lang=\"xml\">\r\n<isTrue>\r\n   <s>false<\/s>\r\n<\/isTrue> # returns 0<\/pre>\n<p>* lt<\/p>\n<pre lang=\"xml\">\r\n<lt>\r\n   <i>10<\/i>\r\n   <i>5<\/i>\r\n <\/lt><\/pre>\n<p>* lte<\/p>\n<pre lang=\"xml\">\r\n<lte>\r\n    <ref>age<\/ref>\r\n    <i>42<\/i>\r\n <\/lte><\/pre>\n<p>* ncmp (case insensitive comparison)<\/p>\n<pre lang=\"xml\">\r\n<ncmp>\r\n   <s>Daryl<\/s>\r\n   <s>daryl<\/s>\r\n<\/ncmp> # returns 0 (equal)<\/pre>\n<p>* neq<\/p>\n<pre lang=\"xml\">\r\n<neq>\r\n    <ref>role<\/ref>\r\n    <s>management<\/s>\r\n <\/neq><\/pre>\n<p>* not<\/p>\n<pre lang=\"xml\">\r\n <not> <eq> <i>42<\/i> <i>24<\/i> <\/eq> <\/not> # returns 1<\/pre>\n<p>* or<\/p>\n<pre lang=\"xml\">\r\n<or> <i>0<\/i> <i>0<\/i> <\/or> # returns 0, logical false\r\n<or> <i>0<\/i> <s>cat<\/s> <\/or> # returns cat, logical true<\/pre>\n<p>* notnull<\/p>\n<pre lang=\"xml\">\r\n<notnull>\r\n   <ref>firstname<\/ref>\r\n<\/notnull> # returns 1\r\n<notnull><null\/><\/notnull> # returns 0<\/pre>\n<span id=\"String_Manipulation_Expressions\"><h3>String Manipulation Expressions<\/h3><\/span>\n<p>* indexOf<\/p>\n<pre lang=\"xml\">\r\n<indexOf>\r\n   <s>abcabc<\/s>\r\n   <s>abc<\/s>\r\n   <s>l<\/s>\r\n<\/indexOf> # returns 3<\/pre>\n<p>* concat<\/p>\n<pre lang=\"xml\">\r\n<concat>\r\n   <s>Now <\/s><s>is <\/s><s>the <\/s><s>time<\/s>\r\n<\/concat> # returns <s>Now is the time<\/s><\/pre>\n<p>* downcase<\/p>\n<pre lang=\"xml\">\r\n<downcase><s>ABC<\/s><\/downcase> # returns <s>abc<\/s><\/pre>\n<p>* length<\/p>\n<pre lang=\"xml\">\r\n<length>\r\n   \t<list>\r\n      <s>apples<\/s>\r\n      <s>oranges<\/s>\r\n   <\/list>\r\n<\/length> # returns 2\r\n\r\n<length>\r\n   <s>Hello world!<\/s>\r\n<\/length> # returns 11<\/pre>\n<p>* ltrim<\/p>\n<pre lang=\"xml\">\r\n<ltrim><s> hello<\/s><\/ltrim><\/pre>\n<p>* match: deprecated, use contains instead<\/p>\n<pre lang=\"xml\"><\/pre>\n<p>* message<\/p>\n<pre lang=\"xml\">\r\n<message severity-'ok' name='DEFAULT_MESSAGE'>\r\n   <!--message parameter 0-->\r\n   <!--message parameter n-->\r\n<\/message><\/pre>\n<p>* pad<\/p>\n<pre lang=\"xml\">\r\n<pad>\r\n   <s> email<\/s>\r\n   <i>10<\/i>\r\n<\/pad><\/pre>\n<p>* rtrim<\/p>\n<pre lang=\"xml\"><\/pre>\n<p>* split<\/p>\n<pre lang=\"xml\">\r\n<split>\r\n   <s>Austin City Limits<\/s>\r\n   <s> <\/s>\r\n<\/split>\r\n# returns:\r\n\t<list>\r\n   <s>Austin<\/s>\r\n   <s>City<\/s>\r\n   <s>Limits<\/s>\r\n<\/list>\r\n\r\n<split>\r\n   <s>(512)338-1818<\/s>\r\n   <s>()-<\/s>\r\n<\/split>\r\n# returns:\r\n\t<list>\r\n   <s>512<\/s>\r\n   <s>338<\/s>\r\n   <s>1818<\/s>\r\n<\/list><\/pre>\n<p>* substr<\/p>\n<pre lang=\"xml\">\r\n<substr>\r\n   <s>Now is the time<\/s>\r\n   <i>0<\/i>\r\n   <i>3<\/i>\r\n<\/substr> # returns: <s>Now<\/s>\r\n\r\n<block>\r\n    <substr l='4'>\r\n        <s>Hello World<\/s> --> Hello World\r\n    <\/substr> --> Hell\r\n<\/block> --> Hell<\/pre>\n<p>* trim<\/p>\n<pre lang=\"xml\">\r\n<trim><s> hello <\/s><\/trim><\/pre>\n<p>* upcase<\/p>\n<pre lang=\"xml\">\r\n<upcase><s>abc<\/s><\/upcase><\/pre>\n<p>* ztrim<\/p>\n<pre lang=\"xml\">\r\n<ztrim>\r\n   <s>00000sample<\/s>\r\n<\/ztrim> # returns <s>sample<\/s><\/pre>\n<span id=\"List_Manipulation_Expressions\"><h3>List Manipulation Expressions<\/h3><\/span>\n<p>* append<\/p>\n<pre lang=\"xml\">\r\n<append>\r\n    <ref>srclist<\/ref>\r\n    <s>oranges<\/s>\r\n<\/append>\r\n\r\n<set name= 'somelist'>\r\n   <List>\r\n    <s>We<\/s>\r\n    <s>say<\/s>\r\n  <\/List>\r\n<\/set>\r\n<append name= 'somelist'>\r\n  <s>Hello<\/s>\r\n  <s>World<\/s>\r\n<\/append>\r\n<ref>someList<\/ref><\/pre>\n<p>* appendAll<\/p>\n<pre lang=\"xml\">\r\n<appendAll>\r\n   <ref>srclist<\/ref>\r\n   \t<list>\r\n      <s>apples<\/s>\r\n      <s>oranges<\/s>\r\n      <s>peaches<\/s>\r\n   <\/list>\r\n<\/appendAll> # Create a new list by combining srclist and three elements\r\n\r\n<appendAll name='srclist'>\r\n   \t<list>\r\n      <s>apples<\/s>\r\n      <s>oranges<\/s>\r\n      <s>peaches<\/s>\r\n   <\/list>\r\n<\/appendAll> # Add three elements to srclist<\/pre>\n<p>* contains<\/p>\n<pre lang=\"xml\">\r\n<contains>\r\n   \t<list>\r\n      <s>apples<\/s>\r\n      <s>oranges<\/s>\r\n   <\/list>\r\n   <s>apples<\/s>\r\n<\/contains> # returns 1\r\n\r\n<contains>\r\n   <s>foobar<\/s>\r\n   <s>foo<\/s>\r\n<\/contains> # also returns 1<\/pre>\n<p>* containsAll<\/p>\n<pre lang=\"xml\"><\/pre>\n<p>*<\/p>\n<pre lang=\"xml\"><\/pre>\n<p>*<\/p>\n<pre lang=\"xml\"><\/pre>\n<p>* containsAny<\/p>\n<pre lang=\"xml\"><\/pre>\n<p>* filterdup<\/p>\n<pre lang=\"xml\"><\/pre>\n<p>* filternull<\/p>\n<pre lang=\"xml\"><\/pre>\n<p>* expand<br \/>\n&#8211; Returns the string value of the subexpression with $() variable references expanded.<\/p>\n<pre lang=\"xml\">\r\n<Rule name=\"testExpand\">\r\n\t<RuleArgument name=\"str\"\/>\r\n\t<expand><s>Expanded: $(str)<\/s><\/expand>\r\n<\/Rule>\r\n\r\n<!-- If input str is 'test' we'll get: -->\r\n<String>Expanded: test<\/String>\r\n<\/pre>\n<p>* get: Retrieves the value of the nth element in the list. The list indexes starts count from zero (0). Arguments are a list and an integer.<\/p>\n<pre lang=\"xml\">\r\n<get>\r\n   \t<list>\r\n      <s>apples<\/s>\r\n      <s>oranges<\/s>\r\n   <\/list>\r\n   <i>1<\/i>\r\n<\/get> # returns <s>oranges<\/s><\/pre>\n<p>* indexOf<\/p>\n<pre lang=\"xml\">\r\n<indexOf>\r\n   \t<list>\r\n      <s>apples<\/s>\r\n      <s>oranges<\/s>\r\n   <\/list>\r\n   <s>oranges<\/s>\r\n<\/indexOf> # returns 1\r\n\r\n<indexOf>\r\n   \t<list\r\n      <s>apples<\/s>\r\n      <s>oranges<\/s>\r\n   <\/list>\r\n   <s>oranges<\/s>\r\n<i>2<\/i>\r\n<\/indexOf> # returns 3??<\/pre>\n<p>* insert<\/p>\n<pre lang=\"xml\">\r\n<insert>\r\n   \t<list>\r\n      <s>apples<\/s>\r\n      <s>oranges<\/s>\r\n   <\/list>\r\n   <i>1<\/i>\r\n   <s>wiper blades<\/s>\r\n<\/insert>\r\n\r\nThis expression returns the following list.\r\n\r\n\t<list>\r\n   <s>apples<\/s>\r\n   <s>wiper blades<\/s>\r\n   <s>oranges<\/s>\r\n<\/list><\/pre>\n<p>* length<\/p>\n<pre lang=\"xml\">\r\n<length>\r\n   \t<list>\r\n      <s>apples<\/s>\r\n      <s>oranges<\/s>\r\n   <\/list>\r\n<\/length> # returns 2<\/pre>\n<p>* remove<\/p>\n<pre lang=\"xml\">\r\n<remove>\r\n    <ref>srclist<\/ref>\r\n    <s>oranges<\/s>\r\n<\/remove><\/pre>\n<p>* removeAll<\/p>\n<pre lang=\"xml\"><\/pre>\n<p>* retainAll<\/p>\n<pre lang=\"xml\"><\/pre>\n<p>* setlist (and overwrites)<\/p>\n<pre lang=\"xml\">\r\n<setlist>\r\n   \t<list>\r\n      <s>apples<\/s>\r\n      <s>oranges<\/s>\r\n      <s>wiper blades<\/s>\r\n   <\/list>\r\n   <i>2<\/i>\r\n   <s>bassoons<\/s>\r\n<\/setlist>\r\n\r\nThis expression results in the following list and returns null.\r\n\r\n\t<list>\r\n   <s>apples<\/s>\r\n   <s>oranges<\/s>\r\n   <s>bassoons<\/s>\r\n<\/list><\/pre>\n<span id=\"Conditional_Iteration_and_Block_Expressions\"><h3>Conditional, Iteration, and Block Expressions<\/h3><\/span>\n<p>* block<\/p>\n<pre lang=\"xml\">\r\n<block>\r\n    <s>Hello there!<\/s>\r\n    <add> <i>100<\/i> <i>2<\/i> <\/add>\r\n    <i>42<\/i>\r\n<\/block> # returns 42<\/pre>\n<p>* break<\/p>\n<pre lang=\"xml\">\r\n<dolist name='el'>\r\n<ref>list<\/ref>\r\n   <cond><eq><ref>el<\/ref><s>000<\/s><\/eq>\r\n      <break>\r\n         <ref>el<\/ref>\r\n      <\/break>\r\n   <\/cond>\r\n<null\/>\r\n<\/dolist><\/pre>\n<p>* cond (if\/else)<\/p>\n<pre lang=\"xml\">\r\n<cond>\r\n     <gt>\r\n      <ref>age<\/ref>\r\n       <i>40<\/i>\r\n     <\/gt>\r\n   <s>old<\/s>\r\n   <s>young<\/s>\r\n<\/cond><\/pre>\n<p>* dolist<br \/>\nThe following expression creates a list called subset, which contains the subset of elements in <em>srclist <\/em>that exceed 10.<\/p>\n<pre lang=\"xml\">\r\n<set name='subset'>\r\n    <dolist name='el'>\r\n      <ref>srclist<\/ref>\r\n      <cond>\r\n        <gt>\r\n          <ref>el<\/ref>\r\n          <i>10<\/i>\r\n        <\/gt>\r\n      <\/cond>\r\n      <ref>el<\/ref>\r\n    <\/dolist>\r\n <\/set><\/pre>\n<p>* switch<\/p>\n<pre lang=\"xml\">\r\n<switch>\r\n   <s>A<\/s>\r\n   <case default='true'>\r\n      <s>unknown<\/s>\r\n   <\/case>\r\n   <case>\r\n      <s>A<\/s>\r\n      <s>apples<\/s>\r\n   <\/case>\r\n   <case>\r\n      <s>B<\/s>\r\n      <s>oranges<\/s>\r\n   <\/case>\r\n<\/switch><\/pre>\n<p>* select: Returns the first non-null (and non-zero) value in a list.<\/p>\n<pre lang=\"xml\">\r\n<select>\r\n    <ref>:display.session<\/ref>\r\n    <ref>context<\/ref>\r\n<\/select>\r\n\r\nIf you have the following statement:\r\n\r\n<select>\r\n   <ref>first\/ref>\r\n   <ref>second<\/ref>\r\n   <ref>third<\/ref.\r\n<\/select><\/pre>\n<p>* while<\/p>\n<pre lang=\"xml\">\r\n<while>\r\n    <gt>\r\n       <ref>counter<\/ref>\r\n      <i>0<\/i>\r\n    <\/gt>\r\n   <set name='counter'>\r\n      <sub> <ref>counter<\/ref>\r\n         <i>1<\/i>\r\n       <\/sub>\r\n   <\/set>\r\n<\/while><\/pre>\n<span id=\"Variables_and_Function_Definition_Expressions\"><h3>Variables and Function Definition Expressions<\/h3><\/span>\n<p>* ref: References the value of a variable. The variable can either be an external variable supported by the host application or an internal variable defined with defvar.<\/p>\n<pre lang=\"xml\">\r\n<ref>waveset.role<\/ref>\r\n\r\n<defvar name='milk'><s>milkvalue<\/s><\/defvar>\r\n<defvar name='shake'><s>milk<\/s><\/defvar>\r\n<ref><ref>shake<\/ref> # returns <s>milkshake<\/s><\/pre>\n<p>* defvar<\/p>\n<pre lang=\"xml\">\r\n<defvar name='theList'>\r\n  \t<list>\r\n     <s>apples<\/s>\r\n     <s>oranges<\/s>\r\n  <\/list>\r\n<\/defvar>\r\n\r\n<defvar name='counter'>\r\n   <i>0<\/i>\r\n<\/defvar><\/pre>\n<p>* defarg: Defines an argument within a function defined with defun. Arguments are similar to variables, but they must be defined in the order in which arguments are passed to the function.<\/p>\n<pre lang=\"xml\">\r\n<defarg name='arg1'\/>\r\n<defarg name='arg2'\/><\/pre>\n<p>* defun: Defines a new function. The defarg function must be used to declare the arguments to a function. Use the call function to execute the function. Functions are typically defined within forms.<\/p>\n<pre lang=\"xml\">\r\n<defun name='add100'>\r\n   <defarg name='input'\/>\r\n    <add>\r\n       <ref>input<\/ref>\r\n       <i>100<\/i>\r\n    <\/add>\r\n<\/defun><\/pre>\n<p>* call<\/p>\n<pre lang=\"xml\">\r\n<call name='add100'>\r\n   <i>42<\/i>\r\n<\/call><\/pre>\n<p>* rule: Calls a rule<\/p>\n<pre lang=\"xml\">\r\n<rule name='getEmployeeId'>\r\n    <argument name='accountId' value='maurelius'\/>\r\n<\/rule>\r\n\r\n<rule name='getEmployeeId'>\r\n   <argument name='accountId'>\r\n       <ref>username<\/ref>\r\n   <\/argument>\r\n<\/rule><\/pre>\n<span id=\"Object_Manipulation_Expressions\"><h3>Object Manipulation Expressions<\/h3><\/span>\n<p>* get: Retrieves a value from within an object.<\/p>\n<pre lang=\"xml\">\r\n<get>\r\n   <!--List, Map, or Object -->\r\n   <!-- String -->\r\n<\/get><\/pre>\n<p>* putmap<\/p>\n<pre lang=\"xml\">\r\n<putmap>\r\n   <ref>userView<\/ref>\r\n   <s>waveset.role<\/s>\r\n   <s>engineering<\/s>\r\n<\/putmap><\/pre>\n<p>* setlist<\/p>\n<pre lang=\"xml\">\r\n<setlist>\r\n   <ref>myList<\/ref>\r\n   <i>s<\/i>\r\n   <s>accounts<\/s>\r\n<\/setlist><\/pre>\n<p>* setvar<\/p>\n<pre lang=\"xml\">\r\n<setvar>\r\n   <ref>var<\/ref>\r\n   <s>text<\/s>\r\n<\/setvar><\/pre>\n<p>* instanceof<\/p>\n<pre lang=\"xml\">\r\n<instanceof name='List'>\r\n    <new class='java.util.ArrayList'\/>\r\n<\/instanceof><\/pre>\n<span id=\"Java_and_JavaScript_Expressions\"><h3>Java and JavaScript Expressions<\/h3><\/span>\n<p>* invoke<br \/>\n&#8211; static method<\/p>\n<pre lang=\"xml\">\r\n<invoke class='class name' name='method name'>\r\n   <!--method argument 0 -->\r\n   <!--method argument n-->\r\n<\/invoke><\/pre>\n<p>&#8211; instance  method<\/p>\n<pre lang=\"xml\">\r\n<invoke class='method name'>\r\n   <!--the object to invoke the method on -->\r\n   <!--method argument 0 -->\r\n   <!--method argument n-->\r\n<\/invoke><\/pre>\n<p>* new: Creates an instance of a Java class.<\/p>\n<pre lang=\"xml\">\r\n<new class='classname'\/>\r\n<!--constructor argument 0-->\r\n<!--constructor argument n-->\r\n<\/new><\/pre>\n<p>* script: Encapsulates a fragment of JavaScript.<\/p>\n<pre lang=\"xml\">\r\n<script>\r\n   var arg1 = env.get('arg1');\r\n   arg1 + 100;\r\n<\/script>\r\n\r\n<script>\r\n   importPackage(Packages.java.util);\r\n   var cal Now = Calendar.getInstance();\r\n   cal Now.getTime()\r\n<\/script><\/pre>\n<span id=\"Debugging_and_Testing_Expressions\"><h3>Debugging and Testing Expressions<\/h3><\/span>\n<p>* trace<\/p>\n<pre lang=\"xml\">\r\n<trace><i>1<\/i><\/trace>\r\n\r\n<trace><i>0<\/i><\/trace><\/pre>\n<p>* print: Prints the value of each subexpression to standard output.<\/p>\n<pre lang=\"xml\">\r\n<print>\r\n   <s>Ashley World!<\/s>\r\n<\/print><\/pre>\n<span id=\"Data_Types\"><h2>Data Types<\/h2><\/span>\n<p>* integer<br \/>\n* list<br \/>\n* null<br \/>\n* object<br \/>\n* string<\/p>\n<span id=\"References\"><h2>References<\/h2><\/span>\n<p>* <a href=\"http:\/\/www.practice.allidm.com\/IDM7\/17Xpress\/index.html\">IDM XPRESS<\/a><br \/>\n* <a href=\"https:\/\/docs.oracle.com\/cd\/E19225-01\/820-5821\/bvbps\/index.html\">Chapter 5 XPRESS Language<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Intro * A functional language that uses &#8211; syntax based on XML &#8211; prefix notation ( == x 42 vs x == 42 ) * and can &#8211; invoke methods of any Java class &#8211; evaluate JavaScript * Examples: &#8211; &hellip; <a href=\"https:\/\/jianmingli.com\/wp\/?p=10741\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[530],"tags":[651,540],"class_list":["post-10741","post","type-post","status-publish","format-standard","hentry","category-sunidm","tag-sunidm","tag-xpress"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p8cRUO-2Nf","_links":{"self":[{"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=\/wp\/v2\/posts\/10741","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=10741"}],"version-history":[{"count":10,"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=\/wp\/v2\/posts\/10741\/revisions"}],"predecessor-version":[{"id":10970,"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=\/wp\/v2\/posts\/10741\/revisions\/10970"}],"wp:attachment":[{"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=10741"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=10741"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=10741"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}