New releases > ELMA365 SaaS / 2023.11

2023.11

Below is a list of changes that you can explore right now by activating the ELMA365 trial version. After December 13, 2023, all changes will become available to our clients in their active companies. Please note that the list may be expanded after the release.

 

Document management

 

1. TEAM-7115 In SaaS Enterprise and On-premises Enterprise editions, the ability to concurrently invoke functions in the template used for document generation has been implemented. To enable, the feature flag `enableConcurrencyTemplateMapper` is applied. The number of parallel threads is set by the environment variable `ELMA365_MAX_NUMBER_OF_WORKERS_TO_EXECUTE_FUNCTIONS`, with a default value of 5.

 

2. TEAM-12981 In the Administration > Files workspace, it is now possible to specify certain file formats that cannot be uploaded to the system. To create an exception, the file format and its commonly accepted signature identifying the file type are specified on the page.

 

3. TEAM-19839 With the Folder navigation widget, it is now possible to specify the folder of a hierarchical tree where an element will be added when created.

 

4. TEAM-20840 In the settings of the App signature widget, the default provider can now be set as the provider configured using a custom module for signing items.

 

5. TEAM-21224 In the app number settings, an option "Assign a number when creating an element" has been added. When enabled, the value of the Index system property is used as the numerator and assigned when opening the app creation form.

 

6. TEAM-21873 The ability to restrict the modification and addition of a file version attached to an app item has been added. To do this, in the File versions widget settings, the "Read-only" option must be enabled.

 

7. TEAM-22163 The error notification that occurs when generating a .xlsx file based on a template now includes information about incorrectly generated cells and columns.

 

8. TEAM-22614 The PasteImage function has been added. It allows adding an image from the application or process context to a file generated from a template.

 

Usage examples:

{PasteImage({$image})} — width and height are taken from the original image;

{PasteImage({$image}, 200)} — width 200 pixels, automatically set height while maintaining image proportions;

{PasteImage({$image}, 200, 400)} — width 200 pixels, height 400;

{PasteImage({$image}, auto, 400)} — automatically set width while maintaining image proportions, height 400;

{PasteImage({$image}, 200, 400, true)} — width 200, height 400, image will be cropped instead of scaled.

 

Reports

 

TEAM-20959 In reports, fields of apps that are not involved in search (Search and Sort option not selected) can now be used. In the report itself, searching on these fields is not available, except for the column with aggregation.

When creating a link between data sources, only fields for which the Search and Sort option is selected can still be used.

If the Search and Sort option is canceled for a field in the source app, then:

  • filtering by the linked report column disappears;
  • if the field was used for a link, an error occurs when retrieving data. An error will also occur when attempting to resave the report that already contains invalid data.

 

CRM

 

1. TEAM-22297 When assigning a CRM task to a user, the overlaps between the task and events in the user's calendar are now displayed. This will allow the sales reps to plan activities more easily without having to switch additionally to the calendar interface.

 

2. TEAM-23333 In Administration > Email , the ability to manage permissible mail services has been added. Thus, the system administrator will be able to allow users to connect only services to the Email that comply with the company's security policy.

 

3. TEAM-23441 The ability to export and import nurturing stage settings has been added.

 

4. TEAM-23819 The design of the Overlapping Events window has been updated. As part of the redesign:

  • the window size has been increased;
  • display of the user's avatar has been added;
  • grouping by date has been implemented;
  • display of event data has been added, even when the calendar is unavailable for the user.

 

API, SDK

 

1. TEAM-4153 Server event tracking has been implemented in the client-side scripts.

For some solutions, updating information on the user's page in real-time is crucial. Currently, it is necessary to periodically request this data from the server, which can reduce the overall system performance. To react to real-time changes, we have added the ability for client-side scripts to subscribe to specific events of app items.

The `enableSubscriptionOnEventsFromScript` flag enables the use of event subscription functions in the TS SDK API. By default, the flag is disabled in the SaaS edition.

Currently, you can subscribe to events of app items: creation, update, deletion.

The subscription is dynamically created by the client-side script. You can subscribe and unsubscribe from events at any time while the widget exists. When the widget is destroyed (usually when transitioning to other pages), the subscription is automatically destroyed.

For example, you can subscribe to events of creating new requests and update the report:

await System.events.subscribe().onAppItemCreate(Context.fields.request.app, async (events) => {
        const event = events[0];
        const request = await event.data.fetch();
 
        // Here, we update the report data and redraw the charts
        updateReportWithNew(request);
    })
    .all();

