Repository
forms-modernizer
This tool helps AEM development teams convert legacy AEM Forms to the latest version. It extends the AEM Modernize Tools suite and is designed specifically for AEM Forms developers to upgrade their forms to AEM Forms v2.0.
- Property
- Description
- it.author.url
- URL of the author instance
- it.author.user
- Admin user for the author instance
- it.author.password
- Password of the admin user for the author instance
Specs
- PropertyDescription
- it.author.urlURL of the author instance
- it.author.userAdmin user for the author instance
- it.author.passwordPassword of the admin user for the author instance
- it.publish.urlURL of the publish instance
- it.publish.userAdmin user for the publish instance
- it.publish.passwordPassword of the admin user for the publish instance
README
AEM Forms Modernization Tool
This tool helps AEM development teams convert legacy AEM Forms to the latest version.
It extends the AEM Modernize Tools suite and is designed specifically for AEM Forms developers to upgrade their forms to core components based AEM Forms.
Features include:
- Forms Conversion Tool (Legacy -> Modern/Core)
Goal
The goal of this project is to provide a framework for converting legacy AEM Forms to the current capabilities.
The tool is designed to help AEM Forms developers upgrade their foundation based AEM Forms to core components based AEM Forms.
It is flexible and customizable to fit the needs of different projects. Users should be able to run conversions with minimal necessary rewrite rules for their forms.
Modules
The main parts of the template are:
- core: Java bundle containing all core functionality like OSGi services, listeners or schedulers, as well as component-related Java code such as servlets or request filters.
- ui.apps: contains the /apps (and /etc) parts of the project, ie JS&CSS clientlibs, components, and templates
- ui.config: contains runmode specific OSGi configs for the project
- ui.tests: Selenium based UI tests
- all: a single content package that embeds all the compiled modules (bundles and content packages) including any vendor dependencies
How to build
To build all the modules, run the following command with Maven 3 and Java 11+ in the project root directory, specifying the project appId and template paths:
mvn clean install -DappId=${appId} -DformTemplatePath=${formTemplatePath} -DfragmentTemplatePath=${fragmentTemplatePath}
To build for AEM 6.5, use the aem65 profile:
mvn clean install -Paem65 -DappId=${appId} -DformTemplatePath=${formTemplatePath} -DfragmentTemplatePath=${fragmentTemplatePath}
To build all the modules and deploy the all package to a local instance of AEM, run in the project root directory the following command:
mvn clean install -PautoInstallSinglePackage
Or alternatively
mvn clean install -PautoInstallSinglePackage -Daem.port=4503
Or to deploy only the bundle to the author, run
mvn clean install -PautoInstallBundle
Or to deploy only a single content package, run in the sub-module directory (i.e ui.apps)
mvn clean install -PautoInstallPackage
Pre-requisites
- Your instance should have core components installed via archetype.
- The tool requires the user to create a core component form template and fragment template, and provide their paths using the build parameter. Failure to do so will result in build errors.
- Tool is currently compatible with AEM as a cloud service. You first need to migrate your AEM Forms to AEM as a cloud service. For more information, see Migrate to AEM Forms as a Cloud Service
How to run the tool
- Build the project and deploy the
allpackage to a local instance of AEM as described above. - Goto Tools-> AEM Modernize Tools -> Forms Conversion.
- Click
Create. Provide a Job name. Choose a form handling type from the provided types.- None - Select this for an inplace forms conversion.
- Restore - Select this to restore to previous version and re-apply rules(modified or new).
- Copy to Target - Select this to convert the form by copying the form to a target location.
- Source Path - Provide the source folder path containing the form.
- Target Path - Provide the target folder path where the form will be copied and converted.
- Choose foundation based AF form(s) you want to convert and click on
Schedule Job, followed byConvertbutton. - The tool will navigate you to a page that displays the conversion status. To see the most recent status of the selected form(s), you need to refresh this page.
- Access the target folder to view the converted form.
- Before accessing the core component converted form, first open its properties, save them, and then close. This process will add any necessary additional properties to the form.
Points to note
-
The conversion time for more intricate forms may be longer due to the number of components and their nested structure.
-
The conversion process for the form(s) is carried out in the background by the tool. Although the creation of the form might be visible, it's recommended not to access it until the status indicates that the conversion has either completed or failed.
-
The tool expects the user to create a core component form and fragment template, providing the path via the build parameter. If not specified, the tool will throw an error.
-
If your forms contain fragments, you must convert them first before converting the forms. The tool does not automatically convert the fragments mentioned in the form. After converting the form, you need to open it and update the fragment path to the newly converted fragment path.
-
Currently, the tool maps the following OOTB components to these core components, as they are not available in core components:
af1:Numeric Stepper->af2:Number Inputaf1:Date Input->af2:Date Pickeraf1:Password Box->af2:Text Inputaf1:Table->af2:Panel
-
The following OOTB components are not yet supported in core components, so the tool will delete them in the newly created forms. The same applies to custom components if no rules are defined for them:
Adobe Sign BlockChartFile Attachment ListingFootnote PlaceholderImage ChoiceNext ButtonPrevious ButtonScribble SignatureSummary StepToolbar
-
Deleted components are logged with relevant information. The tool will only delete nodes for which rules are not defined.
-
Tool only converts structure of the form and its components. It does not convert scripts, custom functions, or form themes. These need to be rewritten by the user.
How it works under the hood
Based on the provided configurations for both node-based and service-based rules, the tool determines which components are needed to be converted.
When a user selects a page, the tool identifies all applicable rules and components that will undergo conversion.
When user confirms to execute conversion, the tool using Service Based rules (Container Rewriter Rule) for specific components,
implements the necessary structural modifications required to transition the component.
Next, all the node-based rules (Component Rewrite Rule Service) are executed for every component present in the form.
For the node-based conversion rules, there are two files:
proxy-rules- This file holds the rules for the proxy components.rules- This file holds the rules for the default components.
During the project build process, theui.appsmodule will utilize either of these files, depending on the parameter specified in the build command.
Pending tasks
The current state of the tool is a work in progress. The following tasks are pending:
- Some components are in progress and are not yet supported by the tool.
- Visual rules will be supported by the tool, but this is currently in progress.
- It is anticipated that the user will rewrite scripts in the code editor and custom functions. Alternatively, these can be migrated using the content transfer tool, as mentioned in point 4 of this guide.
- Form theme is needed to be rewritten by the user using BEM notation.
Testing
There are three levels of testing contained in the project:
Unit tests
This show-cases classic unit testing of the code contained in the bundle. To
test, execute:
mvn clean test
Integration tests
This allows running integration tests that exercise the capabilities of AEM via
HTTP calls to its API. To run the integration tests, run:
mvn clean verify -Plocal
Test classes must be saved in the src/main/java directory (or any of its
subdirectories), and must be contained in files matching the pattern *IT.java.
The configuration provides sensible defaults for a typical local installation of
AEM. If you want to point the integration tests to different AEM author and
publish instances, you can use the following system properties via Maven's -D
flag.
| Property | Description | Default value |
|---|---|---|
it.author.url |
URL of the author instance | http://localhost:4502 |
it.author.user |
Admin user for the author instance | admin |
it.author.password |
Password of the admin user for the author instance | admin |
it.publish.url |
URL of the publish instance | http://localhost:4503 |
it.publish.user |
Admin user for the publish instance | admin |
it.publish.password |
Password of the admin user for the publish instance | admin |
The integration tests in this archetype use the AEM Testing
Clients and showcase some
recommended best
practices to
be put in use when writing integration tests for AEM.
Static Analysis
The analyse module performs static analysis on the project for deploying into AEMaaCS. It is automatically
run when executing
mvn clean install
from the project root directory. Additional information about this analysis and how to further configure it
can be found here https://github.com/adobe/aemanalyser-maven-plugin
UI tests
They will test the UI layer of your AEM application using Selenium technology.
To run them locally:
mvn clean verify -Pui-tests-local-execution
This default command requires:
- an AEM author instance available at http://localhost:4502 (with the whole project built and deployed on it, see
How to buildsection above) - Chrome browser installed at default location
Check README file in ui.tests module for more details.
Maven settings
The project comes with the auto-public repository configured. To setup the repository in your Maven settings, refer to:
http://helpx.adobe.com/experience-manager/kb/SetUpTheAdobeMavenRepository.html
Contributing
Contributions are welcomed! Read the Contributing Guide for more information.
Licensing
This project is licensed under the Apache V2 License. See LICENSE for more information.