Giter VIP home page Giter VIP logo

camunda-formio-accelerator's Introduction

Camunda Formio Accelerator

release GitHub release date CI Dependabot License code style: prettier Join Discussions

Overview

The “Camunda Platform Accelerator for Form.io” (the Accelerator) Extends Camunda's reach into the application layer by enabling the rapid development of complex, form-centric, business process applications by delivering additional low-code / no-code capabilities into the Camunda Platform using powerful Camunda Modeler Form.io forms builder plugin.

image

Implementation

The project integrates the following frameworks to provide fast and user-friendly experience of forms and business processes development & deployment through unified interface:

  • Spring Boot

  • Form.io Camunda Modeler Plugin with Form Builder

  • Form.io Renderer SDK – Angular JS, React JS, JS, Vue JS

  • Camunda BPM Platform Form.io Plugin

  • Camunda BPM Platform Form.io Tasklist Plugin

  • e2e DevOps and BDD Testing framework

The general flow of actions to develop, deploy and execute workflow implementation in softCannery’s Camunda Platform Accelerator for Form.io:

image

Getting Started

Follow Wiki Getting Started to learn how to use Camunda BPM with Form.io

Join Discussions

We can be reached on the Github Discussions if you have any questions!

License

Camunda Platform Accelerator for Form.io Community License v1.0

This Camunda Platform Accelerator for Form.io Community License v1.0 (“this Agreement”) sets
forth the terms and conditions on which Soft Cannery LTD. (“the Licensor”) makes available
this software (“the Software”). BY INSTALLING, DOWNLOADING, ACCESSING, USING OR DISTRIBUTING
THE SOFTWARE YOU INDICATE YOUR ACCEPTANCE TO, AND ARE ENTERING INTO A CONTRACT WITH,
THE LICENSOR ON THE TERMS SET OUT IN THIS AGREEMENT. IF YOU DO NOT AGREE TO THESE TERMS,
YOU MUST NOT USE THE SOFTWARE. IF YOU ARE RECEIVING THE SOFTWARE ON BEHALF OF A LEGAL ENTITY,
YOU REPRESENT AND WARRANT THAT YOU HAVE THE ACTUAL AUTHORITY TO AGREE TO THE TERMS AND
CONDITIONS OF THIS AGREEMENT ON BEHALF OF SUCH ENTITY. “Licensee” means you, an individual,
or the entity on whose behalf you are receiving the Software.

Permission is hereby granted, free of charge, to the Licensee obtaining a copy of this
Software and associated documentation files, to deal in the Software without restriction,
including without limitation the rights to use, copy, modify, merge, publish, distribute,
sublicense, and/or sell copies of the Software, and to permit persons to whom the Software
is furnished to do so, subject in each case to the following conditions:

Condition 1: If the Licensee distributes the Software or any derivative works of the Software,
the Licensee must attach this Agreement.

Condition 2: Without limiting other conditions in this Agreement, the grant of rights under
this Agreement does not include the right to provide Commercial Product or Service. Written
permission from the Licensor is required to provide Commercial Product or Service.

A “Commercial Product or Service” is software or service intended for or directed towards
commercial advantage or monetary compensation for the provider of the product or service
enabling parties to deploy and/or execute Commercial Product or Service.

If the Licensee is in breach of the Conditions, this Agreement, including the rights granted
under it, will automatically terminate with immediate effect.

SUBJECT AS SET OUT BELOW, THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.

NOTHING IN THIS AGREEMENT EXCLUDES OR RESTRICTS A PARTY’S LIABILITY FOR (A) DEATH OR PERSONAL
INJURY CAUSED BY THAT PARTY’S NEGLIGENCE, (B) FRAUD, OR (C) ANY OTHER LIABILITY TO THE EXTENT
THAT IT CANNOT BE LAWFULLY EXCLUDED OR RESTRICTED.

camunda-formio-accelerator's People

Contributors

dependabot[bot] avatar mike-vasylchenko avatar softcannery-ltd avatar volkotyk avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