2. TEAM-17757 Added the ability to process API requests in modules with partial matching.

To build more flexible integration modules, we have added the ability in API Methods to intercept nested requests by template. For example, now you can specify the path for the method: files/*, and the method will receive all nested paths: files/1234, files/upload/small, etc.

Such a method can be conveniently used with TSSDK by adding withFragment:

Call corresponds to /files

Namespace.api.files.call({
        method: 'GET',
    })

Call corresponds to files/upload/small

    Namespace.api.files.withFragment "upload/small").call({
        method: 'POST',
    })

3. TEAM-20751 Implemented the ability for strict validation of field values. Added the Validation level setting for fields of type Phone Number and Email with options "Warn about incorrect value" and "Forbid incorrect values".

For backward compatibility, the default is set to "Warn about incorrect value" for Phone Number fields and "Forbid incorrect values" for Email fields.

 

4. TEAM-21870 Added the danger option for the setPortalUserAsInternal() method.

The setPortalUserAsInternal() method converts an external user into an internal one. However, authentication settings for internal and external portals may differ significantly. Previously, for users with OAuth enabled, this method always returned an error. Now, the _unsafe_ignore_oauth: bool option has been added. This option should be used extremely carefully, as a converted user can only enter the system if the OAuth login provider settings match completely for external and internal portals.

 

5. TEAM-22357 Implemented the ability to get the logo from the portal settings into its header.

Added a method to the portal object: Namespace.portal.getSettings(), which provides access to the portal branding settings. For example: logoImg = await settings.branding.logo.getDownloadUrl();

 

6. TEAM-19189 Added Web API methods for creating a file package, obtaining download links, and modification. If the request processing is successful, you will see a response code of 200. If at least one file returns an error, a response code of 422 will be received.

Bulk upload of files from links. Performs the upload of N number of files for temporary storage through external links for downloading files.

method: POST
path: /pub/v1/disk/uploads/from-link

Input data

{
    downloadLinks: string[], // Download links for files
}

Response:

{
    items: {
        hash: string// identifier of the file body
        error: string// if an error occurred, its text will be indicated, there will be no identifier in this case
    }[], // identifiers of the uploaded file bodies
}

Request example

POST {host}/pub/v1/disk/uploads/from-link
Content-Type: application/json
{
    "downloadLinks": ["https://hosting.example/image.png", "https://hosting.example/imageOther.png"]
}

Bulk obtaining download links for files by their identifiers in the storage. In the request, it takes a list of identifiers of file bodies. In the response, there is a list of items containing the file identifier, the generated link, or the error text that occurred during generation. The order of structures in the response corresponds to the order of identifiers in the request.

method: POST
path: /pub/v1/disk/links/upload

Input data:

{
     hashesList: string[], // identifiers of uploaded file bodies
}

Response

{
   items: {
    hash: string// identifier of the file body
    link: string// link for file upload
    error: string // error that may occur during generation, if there is an error, there will be no link
   }[], // download links for files
}

Example request:

POS  {host}/pub/v1/disk/links/upload
Content-Type: application/json
{
    "hashesList": ["ef15ff99-763f-4337-be9b-632af8a26e9d","5c018be7-6590-4d3a-9864-bc7f96cfe682"]
}

Bul obtaining download links for files by their identifiers in the storage. In the request, it takes a list of identifiers of file bodies. In the response, there is a list of items containing the file identifier, the generated link, or the error text that occurred during generation. The order of structures in the response corresponds to the order of identifiers in the request.

method: POST
path: /pub/v1/disk/links/download

 

Input data:

{
     hashesList: string[], // identifiers of uploaded file bodies
}

 

Response

{
   items: {
    hash: string// identifier of the body
    link: string// 
    error: string // error that may occur, for example - insufficient permissions, if an error is specified, there will be no link
   }[], // download links for files
}

Example request:

POS host}/pub/v1/disk/links/download
Content-Type: application/json
{
    "hashesList": ["ef15ff99-763f-4337-be9b-632af8a26e9d", "5c018be7-6590-4d3a-9864-bc7f96cfe682"]
}

 

Bulk initialization of files from body identifiers. This feature is necessary to complete bulk operations related to generating download links or uploading files by link. It takes a list of data to create a file as input. The data must include the body identifier of the file, its name, and the identifier of the directory where it will be saved. In response, it sends a list of structures containing the resulting file or an error description. The order of structures in the response corresponds to the order of files in the request.

method: `POST`
path: `/pub/v1/disk/files`

Input data

{
     files: {
        name: string// file name
        directory: uuid, // id where file is loaded
        hash: uuid, // body id
        comment: string | undefined, // comment specified when creating the file
     }[], // data for creating files
}

Response

{
   items: {
    file: File, // file model
    error: string // error that may occur during the operation
   }[], // links to upload files
}

Request example

POST {host}/pub/v1/disk/files
Content-Type: application/json
{
  “files”: [ { “name”: “file_name.txt”, “directory”: “3275f155-a705-43be-acf4-f9a325ca2a46”, "hash: “55a87462-9420-477b-b6f6-  d09375d8e1e2”, “comment”: “some example file” }]
}

Bulk deletion of files and moving them to the trash. Performed with the presence of rights. If an error occurs during deletion, it will be indicated in the response. It takes a list of file identifiers as input. In response, it sends a list of structures containing the resulting file identifier or a description of the error. The order of structures in the response corresponds to the order of File Identifiers in the request.

method: PATCH
path: /pub/v1/disk/files/deleted

Input data:

{
fileIds: string[], // identifiers of uploaded file bodies
}
 

Response

{
   items: {
    file: File, // file model
    error: string // error that may occur during the operation
   }[], // links to upload files
}

Example request

PATCH {host}/pub/v1/disk/files/deleted Content-Type: application/json { “fileIds”: [“728a4077-c9f4-48f6-849b-68951556914a”, “0c0dd437-223c-4c94-8504-26fee0ee859b”] }

 

Note. If all items in the response are without errors, the response code should be 200. If at least one returns an error, the code is 422.

 

Widgets

1. TEAM-13824: Added the Property code field to the settings of the Field widget.

 

2. TEAM-15337: For custom widgets, the ability to set HTML styles by default has been added. In the widget constructor's breadcrumbs, you can choose the root element, go to its settings, and set default values, including HTML styles. This can be useful, for example, to stretch the widget across the entire width of the screen.

 

3. TEAM-21216: Complete disabling of the transition to the mobile interface mode in browsers. Now, for the desktop application or browser on the desktop, the desktop mode works. At the same time, a minimum width is set. That is, when trying to narrow the browser below the minimum size, a horizontal scroll will appear. In the mobile application or mobile browser, the mobile mode is enabled by default. To switch to desktop mode on a mobile device, you can do so by enabling the Desktop Version in the browser settings. The display for tablets depends on the orientation.

 

4. TEAM-21440: Added the ability to create a widget for the toolbar. In the widget constructor on the Settings tab, an option has been added: Display the widget in the header with buttons in forms. When enabled, the widget can be placed in the header with buttons in forms (apps, processes).

 

5. TEAM-18043: Changes have been made to widget settings:

  • For the Button widget: The Event on click setting has been renamed to Executed script and is now available when choosing the Script action type.
  • For the Drop-down widget: HTML Style/Class parameters have been moved from the General tab to the System tab.

 

6. TEAM-20272: In the Associated items widget, column width can now be configured using the drag-and-drop method. The configured width will be saved for all app forms.

 

EQL

TEAM-23311: Relative date function support has been added to EQL. Examples of usage:

```eql

[__createdAt] = RelativeDatetime('-1m', '-1m') -- for the last month

[__createdAt] IN RelativeDatetime('0d', '0d') -- for the current day

```

 

Projects

1. TEAM-21306: Implemented the ability to add subtasks in edit mode to the project calendar plan. For items in the plan with the Task type, the ability to add nested tasks and processes has been added. In the task context menu, the Add Task and Add Process items have been added. In the top panel above the task list, the control +Task has been changed. Now, to the right of the button, there is a drop-down menu with the task type selection. Thus, a task of the desired type is created immediately, without the need to select the task type on the form.

 

2. TEAM-23012: In the Project Plan Item app, a new value Send for review has been added to the Control attribute. This update allows for more flexible control over the execution of project tasks in business processes.

 

Users

 

TEAM-4337: In the System apps workspace, the Employees app has been added. It allows storing a list of company employees and associating them with system users. App items are created automatically in the following cases:

  • When inviting a user through the Administration workspace.
  • When authorizing a user through OAuth/SAML, if the option to create a user upon authorization is enabled in these modules.
  • When importing users from AD/LDAP, if the Auto-create employee option is enabled in the module.

 

Authentication

 

1. TEAM-17357: Implemented support for alias for OAuth redirects. On the side of the authorization provider, two Redirect URIs must be specified: without an alias and with an alias. With these settings, users can log in to ELMA365 through OAuth at both the default company address and the alias address.

 

2. TEAM-22689: Seamless OAuth2 authorization. In the External Authentication Providers block, in the Default authentication method setting, the SSO option has appeared. The option is available if both conditions are met:

  • Only the Allow OAuth2 Authentication option or only the Allow SAML Authentication option is enabled.
  • Only one provider is added.

If the SSO option is selected, when navigating to the ELMA365 authorization page, the user will be automatically redirected to the authorization provider.

 

Workspace updates

 

TEAM-22658: In a soft update of a partially blocked solution, dependencies between an unlocked workspace and locked one are ignored. That is, in a soft update of such a solution:

  • Structures from the unlocked workspace are NOT updated if conflicts or dependencies on other structures are found for them.
  • Structures from the blocked workspace are updated if dependencies on the unlocked workspace are found for them.
  • Structures from the blocked workspace are updated if dependencies on the locked workspace are found for structures from the unlocked workspace.
  • Structures from the blocked workspace are NOT updated if conflicts or dependencies on the locked workspace are found for them.

 

Bugs fixed

  1. TEAM-9994: Fixed an issue where a user adding a file version became the author of its previous version.
  2. TEAM-20671: Fixed notification appearing when attempting to add a folder instead of a single file in the Files field on an app form.
  3. TEAM-21462: Fixed the numerator failure in the application when the PostgreSQL server is restarted.
  4. TEAM-21514: Fixed the display of a hierarchical folder with many created folders on the search form in another app item.
  5. TEAM-21630: Fixed an error in assigning the registration date in a business process when the Use reservation date for registration option is selected in the Register Document activity settings.
  6. TEAM-21964: Fixed file generation (.xlsx) using a for loop function in a template where empty values appeared in rows.
  7. TEAM-22138: Fixed incorrect assignment of a name to an app item when created from another app's form. This occurred if the template for one app used a variable with an id coinciding with a variable from another app.
  8. TEAM-22269: Resolved an error occurring when using the fileitem delete function in a script.
  9. TEAM-22434: In folder access rights settings, fixed the inheritance of rights from the parent folder when Users type app property is selected as the object for granting rights.
  10. TEAM-22535: Now, the formatting specified in the template is displayed correctly when generating .xlsx files.
  11. TEAM-22543: Fixed an error that occurred when loading a file with a module, workspace, or app with the advancedSecurity feature flag enabled.
  12. TEAM-22788: Fixed an error in changing the date format after converting a file to .pdf format as part of a process.
  13. TEAM-22928: Fixed an error where applying a watermark in a process changed the content of the original file. Logo display and encoding were also fixed.
  14. TEAM-23062: Fixed the operation of the fetch() method for variables of the Image type
  15. TEAM-23145: Fixed an error in generating a .xlsx file using a template where leading zeros in rows were not displayed in the final document.
  16. TEAM-23362: Now, when comparing file versions, the user who made changes in the editor is displayed correctly.
  17. TEAM-23490: Fixed an error in generating a file by template where a variable specified in the header was not filled.
  18. TEAM-23670: Fixed a printing error for a file using the Firefox browser.
  19. TEAM-23772: Fixed text display error when editing the content of a file using the P7-Office editor.
  20. TEAM-23814: Fixed an error occurring during template file generation with concurrent access to a non-concurrent dictionary 1 of Singleton services.
  21. TEAM-23832: Fixed an error in creating a document in the file generation block with the specification of a variable name with a $ outside brackets.
  22. TEAM-21258: Optimized the speed of multiple template file generation using the GenerateFileByDocTemplateStream method.
  23. TEAM-21794: Added getting the file version by hash identifier.
  24. TEAM-23459: Optimized the /diskpb.DiskJockey/GenerateDownloadLinkByFilePath request and fixed occurring errors.
  25. TEAM-23653: Added support for the EAN format without specifying its type in template file generation.
  26. TEAM-21409: Fixed an error in using the getBlockedStatus method in scripts.
  27. TEAM-21886: In scripts, now it is possible to change the values of custom properties added to the Session app context.
  28. TEAM-22666: Fixed the display of the button for adding a messenger in the settings in the Administration workspace.
  29. TEAM-23150: Fixed styling of the Phone field and country selection in the LiveChat window.
  30. TEAM-23282: In the Live Chats workspace, fixed the display of video files and gif images in messages received from the Telegram messenger.
  31. TEAM-21753: Checked the basic functionality of live chats with connected messengers.
  32. TEAM-9194: Fixed the display of the Edit button for users without edit access to an event in the calendar.
  33. TEAM-18039: When the option to restrict selection by group is enabled for a variable of the Users type, groups created at the app level were not displayed. The error is fixed.
  34. TEAM-20465: Fixed the counter of completed tasks on the Schedule Complance page. Tasks completed on time were displayed in the widget as overdue.
  35. TEAM-2077: The getChiefs() method now returns leaders even for a blocked user.
  36. TEAM-22538: Fixed the order of window display in cases where a business process is launched after creating an app item, and the item is created on the form of another app.
  37. TEAM-22862: Now the LDAP user password in the integration logs in debug mode is hidden and replaced with the value <password>.
  38. TEAM-22917: Now on app item pages, the Delete and Edit buttons are not displayed for users with restricted delete and edit access to this item.
  39. TEAM-21349: The appview package has been moved from the common service to the main service.
  40. TEAM-23233: Now the search for groups for import from the AD service works correctly with a large number of trusted servers.
  41. TEAM-7745: Table columns now hide or become editable/required correctly based on a variable tied to the flag.
  42. TEAM-7279 Previously, when configuring a weekly process with a shift function to the previous working day, the process would erroneously run twice. After the fix, the process runs correctly—for example, only once on Saturday if Saturday is a working day and on the previous working day if Saturday is a non-working day.
  43. TEAM-12884 The problem where the value of a file selected from the computer was not assigned in the Assign Value activity has been resolved.
  44. TEAM-14154 The "collision" error in the first response task has been fixed ensuring more stable operation with multiple launches.
  45. TEAM-16351 The issue of the main process freezing when the subprocess is launched multiple times has been resolved.
  46. TEAM-16971 Fixed an error where an item was automatically created in the process, and the item's author was set to the user who completed the last task, not the one specified in the corresponding swimlane. Now, after the fix, the item's author corresponds to the user specified in the swimlane where the create app item activity is located.
  47. TEAM-23501 Fixed an error related to the export of a workspace that includes a business process folder and processes created in it. Previously, when trying to export such a workspace, the operation failed because the system incorrectly treated the process folder as a process template. After the fix, the workspace export is successful.
  48. TEAM-22102 The error where the Tasks tab in the profile settings was hidden when CRM was inactive has been fixed. Now the tab is displayed correctly.
  49. TEAM-23556 The issue with updating an already installed Platform change log solution has been resolved. Updates are now applied correctly.
  50. TEAM-23764 Fixed an error on the company page related to the Hierarchy widget. The widget now functions without errors.
  51. TEAM-23855 The problem where an email was not moved from the Drafts folder after being sent has been resolved. Emails are now correctly moved after sending.
  52. TEAM-23864 Fixed an error when saving changes in duplicate settings. Changes are now saved without errors.
  53. TEAM-22979 Unnecessary file actions in the API method editor have been removed to simplify the interface and improve usability.
  54. TEAM-23240 Fixed an issue where user rights were not fully inherited through the organizational structure. Now rights are inherited correctly.
  55. TEAM-23377 Improved the operation of the Enable inheritance of access permissions feature, taking into account subordination in the organizational structure.
  56. TEAM-23469 The problem with creating functions inside the Button widget has been resolved.
  57. TEAM-23620 The issue with adding values to the Category field has been resolved. Values are now added without errors.
  58. TEAM-23630 Fixed an error when compiling scripts, especially in rare cases where both an App and a Process with the same code were created in one workspace.
  59. TEAM-23730 The ability to edit forms in a worskspace with the ext_*** code is now restored; previously, this function was unavailable.
  60. TEAM-23807 The function to select multiple files in the Arbitrary app (Multiple) type with the Bulk sign module is now available.
  61. TEAM-13517 The error in displaying deleted app context variables in form debug mode has been fixed. Deleted variables are no longer displayed.
  62. TEAM-15764 In the system widget functions, the option to assign server scripts directly has been removed. To call a server script, it is now necessary to assign a client function and call the server one from it.
  63. TEAM-23430 The display of process script errors has been fixed. It no longer overlays the form builder in the process.
  64. TEAM-21377 The issue with editing the Gantt chart has been resolved. The logic of working with the project draft is now effectively implemented on the backend, minimizing the chance of errors.
  65. TEAM-23151 The Multiple plans widget is now fully functional. Bug fixes were made in versions 2023.9.17 and 2023.10.
  66. TEAM-23234 Fixed an error when importing a project plan. The import function now works correctly.​

Found a typo? Highlight the text, press ctrl + enter and notify us