www.trisotech.com
Open in
urlscan Pro
34.152.17.119
Public Scan
Submitted URL: https://mailer.trisotech.com/l/fMup6k763h892m763K6ruR68YVMg/X763cOkOSORdMYk1T89xbUIw/2cWLXj763NuqQR0mAyxP7uKg
Effective URL: https://www.trisotech.com/whats-new-in-dmn-1-4-and-1-5/?utm_campaign=NewWebContent&utm_medium=Email&utm_source=Sendy
Submission: On June 12 via manual from US — Scanned from CA
Effective URL: https://www.trisotech.com/whats-new-in-dmn-1-4-and-1-5/?utm_campaign=NewWebContent&utm_medium=Email&utm_source=Sendy
Submission: On June 12 via manual from US — Scanned from CA
Form analysis
2 forms found in the DOMGET https://www.trisotech.com/
<form method="GET" role="search" class="navbar-form navbar-left ng-pristine ng-valid" id="express-form" novalidate="" action="https://www.trisotech.com/">
<label>
<span class="screen-reader-text">Search for:</span>
<input type="search" class="search-field" placeholder="Search …" value="" name="s">
</label>
<input type="submit" class="search-submit" value="Search">
</form>
POST //translate.googleapis.com/translate_voting?client=te
<form id="goog-gt-votingForm" action="//translate.googleapis.com/translate_voting?client=te" method="post" target="votingFrame" class="VIpgJd-yAWNEb-hvhgNd-aXYTce"><input type="text" name="sl" id="goog-gt-votingInputSrcLang"><input type="text"
name="tl" id="goog-gt-votingInputTrgLang"><input type="text" name="query" id="goog-gt-votingInputSrcText"><input type="text" name="gtrans" id="goog-gt-votingInputTrgText"><input type="text" name="vote" id="goog-gt-votingInputVote"></form>
Text Content
* Login Toggle navigation * Login * Home * Solutions * Products * Digital Enterprise Suite * Digital Modeling Suite * Digital Automation Suite * Services * Success Programs * Free Trials * Trainings * Resources * Request Demo * Request Pricing Search for: * Home * Resources * Blog BLOG WHAT’S NEW IN DMN 1.4 AND 1.5 By Bruce Silver Read Time: 4 Minutes One of the great things about the DMN standard is it is continually being updated with new features that make it more powerful and easier to use. As soon as the DMN Revision Task Force (RTF) submits a new version for OMG approval, it immediately begins on the next revision. That approval process, for some reason, is exceptionally slow. While DMN 1.4 was just recently released to the public, DMN 1.5 is already complete and the RTF is working on version 1.6. In this post we’ll outline what’s new in both DMN 1.4 and 1.5. DMN 1.4 A few new FEEL functions and boxed expressions were added in DMN 1.4, as well as minor changes to the FEEL grammar and examples. NEW FEEL FUNCTIONS STRING JOIN() It is not uncommon to want to concatenate a list of text items into a single string, either delimited or not. That’s what string join() does. It’s one I use a lot. With a single argument, string join() simply concatenates the list items: * string join(["a", "b", "c"]) returns "abc" With two arguments, the second one provides the delimiter: * string join(["a", "b", "c"], "-") returns "a-b-c" * string join(["a", "b", "c"], ", ") returns "a, b, c" CONTEXT PUT() Several new context functions were added, of which the most useful by far is context put(). Before context put(), if you wanted to add a column to a table, you needed to iterate a context BKM with one context entry per column, copying the old values except for the one new value – a lot of work for such a small thing. Context put() makes it simpler. * context put(myContext, key, value) adds a component with name specified by key and the value specified by value if myContext does not already have a component with the name specified by key. If key is already a component of myContext, context put() simply updates its value. * In the common use case of adding a column to a table, you just need a literal expression, not a BKM – something like this: for x in myTable return context put(x, newColName, <value expression based on some components of x>) Here x is a row of myTable. OTHER CONTEXT FUNCTIONS Also new but not quite as useful are context() and context merge(). Context() takes a list of key-value pairs and creates a context with those as the context entries. Context merge() takes a list of contexts and creates a single context. NOW() AND TODAY() A basic principle of DMN is the model should return the same result regardless of when you execute it. The new FEEL functions now() and today() in a DMN model violate that principle, but they are often too convenient to ignore. now() returns the current date and time; today() returns the current date. If you want to be pure about it, you can always execute now() or today() in BPMN and then pass the result to input data in DMN. NEW ROUNDING FUNCTIONS DMN1.4 adds a few new functions for rounding numbers needed in financial services. Previously, we could round numbers using decimal(), floor(), and ceiling(). DMN 1.4 adds four more: round up(), round down(), round half up(), round half down(). All the rounding functions have two parameters, number and scale. Scale determines the number of digits following the decimal point following rounding. The differences between the rounding functions are described below: NEW BOXED EXPRESSIONS Some business users find certain operators confusing when used in complex literal expressions. DMN1.4 accordingly added new boxed expressions to try to make them simpler. FILTER The filter boxed expression separates the original list from the filter condition. Instead of a literal expression like this: CustomerTable[LoyaltyStatus = "Gold"] the filter boxed expression looks like this: CONDITIONAL The conditional boxed expression is an alternative to if..then..else literal expressions. Instead of a literal expression like this: if count(Gold Customers) >0 then sum(Gold Customers.CurrentYearPurchaseAmount) else 0 the conditional boxed expression looks like this: ITERATOR The iterator boxed expression is an alternative to for..in..return, some..in..satisfies, or every..in..satisfies operators in literal expressions. Instead of a literal expression like this: for customer in Gold Customers return getMedianPurchaseAmount(customer) the iterator boxed expression looks like this: DRD CHANGES In the DRD, decisions and input data that are collections are now marked with three vertical bars. This is actually convenient in spotting errors in the element type assignments. DMN 1.5 Most of the improvements in DMN 1.5 were minor and technical in nature. Here are the most significant ones. IMPORT INTO THE DEFAULT NAMESPACE Prior to DMN 1.5, importing elements from another DMN model required assigning them a namespace prefix to avoid name and type conflicts with the importing model namespace. Trisotech Decision Modeler has always supported this with its Include feature, but for a long time has also supported an alternative, more convenient import mechanism using the Digital Enterprise Graph. DMN 1.5 now makes a key feature of that mechanism – importing directly into the importing model namespace – officially part of the standard. Doing it this way does not require prefixing the imported elements, and effectively allows a complex model to be assembled from multiple model files, all within the same namespace. When a namespace for the imported elements is not provided, DMN 1.5 assigns them to the importing model namespace. When there is a name or type conflict between the imported elements and the importing model, the original importing model names and types are preserved. ALLOWED VALUES AND UNARY TESTS Prior to DMN 1.5, item definitions could apply simple constraints to variables, such as a numeric range or an enumerated list of allowed values. These constraints were roughly equivalent to the simple unary tests defining allowed expressions in decision table condition cells. Many decision tables, however, require generalized unary tests – effectively any FEEL Boolean expression – in a condition cell. DMN 1.5 now aligns the specification of item definition allowed values with generalized unary tests. For example, now it is possible to define some variable as an integer, a number with the constraint value=floor(value), something impossible in earlier versions. Trisotech Decision Modeler takes advantage of this in its new type checking feature, discussed in a previous post. LIST REPLACE() Prior to DMN 1.5, “poking” a new value somewhere in a large data table was cumbersome. The new list replace() FEEL function makes it a lot easier. list replace() does what its name implies: replaces an item in a list – for example, a row in a table – with a new item, without changing any of the other list items. There are two forms of the list replace() function. * list replace(list, position, newItem) is straightforward: First you need to find the position in the list of the item you want to replace, and the function replaces the item originally in that position with newItem. * list replace(list, match, newItem) is more powerful. The second parameter, match, is not a value but a function, similar to the precedes parameter in the sort() function. match() is a Boolean function with parameters item, meaning any item in the list, and possibly others, including newItem. Any list items for which match() is true are replaced by newItem. As in the sort() function, match is most conveniently modeled as an anonymous function, inline in list replace(), using the keyword function. For example: * list replace([2,4,7,8], function(item, newItem) item<newItem, 5) * replaces all list items less than 5 with the value 5, or the list [5,5,7,8] In the Low-Code Business Automation course, we use list replace() to modify a cloud datastore holding the accrued vacation days for each employee, potentially a very large table. After updating an employee’s accrued vacation days value following a vacation request, we use context put() – described above in the DMN 1.4 section – to generate the new table row, and list replace() to replace the employee’s record in the datastore with the new row. SCIENTIFIC NOTATION The FEEL grammar was extended to allow specification of number values in scientific notation. For example, the value 1.2e3 is equivalent to 1.2*10**3, or 1200. As you can see, while its basic functionality is little changed, DMN is a “living language,” continually made more powerful and easier to use as new use cases arise. Want to learn more about how it works? Our DMN Method and Style training is comprehensive, covering the latest features and including 60-day use of the Trisotech Decision Modeler and post-class certification. Check it out! Follow Bruce Silver on Method & Style. BLOG ARTICLES BRUCE SILVER View all What’s New in DMN 1.4 and 1.5 What’s New in DMN 1.4 and 1.5 Blog By Bruce Silver (Read Time: 4 Minutes) DMN: Data Validation Reconsidered DMN: Data Validation Reconsidered Blog By Bruce Silver (Read Time: 5 Minutes) DMN Hit Policy Explained DMN Hit Policy Explained Blog By Bruce Silver (Read Time: 4 Minutes) Standardizing BPMN Labels Standardizing BPMN Labels Blog By Bruce Silver (Read Time: 4 Minutes) Interrupting Events in Automation Interrupting Events in Automation Blog By Bruce Silver (Read Time: 2 Minutes) How Contexts Simplify DMN Logic How Contexts Simplify DMN Logic Blog By Bruce Silver (Read Time: 4 Minutes) DMN’s Killer App DMN’s Killer App Blog By Bruce Silver (Read Time: 7 Minutes) BPMN’s Magic Event Type BPMN’s Magic Event Type Blog By Bruce Silver (Read Time: 3 Minutes) Datatypes with Constraints Datatypes with Constraints Blog By Bruce Silver (Read Time: 5 Minutes) Good DMN Begins with Datatype Assignment Good DMN Begins with Datatype Assignment Blog By Bruce Silver (Read Time: 5 Minutes) Executable BPMN vs Method and Style Executable BPMN vs Method and Style Blog By Bruce Silver (Read Time: 4 Minutes) REST APIs Are Everywhere REST APIs Are Everywhere Blog By Bruce Silver (Read Time: 3 Minutes) Cloud Datastores Simplify Business Automation Cloud Datastores Simplify Business Automation Blog By Bruce Silver (Read Time: 4 Minutes) Stateful Decision Models Stateful Decision Models Blog By Bruce Silver (Read Time: 3 Minutes) A Standard for Low-Code Business Logic A Standard for Low-Code Business Logic Blog By Bruce Silver (Read Time: 4 Minutes) Call Public APIs Without Programming Call Public APIs Without Programming Blog By Bruce Silver (Read Time: 2 Minutes) Data Flow in Business Automation Data Flow in Business Automation Blog By Bruce Silver (Read Time: 4 Minutes) BPMN Call Activity vs Subprocess: What’s the Difference? BPMN Call Activity vs Subprocess: What’s the Difference? Blog By Bruce Silver (Read Time: 3 Minutes) Inspect Process Data with Attended Tasks Inspect Process Data with Attended Tasks Blog By Bruce Silver (Read Time: 3 Minutes) A Methodology for Low-Code Business Automation with BPMN and DMN A Methodology for Low-Code Business Automation with BPMN and DMN Blog By Bruce Silver (Read Time: 5 Minutes) ALL BLOG ARTICLES READ OUR EXPERTS’ BLOG View all Learn how it works Request Demo Confirm your budget Request Pricing Discuss your project Request Meeting If your Business runs on Rules, it should run on Trisotech! Get Digital Enterprise Suite Products * Free Trials * Request Demo * Digital Enterprise Suite * Digital Automation Suite * Digital Modeling Suite * Free Visio Templates * Release Notes Industries * Healthcare * Finance * Public Sector Services * Success Programs * Free Trials * Trainings Content * Solutions * Resources * Blog * Upcoming Webinars * Videos * Use Cases * Capabilities Trisotech * About us * Contact us * Recognition * Career – Trisotech * Business Partners * Trisotech-Conseils Get in touch Contact us Phone: 1 877 374-3995 514 990-6639 sales@trisotech.com © 2015 - 2023 Trisotech. All rights reserved. All logos, trademarks and registered trademarks are the property of their respective owners. * Security * Privacy Statement * Terms of Service Powered by Translate Original text Rate this translation Your feedback will be used to help improve Google Translate This website uses cookies to ensure you get the best experience on our website. Learn more Got it