camunda-formio-accelerator's Issues

how to fix the situation where the default Kermit user is locked out

I've somehow managed to lock myself out.

2023-09-12 02:29:33 2023-09-12 06:29:33.447 INFO 1 --- [ main] org.camunda.bpm.spring.boot : STARTER-SB011 Skip creating initial Admin User, user does exist: UserEntity[id=kermit, revision=14, firstName=Kermit, lastName=Kermit, email=kermit@localhost, password=******, salt=******, lockExpirationTime=Tue Sep 12 06:25:54 GMT 2023, attempts=10]

I've tried to reinstall everything and continue to get the above message in the log.

Can you please tell me how to resolve this issue?

Thanks,

Groovy vs. JavaScript

I tried to run a process that uses a javascript event listener and got the following error message:

The process could not be started. :
Cannot instantiate process definition quoteToClose:2:d88fe0a5-4fd5-11ee-8755-0242ac120005: Can't find scripting engine for 'javascript': scriptEngine is null

I assume this means that javascript is not configured for the camunda image packaged with the accelerator. Is there any issue including javascript?
Thanks,

Incomplete README and Wiki/Getting Started leaves me with questions

Is your feature request related to a problem? Please describe.
Questions not answered in the current documentation:

<< Assume, because it's true, that I have 0 (zero) Java knowledge, but am familiar with Docker, Camunda, Form.io, BPMN, DMN separately >>

Deployment of custom models and forms:

  1. Must the .formio and .bpmn (and .dmn) files all gave the same name as in the example?
  2. Conversely, I have a N244.formio and jk-formio-camunda.bpmn generated through the Modeller, but the Deploy Process page doesn't do anything once these files are selected. Is there an error? Is the deployment allowed (ie security passed) given I haven't logged in anywhere? How long should I wait for something to happen?
  3. Trying Camunda Modeller's (rocket) deployment, a http://localhost:8080/engine-rest endpoint is default. I remove the :8080 part to match the documentation, but validation continues to fail. Testing via the browser, nothing happens. Is the rest endpoint enabled? Is it mapped through NginX? Is it allowed, given I haven't logged in?
  4. Installing the releases/deployment plugin, and using the kermit/password credentials, the engine-rest endpoint still fails validation. How can I deploy without using the UI, eg using the file system or CD approach (multi-repo)?

Getting the latest .formio for a task / event in the Modeller:

  1. When does the formio Modeller plugin save set of .formio files across a .bpmn map?
  2. How can I force it to overwrite the specific .formio for a given event or task node?
  3. Sometimes the Form editor doesn't allow the component name or API id to be edited. I reload the whole Modeller as workaround
  4. How does one rename the .formio, data store, and have these "sync" between the Form editor and event / task properties?

Form.IO features configuration:

  1. How does one enable PDF forms?
  2. How does one enable multi-step (Wizard) forms, and dynamically skip steps using field values (if field.value = X then goto page3 else goto page2)
  3. I notice the form editor has a "browse" button. How can one edit a .formio file without going through the event / task's Edit button (bypass the disabled features, UI navigation, limited components, ID fields freezing)? Conversely, if I use Form.IO's full features (as in "bring my own form, created elsewhere"), and "browse" to select into a event / task, will all of the .formio work after deployment, or only what the Modeller plugin currently supports?

Using submissions in the process:

<< Of course I haven't gotten past a deployment, so this is rather thinking ahead based on what's already observed...>>

  1. One of the properties is variable which I assume will be the name of the process variable generated upon a submission and/or start event. I assume this variable will be populated with the JSON of the submission. How does one parse this JSON to extract a specific field value for eXclusive gateway branching, for example?
  2. Is FEEL, Groovy, JavaScript, Spin all enabled in the docker image? Is there a FormIO-aware submission accessor available? Will PDF, multi-step, multiple forms across a .bpmn, and form submissions (simple, pdf, and multi-step) from loop tasks or called sub-processes all access consistently?

Security:

