Updated for version: 0.2504.1
Report storage
Reports generated in Convier can be stored in a database (“internal”), or in an existing system, like Microsoft Dynamics (“external”). Storage and retriveal of externally stored reports are configured using data sources, analytics and actions.
Azure Storage Account
Reports may be stored in Azure Storage Account containers. You may store reports in different containers for different reports actions, for example a mutable container store for latest working copy of a report, and a immutable (“write-only-read-many”) container for archived/completed reports. It requires that either Managed Identity is available, or that Convier is running with an App Registration from Entra ID.
- Create storage account and containers. You may want to create one with access tier “Hot” to store reports in progress, and one with access tier “Cold” to archive reports.
- Create
- If Managed Identity is available, assign it role “Storage Blob Data Contributor” on the storage account
- If Managed Identity is not available, assign the App Registration the role “Storage Blob Data Contributor” on the storage account
- In the Convier project, add data source “Azure Storage Account”, fill inn storage account
- (If you assigned the role one the created containers directly, you will have to provide container names in the source configuration)
- In the report storage configuration, apply relevant actions.
- Retention and blob mutability are enforced at storage level by the container
Environment variables:
AZURE_STORAGE_ACCOUNT_SUBSCRIPTION_IDAZURE_STORAGE_ACCOUNT_RESOURCE_GROUPAZURE_STORAGE_ACCOUNT_NAME
Google Storage Bucket (>= 0.2511.1)
Environment variables:
GOOGLE_PROJECT_IDGOOGLE_STORAGE_BUCKET_NAMES
Internal report storage
Internal storage is enabled by setting the following environment variables:
REPORT_STORAGE_JDBC_CONNECTION_STRINGREPORT_STORAGE_JDBC_USERNAME(Optional)REPORT_STORAGE_JDBC_PASSWORD(Optional)
To verify that internal report storage is enabled, check the service log for the following message INFO - Internal report storage: enabled.
If enabled, the required table and columns needed are automatically created. A row is added to the table each time a user clicks “Save” on the report, so there can be multiple versions of the same task/case/report. Each row consists of the following data:
| column | type | example |
|---|---|---|
| project_id | ID of proejct | aml |
| inserted | Epoch ms | 1735813124631 |
| user_id | ID of user saving the report | user@acme.com |
| object_id | ID of task/case/report | EDD-1234-001 |
| content | Report JSON | [{"sectionId": "Intro", "content": {...}}, ...] |
| loaded_data | Report data JSON (if enabled) | {"timestamp": ..., "object": {...}, "connected": {...}} |
| loaded_data_simplified | Properties and data model | {"object_types": ..., "field_types": {...}, "data": {...}} |
| section_texts | Report section texts | {"Intro": "Lorem ipsum...", ...} |
| action | Save/Close/Approve/etc. | Save |
In-browser report storage
While a user is editing a report, a copy of the contents is stored within the user’s browser (using IndexedDB). This is to prevent loss of data in case of system, network or power outage, or in the case of events like accidental page refresh.