All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog.
1.0.0 - 2021-12-29
As this is a major update, it's recommended to go through the documentation for both "big picture" and the details.
- Decision table
- Allowed input values checks don't throw the exception when the constraint is violated (see the documentation for more details)
-
Definition classes
- The DMN definition can be created also by code using the builders (
DmnDefinitionBuilder
)
- The DMN definition can be created also by code using the builders (
-
Execution context
- New method
WithInputParameters
allowing to set multiple parameters in one call using the dictionary (IReadOnlyCollection<KeyValuePair<string,object>>
) - Decision execution can be traced/audited using the snapshots
- When the result comes from the decision table, it also provides the list of rules that had a positive hit. Thanks Noel for contribution.
- Execution context can be configured using the
DmnExecutionContextOptions
when calling the factory - set the snapshots on/off, table rules parallel processing, parsed expressions cache - Parsed expression cache is now configurable
- New method
-
Tests
- Shared code project with tests - "single test code"
- Hierarchy of test classes for same test but different source (DMN XML 1.1/1.3 or builders)
- Projects using the shared code targetting different platforms (.net core 2.1, 3.1, 5; .net framework 4.6.2, 4.7.2)
- Shared code project with tests - "single test code"
-
Definition classes
- In general, trying to have kind of immutable public interface after constructed
DmnVariableDefinition
is "hidden" via R/OIDmnVariable
. Also the setters are now not public (can be changed via dedicated methods encapsulating the logic)IDmnVariable
andIDmnDecision
is used as reference to variable/decision definitionIReadOnlyCollection
is used for required inputs and decision- Arrays are used instead of lists for decision table - Inputs, Outpus, Rules, Allowed values
-
Execution context
- Properties are published as
IReadOnlyDictionary
instead ofIDictionary
- Parsed expressions cache (static property) is
ConcurrentDictionary
now DmnExecutionContextFactory
class is static now- The execution related classes have been better adapted for the support of extended/customized functionality using the inheritance
- Properties are published as
-
Other
- DynamicExpresso, NLog packages updated to current versions
- Solution now primary for VS2019 (was 2017)
- Updated documentation with more details in some parts
- When cloning the variables (for example from context to result), the ICloneable value is clonned properly
- DmnExecutionVariable.SetInputParameterValue - type/cast check
- Issue#8 - ParsedExpressionsCache Corruption when running multiple concurrent evaluations
0.1.2 - 2020-07-18
- Support for parsing the DMN 1.3 documents (no additional functionality, just XML namespaces adjustments)
0.1.1 - 2019-11-03
- Issue with serializer in full .NET framework as described by @fgollas in PR#1. Proxy classes are used when there are "hidden" model properties without getters. Added the tests running on .NET framework (the v 0.1.0 code has been tested just for .NET core, where this issue not appeared).
- Some small corrections in read.me
0.1.0 - 2018-12-29
- Initial release