diff --git a/README.md b/README.md index 721c38e..ba15744 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,6 @@ [![CI Build](https://github.com/axonivy-market/axonivy-express/actions/workflows/ci.yml/badge.svg)](https://github.com/axonivy-market/axonivy-express/actions/workflows/ci.yml) -Axon Ivy Express is an ad-on module for Axon Ivy Portal +The Express GUI test is located in Portal's infrastructure. The Portal's GUI test will also take care of Express's tests. If there are any changes in the Portal that impact the Express, then a new version of the Express will be released after releasing the Portal. -Read our [documentation](axonivy-express-product/README.md). +How to use the [Axon Ivy Express](axonivy-express-product/README.md). diff --git a/axonivy-express-product/README.md b/axonivy-express-product/README.md index 91449da..9c9d70e 100644 --- a/axonivy-express-product/README.md +++ b/axonivy-express-product/README.md @@ -1,94 +1,108 @@ # Axon Ivy Express -Axon Ivy Express is an ad-on module for Axon Ivy Portal. It enables you – as a business user – to create your own process applications and share them with your colleagues. These capabilities are also known as No-Code Application Platforms or Citizen Developer Platforms. Therefore, it is the perfect tool for you to digitize your processes and create standardization, reliability and traceability. Some of the key features of Axon Ivy Express are: -...*It is a No Coding Toolset, allowing business users without an IT background to create processes. -...*The Axon Ivy Portal Integration, allows business users to implement processes without IT department involvement. -...*The Seamless Integration into Axon Ivy allows you to make use of standard features like email notifications, task delegation, etc. -...*The Powerful Toolset allows you to create processes, define different task types, set responsibilities and due dates and define user dialogs for each task. +Axon Ivy Express is an add-on module for the Axon Ivy Portal. As a business user, it enables you to create and share your process applications with your colleagues. These capabilities are also known as No-Code Application Platforms or Citizen Developer Platforms. Therefore, it is the perfect tool to digitize your processes and create standardization, reliability, and traceability. Axon Ivy Express: + + * Allows business users to create processes without an IT background. + * Automates business processes without IT department involvement. + * Supports all standard features such as email notifications, task delegation, etc. + * Features an importer tool to hand over your No-Code business processes to Low-Code or Pro-Code developers. + +
![express-workflow-properties](images/express-workflow-properties.png) ## Demo -1. Click on **Create Express Workflow**. +1. Login to the Axon Ivy Portal. +2. Click **Processes** in the Axon Ivy Portal menu to open the **Full Process List** page. +3. On the **Full Process List** page, click on **Create Express Workflow**. ![create-express-workflow](images/create-express-workflow.png) -2. The **Express Workflow** editor is opened. -3. Define the **Type of process**: -...*Use the option *One time* if you want to execute the process only once. -...*Use the option *Repeatable* if you want to save the process for repetitive use. The process will automatically be deployed and added to the Full Process List page. -4. Define your **User Interface** : -...*With the option Create own you can create your own user dialog for each process step -...*With the option Use default, the user dialogs will automatically be generated by Axon Ivy Express -5. Provide a descriptive name under **Process name** -6. You may add a description under **Process description**. We strongly encourage you to use the description to provide details about your process. -7. Click on the link **Change** beside Icon to select the icon best suited for your process. +4. The **Express Workflow** editor is opened. +5. Define the **Type of process**: + + * Use the option *One time* if you want to execute the process only once. + * Use the option *Repeatable* if you want to save the process for repetitive use. The process will automatically be deployed and added to the Full Process List page. + +6. Define your **User Interface** : + + * With the option Create own you can create your own user dialog for each process step + * With the option Use default, the user dialogs will automatically be generated by Axon Ivy Express + +7. Provide a descriptive name under **Process name** +8. You may add a description under **Process description**. We strongly encourage you to use the description to provide details about your process. +9. Click on the link **Change** beside Icon to select the icon best suited for your process. ![express-workflow-properties](images/express-workflow-properties.png) -8. The first process step is already available for configuration. -9. You may add further process steps using the button **Add process step** -10. You may delete unnecessary process steps using the button **Remove process step** -11. For each process step, -...*select the **Task Type** see [Express Workflow task types](https://market.axonivy.com/market-cache/portal/portal-guide/11.1.0/portal-user-guide/axon-ivy-express/index.html#express-workflow-task-types). -...*provide a descriptive name in **Task Name** -...*provide an optional description in **Task description.** -12. For *One time* process type, the first process step defines the users or roles under **Able to start** who can start the process +10. The first process step is already available for configuration. +11. You may add further process steps using the button **Add process step** +12. You may delete unnecessary process steps using the button **Remove process step** +13. For each process step, + + * Select the **Task Type** see [Express Workflow task types](https://market.axonivy.com/market-cache/portal/portal-guide/11.1.0/portal-user-guide/axon-ivy-express/index.html#express-workflow-task-types). + * Provide a descriptive name in **Task Name** + * Provide an optional description in **Task description.** + +14. For *One time* process type, the first process step defines the users or roles under **Able to start** who can start the process ![able-to-start](images/able-to-start.png) -13. For all other process steps define the user or roles who are responsible to execute the task in **Responsible**. +15. For all other process steps define the user or roles who are responsible to execute the task in **Responsible**. ![responsible](images/responsible.png) -14. For each process step except the first define the time before the task expires in **Expiry in days** -15. End the configuration of each process step by pressing **Next** +16. For each process step except the first define the time before the task expires in **Expiry in days** +17. End the configuration of each process step by pressing **Next** ![express-preview](images/express-preview.png) + **Express Workflow task types** |**Task type**|**Description**| -|-------------|:-------------:| +| ----------- | ------------- | |**User Task**|For this task the user can define a UI| |**User Task with Email**|In addition to the normal User Task, the user can send an Email directly from the Axon Ivy Portal, without the need to change to another system| |**Information Email**|This email can be defined by the creator of the Express Workflow and will be sent automatically without user action| |**Approval**|This task type creates a approval task| -16. Depending on the task type of the first process step, a different editor is opened. For both user task and task with email, the dialog editor is opened. -17. For each data item you need in your process, select an input element. -18. Provide a descriptive name for the input in **Label**. -19. Select the input type in **Input type**. -20. Select if the input of this data item is required or not -21. Use the button Create to create the input element -22. The created element appears in the list Available form elements -23. To delete input elements you don’t need, klick its trash button. -24. Drag and Drop the input elements into one of the areas of the dialog editor -25. To remove an input element from the dialog, use the **Delete** button -26. To preview your dialog, press the **Preview** button to define an additional process step, klick the button **Next**. +18. Depending on the task type of the first process step, a different editor is opened. For both user task and task with email, the dialog editor is opened. +19. For each data item you need in your process, select an input element. +20. Provide a descriptive name for the input in **Label**. +21. Select the input type in **Input type**. +22. Select if the input of this data item is required or not +23. Use the button Create to create the input element +24. The created element appears in the list Available form elements +25. To delete input elements you don’t need, klick its trash button. +26. Drag and Drop the input elements into one of the areas of the dialog editor +27. To remove an input element from the dialog, use the **Delete** button +28. To preview your dialog, press the **Preview** button to define an additional process step, klick the button **Next**. ![express-add-input](images/express-add-input.png) The results of all previous tasks are included in follow-on tasks in a read-only view, so that the user sees the whole history. + **Express Workflow input elements** |**Input element**|**Description and options**| -| --------------- |:-------------:| -|**Input field**|Input field for text, numbers or dates__..*Text field__..* Number field_..*Date picker| +| --------------- | ------------------------- | +|**Input field**|Input field for text, numbers or dates
- Text field
- Number field
- Date picker| |**Input area**|Text input field between 1 and 10 rows| |**Checkbox**|List of elements which allows the user a multiple selection| |**Radio button**|List of elements which allows the user a single selection| -|**File Upload**|Provides a file upload dialog to the user. You may define:__..*Allowed file types __..*Number of allowed attachments| +|**File Upload**|Provides a file upload dialog to the user. You may define:
- Allowed file types
- Number of allowed attachments| + +29. For process steps with the task type user task with email/information email, the email editor is opened. +30. Specify the addresses of the email recipients. Separate them by commas. +31. The response email email address is optional. +32. Specify the subject of the email. +33. Specify the email text. +34. Optionally, include attachments. +35. Use the button **Next** to define the next process step -27. For process steps with the task type user task with email / information email, the email editor is opened. -28. Specify the addresses of the email recipients. Separate them by commas. -29. The response email email address is optional. -30. Specify the subject of the email. -31. Specify the email text. -32. Optionally, include attachments. -33. Use the button **Next** to define the next process step **Express Business Summary** @@ -96,6 +110,7 @@ After you have completed an Express workflow, you can check its summary data by ![express-business-case-detail](images/express-business-case-detail.png) + **Axon Express Management** With Axon Express Management, an administrator can import/export Express workflows in JSON format. You find this feature in the *Admin Settings *. @@ -104,14 +119,15 @@ With Axon Express Management, an administrator can import/export Express workflo To access this feature, you need to be granted the role **AXONIVY_PORTAL_ADMIN**. + **HowTo: Export an Express Process** Select the workflows you want to export in Express workflows table. The selected workflows will be exported to a JSON file. ![export-express](images/export-express.png) - 8. You can select multiple workflows by clicking the checkbox ALL. - 9. After you selected some workflows, click the **Export Express** button. + 1. You can select multiple workflows by clicking the checkbox ALL. + 2. After you selected some workflows, click the **Export Express** button. The Export dialog will display and show the workflows selected for export. @@ -121,6 +137,7 @@ Review your selection, then press the Download button to download the selected w **Important**: The export file is a JSON file. It contains a version of Axon Ivy Express and Express process data. Don’t edit this file manually. + **HowTo: Import an Express Process** The Import Express Process function allows the Administrator to import Express processes into the Portal from a backup file. @@ -138,6 +155,7 @@ Now, if the deployment process is successful, your workflows are imported and an ![import-express-status](images/import-express-status.png) + **Ad Hoc Process** Axon Ivy Express also provides an ad hoc process feature. Once Express is deployed, you can start an ad hoc process for any task. Ad hoc processes allow you to define more process steps and will be executed before the current task. diff --git a/axonivy-express-product/pom.xml b/axonivy-express-product/pom.xml index 9ef2359..472a754 100644 --- a/axonivy-express-product/pom.xml +++ b/axonivy-express-product/pom.xml @@ -2,7 +2,7 @@ 4.0.0 com.axonivy.portal axonivy-express-product - 10.0.0-SNAPSHOT + 11.1.0-SNAPSHOT pom diff --git a/axonivy-express-test/.classpath b/axonivy-express-test/.classpath deleted file mode 100644 index 106dc80..0000000 --- a/axonivy-express-test/.classpath +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/axonivy-express-test/.gitignore b/axonivy-express-test/.gitignore deleted file mode 100644 index 9b0d458..0000000 --- a/axonivy-express-test/.gitignore +++ /dev/null @@ -1,19 +0,0 @@ -# general -Thumbs.db -.DS_Store -*~ -*.log - -# java -*.class -hs_err_pid* - -# maven -target/ -lib/mvn-deps/ - -# ivy -classes/ -src_dataClasses/ -src_wsproc/ -logs/ diff --git a/axonivy-express-test/.project b/axonivy-express-test/.project deleted file mode 100644 index 7f54217..0000000 --- a/axonivy-express-test/.project +++ /dev/null @@ -1,49 +0,0 @@ - - - axonivy-express-test - - - - - - ch.ivyteam.ivy.designer.dataClasses.ui.ivyDataClassBuilder - - - - - ch.ivyteam.ivy.designer.process.ui.ivyWebServiceProcessClassBuilder - - - - - org.eclipse.jdt.core.javabuilder - - - - - org.eclipse.wst.common.project.facet.core.builder - - - - - ch.ivyteam.ivy.designer.ide.ivyModelValidationBuilder - - - - - org.eclipse.m2e.core.maven2Builder - - - - - - ch.ivyteam.ivy.project.IvyProjectNature - org.eclipse.wst.common.modulecore.ModuleCoreNature - org.eclipse.jem.workbench.JavaEMFNature - org.eclipse.jdt.core.javanature - org.eclipse.m2e.core.maven2Nature - org.eclipse.jem.beaninfo.BeanInfoNature - org.eclipse.wst.common.project.facet.core.nature - org.eclipse.wst.jsdt.core.jsNature - - diff --git a/axonivy-express-test/.settings/.jsdtscope b/axonivy-express-test/.settings/.jsdtscope deleted file mode 100644 index 869c01d..0000000 --- a/axonivy-express-test/.settings/.jsdtscope +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/axonivy-express-test/.settings/ch.ivyteam.ivy.designer.prefs b/axonivy-express-test/.settings/ch.ivyteam.ivy.designer.prefs deleted file mode 100644 index 483de12..0000000 --- a/axonivy-express-test/.settings/ch.ivyteam.ivy.designer.prefs +++ /dev/null @@ -1,5 +0,0 @@ -ch.ivyteam.ivy.designer.preferences.DataClassPreferencePage\:DEFAULT_DATA_CLASS=com.axonivy.portal.test.Data -ch.ivyteam.ivy.designer.preferences.DataClassPreferencePage\:DEFAULT_NAMESPACE=com.axonivy.portal.test -ch.ivyteam.ivy.project.preferences\:PRIMEFACES_VERSION=11 -ch.ivyteam.ivy.project.preferences\:PROJECT_VERSION=112000 -eclipse.preferences.version=1 diff --git a/axonivy-express-test/.settings/org.eclipse.jdt.core.prefs b/axonivy-express-test/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index d4540a5..0000000 --- a/axonivy-express-test/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,10 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=17 -org.eclipse.jdt.core.compiler.compliance=17 -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning -org.eclipse.jdt.core.compiler.release=enabled -org.eclipse.jdt.core.compiler.source=17 diff --git a/axonivy-express-test/.settings/org.eclipse.wst.common.component b/axonivy-express-test/.settings/org.eclipse.wst.common.component deleted file mode 100644 index 9d215e5..0000000 --- a/axonivy-express-test/.settings/org.eclipse.wst.common.component +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/axonivy-express-test/.settings/org.eclipse.wst.common.project.facet.core.prefs.xml b/axonivy-express-test/.settings/org.eclipse.wst.common.project.facet.core.prefs.xml deleted file mode 100644 index 9b4b9fc..0000000 --- a/axonivy-express-test/.settings/org.eclipse.wst.common.project.facet.core.prefs.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/axonivy-express-test/.settings/org.eclipse.wst.common.project.facet.core.xml b/axonivy-express-test/.settings/org.eclipse.wst.common.project.facet.core.xml deleted file mode 100644 index 156ecdb..0000000 --- a/axonivy-express-test/.settings/org.eclipse.wst.common.project.facet.core.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/axonivy-express-test/.settings/org.eclipse.wst.css.core.prefs b/axonivy-express-test/.settings/org.eclipse.wst.css.core.prefs deleted file mode 100644 index 5ddc6bd..0000000 --- a/axonivy-express-test/.settings/org.eclipse.wst.css.core.prefs +++ /dev/null @@ -1,2 +0,0 @@ -css-profile/=org.eclipse.wst.css.core.cssprofile.css3 -eclipse.preferences.version=1 diff --git a/axonivy-express-test/.settings/org.eclipse.wst.jsdt.ui.superType.container b/axonivy-express-test/.settings/org.eclipse.wst.jsdt.ui.superType.container deleted file mode 100644 index 3bd5d0a..0000000 --- a/axonivy-express-test/.settings/org.eclipse.wst.jsdt.ui.superType.container +++ /dev/null @@ -1 +0,0 @@ -org.eclipse.wst.jsdt.launching.baseBrowserLibrary \ No newline at end of file diff --git a/axonivy-express-test/.settings/org.eclipse.wst.jsdt.ui.superType.name b/axonivy-express-test/.settings/org.eclipse.wst.jsdt.ui.superType.name deleted file mode 100644 index 05bd71b..0000000 --- a/axonivy-express-test/.settings/org.eclipse.wst.jsdt.ui.superType.name +++ /dev/null @@ -1 +0,0 @@ -Window \ No newline at end of file diff --git a/axonivy-express-test/config/custom-fields.yaml b/axonivy-express-test/config/custom-fields.yaml deleted file mode 100644 index bb20b70..0000000 --- a/axonivy-express-test/config/custom-fields.yaml +++ /dev/null @@ -1,22 +0,0 @@ -# yaml-language-server: $schema=https://json-schema.axonivy.com/app/0.0.1/custom-fields.json -# -# == Custom Fields Information == -# -# You can define here your project custom fields. -# Have a look at our documentation for more information. -# -CustomFields: -# Tasks: -# MyTaskCustomField: -# Label: My task custom field -# Description: This new task custom field can be used to ... -# Type: STRING -# Cases: -# MyCaseCustomField: -# Label: My case custom field -# Description: This new case custom field can be used to ... -# Type: STRING -# Starts: -# MyStartCustomField: -# Label: My start custom field -# Description: This new start custom field can be used to ... diff --git a/axonivy-express-test/config/databases.yaml b/axonivy-express-test/config/databases.yaml deleted file mode 100644 index 10319e2..0000000 --- a/axonivy-express-test/config/databases.yaml +++ /dev/null @@ -1,2 +0,0 @@ -# yaml-language-server: $schema=https://json-schema.axonivy.com/app/0.0.1/databases.json -Databases: diff --git a/axonivy-express-test/config/overrides.any b/axonivy-express-test/config/overrides.any deleted file mode 100644 index f59ec20..0000000 --- a/axonivy-express-test/config/overrides.any +++ /dev/null @@ -1 +0,0 @@ -* \ No newline at end of file diff --git a/axonivy-express-test/config/persistence.xml b/axonivy-express-test/config/persistence.xml deleted file mode 100644 index d6b96d7..0000000 --- a/axonivy-express-test/config/persistence.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/axonivy-express-test/config/rest-clients.yaml b/axonivy-express-test/config/rest-clients.yaml deleted file mode 100644 index 4bffaca..0000000 --- a/axonivy-express-test/config/rest-clients.yaml +++ /dev/null @@ -1,2 +0,0 @@ -# yaml-language-server: $schema=https://json-schema.axonivy.com/app/0.0.1/rest-clients.json -RestClients: diff --git a/axonivy-express-test/config/roles.xml b/axonivy-express-test/config/roles.xml deleted file mode 100644 index 59892fe..0000000 --- a/axonivy-express-test/config/roles.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - Everybody - diff --git a/axonivy-express-test/config/users.xml b/axonivy-express-test/config/users.xml deleted file mode 100644 index 51a6906..0000000 --- a/axonivy-express-test/config/users.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/axonivy-express-test/config/variables.yaml b/axonivy-express-test/config/variables.yaml deleted file mode 100644 index fd14458..0000000 --- a/axonivy-express-test/config/variables.yaml +++ /dev/null @@ -1,6 +0,0 @@ -# == Variables == -# -# You can define here your project Variables. -# -Variables: -# myVariable: value diff --git a/axonivy-express-test/config/webservice-clients.yaml b/axonivy-express-test/config/webservice-clients.yaml deleted file mode 100644 index 688047a..0000000 --- a/axonivy-express-test/config/webservice-clients.yaml +++ /dev/null @@ -1,2 +0,0 @@ -# yaml-language-server: $schema=https://json-schema.axonivy.com/app/0.0.1/webservice-clients.json -WebServiceClients: diff --git a/axonivy-express-test/dataclasses/com/axonivy/portal/test/Data.ivyClass b/axonivy-express-test/dataclasses/com/axonivy/portal/test/Data.ivyClass deleted file mode 100644 index 5d8263e..0000000 --- a/axonivy-express-test/dataclasses/com/axonivy/portal/test/Data.ivyClass +++ /dev/null @@ -1,2 +0,0 @@ -Data #class -com.axonivy.portal.test #namespace diff --git a/axonivy-express-test/pom.xml b/axonivy-express-test/pom.xml deleted file mode 100644 index d64bcf7..0000000 --- a/axonivy-express-test/pom.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - 4.0.0 - com.axonivy.portal - axonivy-express-test - 1.0.0-SNAPSHOT - iar-integration-test - - - com.axonivy.portal - axonivy-express - 11.2.0-SNAPSHOT - iar - - - com.axonivy.ivy.test - unit-tester - 11.1.0 - test - - - com.axonivy.ivy.webtest - web-tester - 11.1.0 - test - - - - src_test - - - com.axonivy.ivy.ci - project-build-plugin - 11.1.0 - true - - - - diff --git a/axonivy-express-test/processes/TestExpress.p.json b/axonivy-express-test/processes/TestExpress.p.json deleted file mode 100644 index 4a6a900..0000000 --- a/axonivy-express-test/processes/TestExpress.p.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "$schema" : "https://json-schema.axonivy.com/process/11.2.1/process.json", - "id" : "1893F8F05259D636", - "config" : { - "data" : "com.axonivy.portal.test.Data" - }, - "elements" : [ { - "id" : "f0", - "type" : "RequestStart", - "name" : "start", - "config" : { - "signature" : "start" - }, - "visual" : { - "at" : { "x" : 96, "y" : 64 } - }, - "connect" : [ - { "id" : "f2", "to" : "f1" } - ] - }, { - "id" : "f1", - "type" : "TaskEnd", - "visual" : { - "at" : { "x" : 352, "y" : 64 } - } - } ] -} \ No newline at end of file diff --git a/axonivy-express-test/src_test/com/axonivy/portal/test/ExpressProcessTest.java b/axonivy-express-test/src_test/com/axonivy/portal/test/ExpressProcessTest.java deleted file mode 100644 index 63eb6ad..0000000 --- a/axonivy-express-test/src_test/com/axonivy/portal/test/ExpressProcessTest.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.axonivy.portal.test; - -import static org.assertj.core.api.Assertions.assertThat; - -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.Test; - -import ch.ivyteam.ivy.bpm.engine.client.BpmClient; -import ch.ivyteam.ivy.bpm.engine.client.ExecutionResult; -import ch.ivyteam.ivy.bpm.engine.client.element.BpmElement; -import ch.ivyteam.ivy.bpm.engine.client.element.BpmProcess; -import ch.ivyteam.ivy.bpm.exec.client.IvyProcessTest; -import ch.ivyteam.ivy.scripting.objects.CompositeObject; - -/** - * This sample ProcessTest simulates users and systems working through - * your process flow. Created data and tasks can be easily asserted. - * - *

The test can either be run

    - *
  • in the Designer IDE ( right click > run as > JUnit Test )
  • - *
  • or in a Maven continuous integration build pipeline ( mvn clean verify )
  • - *

- * - *

Detailed guidance on writing these kind of tests can be found in our - * Process Testing docs - *

- */ -@IvyProcessTest -public class ExpressProcessTest{ - - private static final BpmProcess testee = BpmProcess.path("Start Processes/TestExpress"); - - @Test - @Disabled - public void callProcess(BpmClient bpmClient){ - BpmElement startable = testee.elementName("start.ivp"); - ExecutionResult result = bpmClient.start().process(startable).execute(); - CompositeObject data = result.data().last(); - assertThat(data).isNotNull(); - } -} diff --git a/axonivy-express-test/src_test/com/axonivy/portal/test/ExpressWebIT.java b/axonivy-express-test/src_test/com/axonivy/portal/test/ExpressWebIT.java deleted file mode 100644 index 3c7180c..0000000 --- a/axonivy-express-test/src_test/com/axonivy/portal/test/ExpressWebIT.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.axonivy.portal.test; - -import static com.codeborne.selenide.Selenide.open; - -import org.junit.jupiter.api.Test; - -import com.axonivy.ivy.webtest.IvyWebTest; -import com.axonivy.ivy.webtest.engine.EngineUrl; - -/** - * This sample WebTest orchestrates a real browser to verify that your workflow - * application and especially it's Html Dialogs are running as expected. - * - *

- * The test can either be run - *

    - *
  • in the Designer IDE ( right click > run as > JUnit Test - * )
  • - *
  • or in a Maven continuous integration build pipeline ( - * mvn clean verify )
  • - *
- *

- * - *

- * Detailed guidance on writing these kind of tests can be found in our WebTesting - * docs - *

- */ -@IvyWebTest(headless = false) -public class ExpressWebIT { - - @Test - public void fillDialogForm() { - open(EngineUrl.createProcessUrl("axonivy-express-test/1893F8F05259D636/start.ivp")); - } - -} \ No newline at end of file diff --git a/axonivy-express/dataclasses/gawfs/ExpressStartData.ivyClass b/axonivy-express/dataclasses/gawfs/ExpressStartData.ivyClass index c174e4f..33d7832 100644 --- a/axonivy-express/dataclasses/gawfs/ExpressStartData.ivyClass +++ b/axonivy-express/dataclasses/gawfs/ExpressStartData.ivyClass @@ -1,4 +1,4 @@ ExpressStartData #class gawfs #namespace -caseId Long #field -caseId PERSISTENT #fieldModifier +uuid String #field +uuid PERSISTENT #fieldModifier diff --git a/axonivy-express/pom.xml b/axonivy-express/pom.xml index af332d8..779f433 100644 --- a/axonivy-express/pom.xml +++ b/axonivy-express/pom.xml @@ -4,16 +4,17 @@ 4.0.0 com.axonivy.portal axonivy-express - 11.2.0-SNAPSHOT + 11.1.0-SNAPSHOT iar + 11.2.0 11.1.0 com.axonivy.portal portal - 11.2.0-m243 + 11.2.0-m245 iar diff --git a/axonivy-express/processes/Business Processes/Business Processes b/axonivy-express/processes/Business Processes/Business Processes deleted file mode 100644 index e69de29..0000000 diff --git a/axonivy-express/processes/Orchestration Processes/Orchestration Processes b/axonivy-express/processes/Orchestration Processes/Orchestration Processes deleted file mode 100644 index e69de29..0000000 diff --git a/axonivy-express/processes/Start Processes/ExpressStart.p.json b/axonivy-express/processes/Start Processes/ExpressStart.p.json index 963032d..db9132d 100644 --- a/axonivy-express/processes/Start Processes/ExpressStart.p.json +++ b/axonivy-express/processes/Start Processes/ExpressStart.p.json @@ -12,10 +12,10 @@ "signature" : "startExpressBusinessView", "input" : { "params" : [ - { "name" : "caseId", "type" : "Long", "desc" : "" } + { "name" : "uuid", "type" : "String", "desc" : "" } ], "map" : { - "out.caseId" : "param.caseId" + "out.uuid" : "param.uuid" } }, "request" : { @@ -40,10 +40,10 @@ "type" : "DialogCall", "name" : "Open ExpressBusinessView", "config" : { - "dialog" : "ch.ivy.addon.express.generic.ExpressBusinessView:start(Long)", + "dialog" : "ch.ivy.addon.express.generic.ExpressBusinessView:start(String)", "call" : { "map" : { - "param.caseId" : "in.caseId" + "param.uuid" : "in.uuid" } } }, diff --git a/axonivy-express/src/ch/ivy/gawfs/beans/ExpressBusinessViewBean.java b/axonivy-express/src/ch/ivy/gawfs/beans/ExpressBusinessViewBean.java index 47ca373..c456b3a 100644 --- a/axonivy-express/src/ch/ivy/gawfs/beans/ExpressBusinessViewBean.java +++ b/axonivy-express/src/ch/ivy/gawfs/beans/ExpressBusinessViewBean.java @@ -3,6 +3,7 @@ import java.io.Serializable; import java.util.ArrayList; import java.util.List; +import java.util.Optional; import javax.annotation.PostConstruct; import javax.faces.bean.ManagedBean; @@ -10,6 +11,8 @@ import org.apache.commons.collections4.CollectionUtils; +import com.axonivy.portal.components.util.CaseUtils; + import ch.ivy.addon.portalkit.ivydata.utils.ServiceUtilities; import ch.ivy.addon.portalkit.jsf.Attrs; import ch.ivy.addon.portalkit.util.ExecutingExpressProcessUtils; @@ -38,7 +41,8 @@ public class ExpressBusinessViewBean implements Serializable { @PostConstruct public void init() { - this.caseId = Attrs.currentContext().getAttribute("#{data.caseId}", Long.class); + String uuid = Attrs.currentContext().getAttribute("#{data.uuid}", String.class); + this.caseId = Optional.ofNullable(CaseUtils.findCase(uuid)).map(ICase::getId).orElse(null); expressCase = ExecutingExpressProcessUtils.getExpressCase(caseId); if (expressCase != null) { executeWorkflowDataList = collectPredefinedWorkflowData(expressCase.getCategory().getName()); diff --git a/axonivy-express/src/ch/ivy/gawfs/beans/UserTaskFormBean.java b/axonivy-express/src/ch/ivy/gawfs/beans/UserTaskFormBean.java index 3662a3f..42fa92d 100644 --- a/axonivy-express/src/ch/ivy/gawfs/beans/UserTaskFormBean.java +++ b/axonivy-express/src/ch/ivy/gawfs/beans/UserTaskFormBean.java @@ -8,6 +8,8 @@ import org.apache.commons.lang3.StringUtils; +import com.axonivy.portal.util.UploadDocumentUtils; + import ch.ivy.addon.portalkit.service.CaseDocumentService; import ch.ivyteam.ivy.security.ISecurityContext; import ch.ivyteam.ivy.security.IUser; @@ -40,10 +42,10 @@ public List getAllowedUploadFileType() { } public boolean getEnableScriptCheckingForUploadedDocument() { - return CaseDocumentService.enableScriptCheckingForUploadedDocument(); + return UploadDocumentUtils.enableScriptCheckingForUploadedDocument(); } public boolean getEnableVirusScannerForUploadedDocument() { - return CaseDocumentService.enableVirusScannerForUploadedDocument(); + return UploadDocumentUtils.enableVirusScannerForUploadedDocument(); } } \ No newline at end of file diff --git a/axonivy-express/src/ch/ivy/gawfs/mail/ExpressMailClient.java b/axonivy-express/src/ch/ivy/gawfs/mail/ExpressMailClient.java index a80972e..c461667 100644 --- a/axonivy-express/src/ch/ivy/gawfs/mail/ExpressMailClient.java +++ b/axonivy-express/src/ch/ivy/gawfs/mail/ExpressMailClient.java @@ -18,10 +18,7 @@ import ch.ivyteam.ivy.mail.MailClientConfigProvider; import ch.ivyteam.ivy.mail.MailMessage; import ch.ivyteam.ivy.mail.MailMessage.Builder; -import ch.ivyteam.ivy.project.IIvyProject; -import ch.ivyteam.ivy.project.IvyProjectUtil; import ch.ivyteam.ivy.scripting.objects.File; -import ch.ivyteam.ivy.workflow.IWorkflowProcessModelVersion; public class ExpressMailClient { @@ -83,12 +80,7 @@ private static List buildToMailAddress(String recipients) { } private static MailClientConfig getMailClientConfig() { - IIvyProject ivyProject = IvyProjectUtil.getIvyProjectByName(getProjectName()); - return MailClientConfigProvider.get(ivyProject); - } - - private static String getProjectName() { - return IWorkflowProcessModelVersion.of(Ivy.request().getProcessModelVersion()).getProjectName(); + return MailClientConfigProvider.get(); } } diff --git a/axonivy-express/src_hd/ch/ivy/addon/express/generic/ExpressBusinessView/ExpressBusinessViewData.ivyClass b/axonivy-express/src_hd/ch/ivy/addon/express/generic/ExpressBusinessView/ExpressBusinessViewData.ivyClass index a325709..d5d9e79 100644 --- a/axonivy-express/src_hd/ch/ivy/addon/express/generic/ExpressBusinessView/ExpressBusinessViewData.ivyClass +++ b/axonivy-express/src_hd/ch/ivy/addon/express/generic/ExpressBusinessView/ExpressBusinessViewData.ivyClass @@ -1,4 +1,4 @@ ExpressBusinessViewData #class ch.ivy.addon.express.generic.ExpressBusinessView #namespace -caseId Long #field -caseId PERSISTENT #fieldModifier +uuid String #field +uuid PERSISTENT #fieldModifier diff --git a/axonivy-express/src_hd/ch/ivy/addon/express/generic/ExpressBusinessView/ExpressBusinessViewProcess.p.json b/axonivy-express/src_hd/ch/ivy/addon/express/generic/ExpressBusinessView/ExpressBusinessViewProcess.p.json index 14c4227..9690365 100644 --- a/axonivy-express/src_hd/ch/ivy/addon/express/generic/ExpressBusinessView/ExpressBusinessViewProcess.p.json +++ b/axonivy-express/src_hd/ch/ivy/addon/express/generic/ExpressBusinessView/ExpressBusinessViewProcess.p.json @@ -8,15 +8,15 @@ "elements" : [ { "id" : "f0", "type" : "HtmlDialogStart", - "name" : "start(Long)", + "name" : "start(String)", "config" : { "signature" : "start", "input" : { "params" : [ - { "name" : "caseId", "type" : "Long", "desc" : "" } + { "name" : "uuid", "type" : "String", "desc" : "" } ], "map" : { - "out.caseId" : "param.caseId" + "out.uuid" : "param.uuid" } }, "guid" : "17326ECC68E24F98" diff --git a/axonivy-express/src_hd/ch/ivy/gawfs/component/FinishedUserTasksForm/FinishedUserTasksForm.xhtml b/axonivy-express/src_hd/ch/ivy/gawfs/component/FinishedUserTasksForm/FinishedUserTasksForm.xhtml index e3925e7..fd937be 100644 --- a/axonivy-express/src_hd/ch/ivy/gawfs/component/FinishedUserTasksForm/FinishedUserTasksForm.xhtml +++ b/axonivy-express/src_hd/ch/ivy/gawfs/component/FinishedUserTasksForm/FinishedUserTasksForm.xhtml @@ -54,7 +54,7 @@ - diff --git a/axonivy-express/src_hd/ch/ivy/gawfs/workflowCreation/FormDefinition/PreviewFieldset.xhtml b/axonivy-express/src_hd/ch/ivy/gawfs/workflowCreation/FormDefinition/PreviewFieldset.xhtml index f6c0575..5bdb789 100644 --- a/axonivy-express/src_hd/ch/ivy/gawfs/workflowCreation/FormDefinition/PreviewFieldset.xhtml +++ b/axonivy-express/src_hd/ch/ivy/gawfs/workflowCreation/FormDefinition/PreviewFieldset.xhtml @@ -16,7 +16,7 @@ - diff --git a/axonivy-express/src_hd/ch/ivy/gawfs/workflowExecution/UserTaskForm/UserTaskForm.xhtml b/axonivy-express/src_hd/ch/ivy/gawfs/workflowExecution/UserTaskForm/UserTaskForm.xhtml index b0e7177..4af84c5 100644 --- a/axonivy-express/src_hd/ch/ivy/gawfs/workflowExecution/UserTaskForm/UserTaskForm.xhtml +++ b/axonivy-express/src_hd/ch/ivy/gawfs/workflowExecution/UserTaskForm/UserTaskForm.xhtml @@ -45,7 +45,7 @@ - diff --git a/build/Dockerfile b/build/Dockerfile new file mode 100644 index 0000000..a9a570f --- /dev/null +++ b/build/Dockerfile @@ -0,0 +1,3 @@ +FROM maven:3.8.6-eclipse-temurin-17 + +RUN addgroup --gid 1001 build && adduser --uid 1001 --gid 1001 --disabled-password --gecos "" build \ No newline at end of file diff --git a/build/ci/Jenkinsfile b/build/ci/Jenkinsfile new file mode 100644 index 0000000..0787e1f --- /dev/null +++ b/build/ci/Jenkinsfile @@ -0,0 +1,45 @@ +pipeline { + agent { + label 'linux' + } + + options { + buildDiscarder(logRotator(numToKeepStr: '60', artifactNumToKeepStr: '5')) + } + + triggers { + pollSCM 'H/15 * * * *' + } + + stages { + stage('build') { + steps { + script { + builtModules = [] + docker.build('build-axonivy-express-module', '-f build/Dockerfile .').inside('-v /var/tools/maven-cache:/home/build/') { + def modules = ['axonivy-express'] + for (module in modules) { + maven cmd: "clean install -f ${module}/pom.xml" + builtModules.add(module) + } + } + } + archiveArtifacts artifacts: '*/target/*.iar', allowEmptyArchive: true + } + } + + stage('deploy') { + steps { + script { + def buildPluginVersion = readMavenPom(file: 'axonivy-express/pom.xml').getProperties().getProperty("build.plugin.version") + def engineUrl = 'http://10.123.1.216:8000' + docker.build('deploy-modules-to-engine', '-f build/Dockerfile .').inside('-v /var/tools/maven-cache:/home/build/') { + for (module in builtModules) { + maven cmd: "com.axonivy.ivy.ci:project-build-plugin:${buildPluginVersion}:deploy-to-engine -f ${module}/pom.xml -Divy.deploy.server.id=engine-cockpit -Divy.deploy.engine.app=Portal -Divy.deploy.method=HTTP -Divy.deploy.engine.url=${engineUrl} -Divy.test.engine=MODIFY_EXISTING -Divy.deploy.test.users=true" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/pom.xml b/pom.xml index 9f0112b..6966ccb 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.axonivy.portal axonivy-express axonivy-express-modules - 11.2.0-SNAPSHOT + 11.1.0-SNAPSHOT pom