[X] This PR has a title that briefly describes the work done including the ticket number. If there is a ticket, make sure your PR title includes a conventional commit label. See existing PR titles for inspiration.
[X] My work includes tests or is validated by existing tests.
Summary
Migrates away from using the custom expression runner that had compilation issues to using OpenMRS' new expression runner which is a safer option. This change should fix most, if not all, of the expression compilation-related issues.
Potential breaking changes:
Async Expressions
Previously, the syntax allowed for expressions like "resolve(getAsyncValue()) > someOtherField", which returned a Promise that resolved to a boolean value. The resolve() function was used to handle asynchronous fragments within the expression.
Now, the expression runner supports the Promise and then pattern directly. To achieve similar functionality, you must now use syntax like "getAsyncValue().then(value => value > someOtherField)".
Variable Argument Handling
OpenMRS' global expression evaluator only supports variable arguments; it doesn't attempt inferring string arguments. Previously, you could call a function like calcMonthsOnART('artStartDate'), where the string 'artStartDate' would be resolved into a variable if a corresponding field ID existed. This meant that the engine would interpret the string as a reference to an actual variable. With the new expression evaluator, you are expected to use variable arguments: calcMonthsOnART(artStartDate)
Requirements
Summary
Migrates away from using the custom expression runner that had compilation issues to using OpenMRS' new expression runner which is a safer option. This change should fix most, if not all, of the expression compilation-related issues.
Potential breaking changes:
Async Expressions Previously, the syntax allowed for expressions like
"resolve(getAsyncValue()) > someOtherField"
, which returned a Promise that resolved to a boolean value. Theresolve()
function was used to handle asynchronous fragments within the expression. Now, the expression runner supports the Promise and then pattern directly. To achieve similar functionality, you must now use syntax like"getAsyncValue().then(value => value > someOtherField)"
.Variable Argument Handling
OpenMRS' global expression evaluator only supports variable arguments; it doesn't attempt inferring string arguments. Previously, you could call a function like
calcMonthsOnART('artStartDate')
, where the string'artStartDate'
would be resolved into a variable if a corresponding field ID existed. This meant that the engine would interpret the string as a reference to an actual variable. With the new expression evaluator, you are expected to use variable arguments:calcMonthsOnART(artStartDate)
Screenshots
Related Issue
Other