DataExchange Library Release Notes
The first public release of the DataExchange library was version 220.127.116.11, release date July 10, 2020.
Data Exchange Roadmap
The DataExchange library is under active development. The following new features are on the roadmap of the DataExchange library:
Creation of OpenAPI specifications for model-based REST APIs
Automated creation of client code for a given REST API from its OpenAPI specification
Automated creation of application databases based on the
Adding these application databases as an additional data source to the (synchronous) DataExchange read and write methods next to JSON, XML, CSV and Excel files.
Exposing these application databases to external applications via dedicated application database-specific API services. This will also allow for asynchronous reading and writing to such application databases from within an AIMMS model.
New Features and Bug Fixes
- 18.104.22.168 [31-03-2022]
Conversion errors from string to int/double and int to binary are now passed on to the model instead of skipped.
- 22.214.171.124 [24-03-2022]
Sets in document mappings did ignore
- 126.96.36.199 [23-03-2022]
Labels were right trimmed, but not trimmed from the left.
- 188.8.131.52 [12-03-2022]
Prevent uninitialized warnings during
- 184.108.40.206 [07-02-2022]
Respect the ordering of
name-binds-toindex when writing.
- 220.127.116.11 [02-02-2022]
The maximum line length for CSV files is increased to 64KB.
- 18.104.22.168 [28-01-2022]
Runtime errors within a web service request handler would propagate to a controlling
- 22.214.171.124 [27-01-2022]
Limit Excel sheet names to 32 characters
Allow tables of scalars in AIMMS-generated data sets
Add support, through the
dex::AutoTablePrefix, for auto-generating tables names in AIMMS-generated data sets, based on index occurrence
- 126.96.36.199 [25-01-2022]
Introduced new mapping attribute write-defaults to determine whether for name-binds-to fields, default values will be explicitly written or omitted
Prevent an Excel sheet to be written when it contains no data
Allow write-filter on Excel sheets
- 188.8.131.52 [21-01-2022]
Empty cells in Excel sheet will read to default value, instead of skipping
Empty cells on the first row in Excel sheet will now be skipped, instead of terminating the column range being read
All labels will be right trimmed before adding the a set during read
- 184.108.40.206 [20-01-2022]
Add support for Parquet file format
When constructing a regular expression from the elements retrieved from
name-regex-from, special Regex characters will be escaped.
Regex search for
name-binds-toattributes will take place in a case-insensitive fashion, as set elements in AIMMS are also case-insensitive.
Field names offered for Regex search for a
name-binds-toattribute will first be right trimmed.
- 220.127.116.11 [17-01-2022]
Add support for the OAuth Authorization Code flow for WebUI applications on the PRO/CLoud platform (requires AIMMS 4.84 and PRO/Cloud 2.42)
name-regex-fromattributes for mapping files.
- 18.104.22.168 [02-01-2022]
Refresh token could exceed length of 1024 characters, leading to failed OAuth2 refresh token flow.
Added scope to token request.
- 22.214.171.124 [23-12-2021]
Add support for the OAuth2 Authorization Code and Client Credentials flows to the Data Exchange library. The Authorization Code flow will currently only function on AIMMS desktop sessions. The Client Credentials flow can be used both in desktop and cloud sessions.
- 126.96.36.199 [22-12-2021]
Rows in a CSV and Excel files with an empty value for a binding column would produce duplicate values for the last bound element. - Introduced the attribute
binds-skip-non-existingthat will determine whether to skip rows/objects with an non-existing (or empty) binding or to produce a runtime error.
- 188.8.131.52 [16-11-2021]
dex::ReadAllMappingswould read from a non-existing directory.
- 184.108.40.206 [31-10-2021]
Added support in Excel mappings to map date valued columns to calendars and calendar-valued element parameters.
- 220.127.116.11 [29-10-2021]
Unicode characters taking more than 2 bytes, would not be written correctly to CSV files.
- 18.104.22.168 [22-10-2021]
Introduced new annotation-based JSONDocument generator that creates a mapping for a standardized nested JSON document to read and write all data for a given collection of identifiers in a model.
iterative-resetcan now also specify a list of indices that needs to be reset at a particular node prior to handling all child nodes.
Introduced a new function
dex::ResetMappingDatato empty all identifiers, sets, and reset counters used in a particular mapping.
Changed the default of the
dex::ReadFromFilefunction from 1 to 0, to promote specification-based resetting of counters.
- 22.214.171.124 [13-10-2021]
Allow adding additional suffices to tables in datasets through
Allow specifying custom mapping attributes to identifiers contained in tables in datasets through the
Allow adding row filters for writing tables in datasets through the
Added the function
dex::DeleteMappingto delete previously added mappings. AIMMS would crash when mappings were deleted that contained runtime identifiers from a runtime library that was deleted prior to deleting the mapping.
- 126.96.36.199 [29-09-2021]
The Data Exchange
LibraryInitializationprocedure could crash some models running on the AIMMS Cloud platform
Excel sheets with additional columns without a header in the first row would crash in
- 188.8.131.52 [16-09-2021]
Add support for applying NFC/NFD normalizations to composed Unicode character both contained in the model, or when reading or writing an JSON, XML, CSV or Excel data source.
- 184.108.40.206 [15-09-2021]
When reading CSV files, guess the most likely delimiter
Read/write all values according to the identifier unit/selected convention
dex::ReadMappingsfunction to allow reading mappings from various locations
- 220.127.116.11 [13-09-2021]
Added new function
- 18.104.22.168 [26-07-2021]
dex::ExportStreamContentwould crash for streams bigger than 8 KB
Allow dex::ColumnName annotation to be set on separate index declarations
- 22.214.171.124 [16-07-2021]
Memory streams with binary content could be truncated prematurely when read.
- 126.96.36.199 [14-07-2021]
dex::client::GetResponseHeadersand other functions would not support arguments that are identifier slices.
- 188.8.131.52 [30-06-2021]
Allow memory streams to be read twice by
Allow double values in JSON documents to be read into string parameters
- 184.108.40.206 [28-06-2021]
Add support for dex::client request tracing
Allow reading integer and double values from JSON string properties.
Fixed crash in
dex::client::GetInfoItemswhen calling for string items with no result.
- 220.127.116.11 [23-06-2021]
- 18.104.22.168 [10-06-2021]
Prevent crash on program exit on Linux
- 22.214.171.124 [28-05-2021]
Updated REST service listener component that used a faulty concurrency setting, potentially leading to connectivity loss
- 126.96.36.199 [26-05-2021]
Added a DLL that was missing in the PROClient IFA on Windows, causing WinUI PRO sessions to fail
- 188.8.131.52 [17-05-2021]
Add a completely asynchronous Curl-based HTTP client to the DataExchange library, supporting all string- and integer-valued options provided by
Add a REST API server to the DataExchange library, allowing model procedures to become available through a REST API via simple model annotations.
ColumnMappingnames to be used in row-based formats such as CSV, Excel, and row- and column-oriented JSON mappings next to the mapping type-specific names available before. This allows for easier switching between various mapping types.
Allow string values up to 8 kB during data transfer with string parameters in the model. The default max string size is 1 kB, which can be changed via the
max-string-sizeattribute for particular string-valued nodes mapped onto AIMMS identifiers.
Add support for transferring sliced AIMMS data via
ExternalBindingmappings that bind indices to the value of an element parameter.
Allow nodes with an
included-mappingattribute to dynamically map the value of bound indices in the outer mapping to externally bound indices in the included mapping. This allows for splitting mappings into smaller constituting components.
Allow an index bound via the
binds-toattribute to become available higher up in a JSON/XML tree via the
Allow read filtering by skipping all data that cannot be bound to an existing element via the
- 184.108.40.206 [08-02-2021]
Introduce new RowOrientedObjectNode and ColumnOrientedObjectNode for JSON mappings, that are both faster and more compact.
max-string-sizeattribute to allow string parameters to hold strings of up to 8KB (default 1KB).
When mapping from/to JSON, the memory used for storing the JSON object in memory would not be returned to the system.
- 220.127.116.11 [17-08-2020]
The library could crash when writing to a workbook with a duplicate sheet name.
- 18.104.22.168 [12-08-2020]
The library could crash because of using a different version of the
libxl.dll(used to actually read and write to Excel files) than the AimmsXLLibrary.
- 22.214.171.124 [06-10-2020]
Added support for reading from and writing to tables in sheets in Excel workbooks
Added support for automatically generating standard Data Exchange mappings from model annotations
Added new mapping attributes
- 126.96.36.199 [27-07-2020]
Name attributes used at mapping locations where no name is needed for a child element are now warned against when reading a mapping
Name-regexattributes used at mapping locations where no name is needed for a child element now result in an error
Boolean values in a JSON file are now correctly mapped onto integer, double and string parameters. During a write the value will be output according to the AIMMS storage type.
- 188.8.131.52 [23-07-2020]
Changed name of
force-denseto indicate that attribute is not only used during write.
- 184.108.40.206 [21-07-2020]
Upgraded internally used library because of performance issue
- 220.127.116.11 [10-07-2020]
Initial public release of the DataExchange library