Download formcycle | frontend server | frontend server (inbox) | checksums
Features
Forms
- The robots meta tag can now be configured in the properties panel on the right side of the form designer as well, in addition to the meta section of the form designer.
- For repeated elements, you can edit the text of the add button and title text of the remove button. Additionally, you can also display the text next to the add button directly.
- The new URL parameter xfc-rp-use-authallows you to filter the available login services. Its value must be either the login service name or the login service callback UUID.
- When the list of login methods are restricted to a single login service that support single sign-on (such as Kerberos), no login page is shown and an attempt is made to authenticate the user directly via that login service.
- Added a new JavaScript function $.xutil.on that lets you listen to various events related to a form's lifecycle. This function provided a unified interface for such events and is intended as a replacement for other functions such as $.xutil.onSubmit, $.xutil.onPrint or $(document).on("addRow").
Workflow
- New workflow action for deleting attachments.
- The HTTP request action lets you configure connection and read timeouts. The default values for all existing actions are now 60 seconds for the connection timeout and 30 minutes for the read timeout.
- The HTTP request action can be configured to accept invalid certificates when using HTTPS. This option should only be used in exceptional cases. Whenever possible, the corresponding certificates should be installed on the server.
- The PDF fill functions lsttxt and lsttitle now support repeated fields.
- The state received is set as the fallback state even if the workflow fails with an error and did not set a state explicitly.
Backend
- New setting to enable upload file validation. The content type is determined from the file's content. If the detected type does not match the expected content type based on the file's extension, the file is rejected and cannot be uploaded. This applies to all uploads in the backend and frontend.
- You can configure or disable the content type validation in the system -> general settings menu.
- Content type validation is disabled for existing systems and enabled for new installations.
- Added a new option in the plugin menu that lets you restrict plugins to master servers or to frontend servers.
- Added a limit for sending password recovery emails. This prevents a user from sending too many password recovery emails at once.
- New settings for login services
- You can suppress the welcome email that is normally sent to new users.
- You can enable automatic verification for email addresses of new users, so that your users do not have to verify their email address via an email anymore.
- You can limit the availability of system login services to certain clients, so that only those clients can make use of the login service.
Changes
Forms
- Improved accessibility and better support for screen readers
- The HTML attribute aria-required is set for required fields even when the form is initially loaded.
- The HTML attribute aria-invalid is set for invalid fields.
- The HTML attribute role="presentation" is set for several elements where some screen readers had mistakenly recognized a table.
- Several adjustments to the counter for the remaining characters of a textarea.
- Hidden input elements that were created from URL parameters matching xfc-pp-* are now BITV compliant.
- Improved validation messages of form elements so that screen readers can read them better.
- Empty headers and footers of a form page no longer have additional margins.
Workflow
- The action PDF-Fill lets you use placeholders with periods. Enter the placeholder as the name of the PDF field and replace all periods with a hyphen, e.g. [%sel1-lsttxt()%] instead of [%sel1.lsttxt()%]). Starting with the PDF 2.0 standard, periods in field names are explicitly forbidden.
- The form version and the form name in the persistence XML when importing form data are no longer evaluated. The form and the form version of the requested form are always used now.
Backend
- More specific protocol entries when a form was changed or modified in the backend.
- A user's verified email addresses are displayed on the user menu page within a client scope.
- Die Unterteilung der angezeigten Plugins im Plugin-Store wurde geändert.
- A plugin cannot be installed again if a plugin with the same ID was installed already.
- Plugin login services are ignored if the plugin was deleted, deactivated, or is otherwise unavailable. All other login services are still available and can be used to log in.
- The configuration of the backend login page, the two-factor authentication, and other user configurations were migrated to the database. This means you do not have to configure them separately for each master server in a cluster anymore.
Fixes
Forms
- Word export does not fail anymore when certain types of images like SVG are used in the form.
- Fixed issue with hidden elements when printing forms.
- Fixed an issue when redisplaying the value of an input with autonumeric enabled.
- Fixed an issue when redisplaying a select element with "allow free text" option enabled.
- Fixed an issue when resetting fields with conditions located inside a repeated container.
Workflow
Fixed an issue when opening the workflow designer if duplicate login services were present for a workflow state.
- Email workflow actions with only CC or BCC recipients can be executed without errors. However, please note that some mail servers may not support sending such emails.
Backend
Fixed an issue that occurred at several places when the temporary working directory did not exist yet, such as in plugin menu or when opening the form preview.Fixed an issue with the plugins displayed in the plugin store when a cluster is used. Also fixed an issue with the synchronization of plugins in a cluster.
Fixed an issue with the display of localized texts when creating users.
Correctly read the configuration of an email server configured to use Microsoft Office 365.
Fixed an issue with the system update to version 8 of formcycle.
Fixed an issues with the system login service UI.
Fixed an issue with the automatic license assignment.
The profile page of the system admin can be accessed without a database connection.
Fixed an issue when deleting a client that still had a plugin installed.
Fixed an issue that resulted in the "Override system plugins" permission not working properly.
Fixed an issue when importing a form that was exported from a formcycle system with Java 20+.
Menu entries provided by plugins are always displayed in a deterministic order.
Fixed an issue when logging in to forms via a frontend server (without inbox).
Fixed an issue in the user management emails for Dutch and Italian.
The access protection via user groups no longer affects a user's ability to open forms and preview them in the form overview.
Fixed an issue with WebDAV connections when an Oracle database is used.
Fixed an issue in the form-specific inbox view after converting a form to a form with the new workflow.
Improved log entries when no database connection is available and when automatic plugin updates are performed.
Fixed an issue with form record attachments being displayed multiple times due to form record attributes.
The attribute "username" of the user profile (XFC_METADATA.user.userName) is pre-filled with the values "userPrincipalName" or "uid" again when logging in via LDAP if no "username" attribute was assigned explicitly by the LDAP system.
For plugin developers
- Aspose.Words was updated to the latest version. Plugins that make use of this library should be checked for basic functionality.
- You can now include additional CSS or JavaScript resources in the form designer via the plugin
IPluginFormDesignerResource
. Previously, this was possible only with a widget plugin. - You can now add additional properties to existing form elements via the plugin
IPluginFormElementPropertiesExtension
.- Note 1: It used to be common for widget plugins to cache the available properties that were returned by
IXItemBasic#getAvailableProperties
. This is now not required anymore, just create and return the properties. Often, the locale parameter was used, but not included properly in the cache key. - Note 2: This can also be used in combination with form designer resource plugin to add new custom properties to existing form elements. You then need to add a JavaScript resource that makes these properties known to the form designer in the browser.
- Note 1: It used to be common for widget plugins to cache the available properties that were returned by
- You can now modify how existing form elements are rendered via the plugin
IPluginFormRenderCallback
. This can be used, for example, in combination with the plugin to add custom properties, so that you can e.g. add data attributes based on these custom properties. - For workflow node plugins, you can now reference attachments in a node's configuration. Use an instance field of type
SingleAttachment
orMultiAttachment
in your node's property model class, usesingleAttachment.xhtml
ormultiAttachment.xhtml
in the node's UI, and useIWorkflowFileHandler#resolveReferencedAttachments
in your executor to access the attachments.- Similarly to files, workflow nodes can also provide attachments as an execution result. Implement IWorkflowNode#getAttachmentValueDescriptor to declare that your node wishes to do so. During execution of the node, use INormalCompletionResultBuilder#normalResult → INormalCompletionResultBuilder#attachment to provide the attachment or attachments.
- New callbacks for hooking into
$.xutil.load
and$.xutil.save
. These functions are used to serialize the form data into a JSON string and to restore the form data from a JSON string. If you develop a widget plugin, you may need to add a listener for the relevant events to ensure the UI of your widget is restored properly.getXUtil().on("beforeLoadFormData", params => ...)
getXUtil().on("afterLoadFormData", params => ...)
getXUtil().on("beforeSaveFormData", params => ...)
getXUtil().on("afterSaveFormData", params => ...)
Was this article helpful?
That’s Great!
Thank you for your feedback
Sorry! We couldn't be helpful
Thank you for your feedback
Feedback sent
We appreciate your effort and will try to fix the article