Currently the Docker Compose doesn't require any login. This isn't realistic:

  1. How do I get access to the Camunda Task List, and other web apps?
  2. How do I enable / return Camunda's multi-tenant and multi-user login?
  3. How to I enable SSO or OpenId login via a 3rd provider eg Keycloack or Auth0?
  4. How to I disable the custom / over-simplified UI?
  5. How does the custom / over-simplified UI support X roles can start process A, Y roles do some tasks, z roles do others?

Describe the solution you'd like
Detailed documentation. I would happily update and create documentation as answers come. In the meantime, I'm stuck / blocked.

add a feature to select from a list of .formio files to associate with a BPMN file

As a modeler using the Camunda Modeler, when I select the option to add a form to a User Task I would like the option to be able to select which .formio file I want to use, making it much easier to use the accelerator for projects requiring multiple bpmn files.

As an example, I have a BPMN process with a file called

process1.bpmn

When I use the modeler plugin provided with the accelerator it will download the forms and resources associated with a formio project (actually a stage) from Form.io Cloud (https://portal.form.io) in to a file in the same directory as process1.bpmn called process1.formio.

Assuming I have a subprocess (call activity or an independent process) in a separate BPMN file called

process2.bpmn

I would like to be able to use the same formio file called process1.bpmn; otherwise if I have process3.bpmn, process4.bpmn ... processn.bpmn it very quickly becomes unmanageable.

As such we need an easy way to have one .formio file that can be used by a collection of bpmn processes.

Please let me know if I can provide any additional detail.

Thanks,
Paul

As a developer, I need a single API to request a collection of submissions for a provided collection of Process Instances, so I can do this in one call.

Is your feature request related to a problem? Please describe.
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

Describe the solution you'd like
A clear and concise description of what you want to happen.

Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.

Additional context
Add any other context or screenshots about the feature request here.

Start or End Event Listener on the Start Event seems to break the Accelerator

The submission data does not seem to end up in the accelerator's Camunda variable: formio.start.json variable.

The following Hello World.bpmn file is an example that will recreate the problem.

Start Event | Event Listener | javascript expression:

execution.setVariable("variableName", true);

Attached is the Hello World.formio file

Following is the Hello World BPMN XML that demonstrates the issue.

<?xml version="1.0" encoding="UTF-8"?>
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:modeler="http://camunda.org/schema/modeler/1.0" id="Definitions_05fei88" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="5.15.1" modeler:executionPlatform="Camunda Platform" modeler:executionPlatformVersion="7.19.0">
  <bpmn:process id="helloWorld" name="Hello World" isExecutable="true" camunda:historyTimeToLive="180">
    <bpmn:extensionElements>
      <camunda:properties>
        <camunda:property name="processType" value="Admin" />
      </camunda:properties>
    </bpmn:extensionElements>
    <bpmn:startEvent id="StartEvent_1" name="Start" camunda:formHandlerClass="org.softcannery.camunda.FormioStartFormHandler" camunda:formKey="embedded:app:formio.html">
      <bpmn:extensionElements>
        <camunda:properties>
          <camunda:property name="formio.variable" value="start" />
          <camunda:property name="formio.outputDataSource" value="start" />
          <camunda:property name="formio.file" value="Hello World.formio" />
          <camunda:property name="formio.form" value="case" />
        </camunda:properties>
        <camunda:executionListener event="start">
          <camunda:script scriptFormat="javascript">execution.setVariable("variableName", true);</camunda:script>
        </camunda:executionListener>
      </bpmn:extensionElements>
      <bpmn:outgoing>Flow_039ivcy</bpmn:outgoing>
      <bpmn:dataOutputAssociation id="DataOutputAssociation_1vlaqwe">
        <bpmn:targetRef>DataStoreReference_0gccua2</bpmn:targetRef>
      </bpmn:dataOutputAssociation>
    </bpmn:startEvent>
    <bpmn:sequenceFlow id="Flow_039ivcy" sourceRef="StartEvent_1" targetRef="Activity_1kueh7l" />
    <bpmn:dataStoreReference id="DataStoreReference_0gccua2" name="start" />
    <bpmn:userTask id="Activity_1kueh7l" name="Show start Data" camunda:formKey="embedded:app:formio.html" camunda:assignee="[email protected]">
      <bpmn:extensionElements>
        <camunda:properties>
          <camunda:property name="formio.variable" value="Activity_1kueh7l" />
          <camunda:property name="formio.inputDataSource" value="start" />
          <camunda:property name="formio.outputDataSource" value="start" />
          <camunda:property name="formio.file" value="Hello World.formio" />
          <camunda:property name="formio.form" value="case" />
        </camunda:properties>
        <camunda:inputOutput>
          <camunda:inputParameter name="Activity_1kueh7l">${formio.start.json}</camunda:inputParameter>
        </camunda:inputOutput>
      </bpmn:extensionElements>
      <bpmn:incoming>Flow_039ivcy</bpmn:incoming>
      <bpmn:outgoing>Flow_0blo8ha</bpmn:outgoing>
      <bpmn:property id="Property_130sf3r" name="__targetRef_placeholder" />
      <bpmn:dataInputAssociation id="DataInputAssociation_18ys0mj">
        <bpmn:sourceRef>DataStoreReference_0gccua2</bpmn:sourceRef>
        <bpmn:targetRef>Property_130sf3r</bpmn:targetRef>
      </bpmn:dataInputAssociation>
      <bpmn:dataOutputAssociation id="DataOutputAssociation_1hqnuu1">
        <bpmn:targetRef>DataStoreReference_0gccua2</bpmn:targetRef>
      </bpmn:dataOutputAssociation>
    </bpmn:userTask>
    <bpmn:endEvent id="Event_0ps9rih">
      <bpmn:incoming>Flow_0blo8ha</bpmn:incoming>
    </bpmn:endEvent>
    <bpmn:sequenceFlow id="Flow_0blo8ha" sourceRef="Activity_1kueh7l" targetRef="Event_0ps9rih" />
  </bpmn:process>
  <bpmndi:BPMNDiagram id="BPMNDiagram_1">
    <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="helloWorld">
      <bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">
        <dc:Bounds x="152" y="82" width="36" height="36" />
        <bpmndi:BPMNLabel>
          <dc:Bounds x="158" y="52" width="24" height="14" />
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="DataStoreReference_0gccua2_di" bpmnElement="DataStoreReference_0gccua2">
        <dc:Bounds x="145" y="143" width="50" height="50" />
        <bpmndi:BPMNLabel>
          <dc:Bounds x="159" y="200" width="22" height="14" />
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Activity_1bkawer_di" bpmnElement="Activity_1kueh7l">
        <dc:Bounds x="240" y="60" width="100" height="80" />
        <bpmndi:BPMNLabel />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Event_0ps9rih_di" bpmnElement="Event_0ps9rih">
        <dc:Bounds x="392" y="82" width="36" height="36" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNEdge id="DataOutputAssociation_1vlaqwe_di" bpmnElement="DataOutputAssociation_1vlaqwe">
        <di:waypoint x="170" y="118" />
        <di:waypoint x="170" y="143" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_039ivcy_di" bpmnElement="Flow_039ivcy">
        <di:waypoint x="188" y="100" />
        <di:waypoint x="240" y="100" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="DataInputAssociation_18ys0mj_di" bpmnElement="DataInputAssociation_18ys0mj">
        <di:waypoint x="195" y="154" />
        <di:waypoint x="240" y="128" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="DataOutputAssociation_1hqnuu1_di" bpmnElement="DataOutputAssociation_1hqnuu1">
        <di:waypoint x="240" y="128" />
        <di:waypoint x="195" y="154" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_0blo8ha_di" bpmnElement="Flow_0blo8ha">
        <di:waypoint x="340" y="100" />
        <di:waypoint x="392" y="100" />
      </bpmndi:BPMNEdge>
    </bpmndi:BPMNPlane>
  </bpmndi:BPMNDiagram>
</bpmn:definitions>

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.