mirror of
https://github.com/status-im/spiff-arena.git
synced 2025-02-28 09:20:32 +00:00
ventilate prose
This commit is contained in:
parent
e1f944de51
commit
d72080c9d5
@ -203,7 +203,8 @@ By incorporating these validations into SpiffWorkflow forms, you can create inte
|
||||
|
||||
#### Scenario Overview
|
||||
|
||||
Workflow processes often require the enforcement of minimum and maximum date constraints to align with operational timelines or project deadlines. This scenario demonstrates the configuration of both `minimumDate` and `maximumDate` validations within a form, ensuring that selected dates fall within a specific period defined by other date fields in the workflow.
|
||||
Workflow processes often require the enforcement of minimum and maximum date constraints to align with operational timelines or project deadlines.
|
||||
This scenario demonstrates the configuration of both `minimumDate` and `maximumDate` validations within a form, ensuring that selected dates fall within a specific period defined by other date fields in the workflow.
|
||||
|
||||
#### JSON Schema Configuration:
|
||||
|
||||
@ -423,7 +424,8 @@ This will automatically validate that the max value cannot be less than the min
|
||||
|
||||
### Adding a New Button for Repeating Sections in Forms
|
||||
|
||||
Nested forms or repeating sections are designed to collect an array of objects, where each object represents a set of related information. For instance, in a task management form, you might need to collect multiple tasks, each with its title and completion status.
|
||||
Nested forms or repeating sections are designed to collect an array of objects, where each object represents a set of related information.
|
||||
For instance, in a task management form, you might need to collect multiple tasks, each with its title and completion status.
|
||||
|
||||
This structure can be represented in the form's schema as follows:
|
||||
|
||||
|
@ -12,9 +12,11 @@ If you have a use case where you need to store data and access it from multiple
|
||||
All of these mechanisms work well in SpiffWorkflow, so the choice will depend on your storage and performance requirements.
|
||||
|
||||
## Types of Data Store
|
||||
|
||||
### KKV Data Store in BPMN
|
||||
|
||||
Key-Key-Value (KKV) Data Stores extend the traditional key-value model by introducing an additional key layer. This structure enables more complex and hierarchical data storage solutions, making them particularly suited for BPMN (Business Process Model and Notation) processes that manage multifaceted data relationships.
|
||||
Key-Key-Value (KKV) Data Stores extend the traditional key-value model by introducing an additional key layer.
|
||||
This structure enables more complex and hierarchical data storage solutions, making them particularly suited for BPMN (Business Process Model and Notation) processes that manage multifaceted data relationships.
|
||||
|
||||
- **Structure**: A KKV data store organizes data into two levels of keys before reaching the actual value, e.g., `Genre -> Movie -> Attributes`. This structure is particularly beneficial for categorizing and accessing nested data efficiently.
|
||||
|
||||
@ -65,7 +67,8 @@ After running the process, You can view the new movies data in data store:
|
||||
|
||||
### JSON Data Store
|
||||
|
||||
In BPMN (Business Process Model and Notation), incorporating a JSON file as a data store offers a versatile method for managing structured data throughout a process. A JSON data store is structured file or set of files that uses the JSON format to store data.
|
||||
In BPMN (Business Process Model and Notation), incorporating a JSON file as a data store offers a versatile method for managing structured data throughout a process.
|
||||
A JSON data store is structured file or set of files that uses the JSON format to store data.
|
||||
|
||||
#### JSON Data Store: Gatorade Flavors
|
||||
|
||||
|
@ -101,7 +101,8 @@ Prior to the service task's execution, one potential error ID is defined as `Err
|
||||
|
||||

|
||||
|
||||
Attached to the service task, this event catches `Error_1`, setting an alternative path for error handling. The error details are stored in a variable named `err1`.
|
||||
Attached to the service task, this event catches `Error_1`, setting an alternative path for error handling.
|
||||
The error details are stored in a variable named `err1`.
|
||||
|
||||
5. **Manual Tasks for Error Handling and Success Path**:
|
||||
|
||||
|
@ -1,9 +1,12 @@
|
||||
# Exclusive Gateways Example
|
||||
|
||||
## Overview
|
||||
Exclusive Gateways in BPMN serve as decision points that dictate the flow of a process based on conditional logic. This example demonstrates the use of an Exclusive Gateway to manage conditional routing following user input from a form.
|
||||
|
||||
Exclusive Gateways in BPMN serve as decision points that dictate the flow of a process based on conditional logic.
|
||||
This example demonstrates the use of an Exclusive Gateway to manage conditional routing following user input from a form.
|
||||
|
||||
## Process Steps
|
||||
|
||||

|
||||
|
||||
1. **User Task: Show User Form**
|
||||
|
@ -105,9 +105,11 @@ If a data object is to be used within a multi-instance subprocess, ensure that i
|
||||
|
||||
### Loops
|
||||
|
||||
Standard loops in Business Process Model and Notation (BPMN) are a fundamental mechanism to model repetitive tasks within a workflow. These loops allow for the execution of a specific task or sequence of tasks repeatedly until a predefined condition is met, mirroring traditional loop constructs found in programming languages.
|
||||
Standard loops in Business Process Model and Notation (BPMN) are a fundamental mechanism to model repetitive tasks within a workflow.
|
||||
These loops allow for the execution of a specific task or sequence of tasks repeatedly until a predefined condition is met, mirroring traditional loop constructs found in programming languages.
|
||||
|
||||
### Key Concepts
|
||||
|
||||

|
||||
|
||||
1. **Loop Marker**: A visual indicator (a small loop symbol) placed at the bottom center of an activity to denote that the activity is subject to repeated execution.
|
||||
@ -117,7 +119,8 @@ Standard loops in Business Process Model and Notation (BPMN) are a fundamental m
|
||||
|
||||
### Implementing a Standard Loop
|
||||
|
||||
To model a standard loop in BPMN, determine the activity or sequence of activities that need to be executed repeatedly. The next steps are:
|
||||
To model a standard loop in BPMN, determine the activity or sequence of activities that need to be executed repeatedly.
|
||||
The next steps are:
|
||||
|
||||
1. **Configure the Loop Characteristics**:
|
||||
- Add the loop marker to the activity symbol.
|
||||
@ -129,7 +132,8 @@ To model a standard loop in BPMN, determine the activity or sequence of activiti
|
||||
|
||||
### Example: Incrementing a Counter
|
||||
|
||||
Consider a process designed to increment a counter variable until it reaches a specific value. This scenario is effectively managed using a standard loop in BPMN.
|
||||
Consider a process designed to increment a counter variable until it reaches a specific value.
|
||||
This scenario is effectively managed using a standard loop in BPMN.
|
||||
|
||||
#### Process Overview
|
||||
|
||||
|
@ -7,6 +7,7 @@ This example illustrates the use of parallel gateways in BPMN models to manage a
|
||||
Parallel gateways are powerful BPMN elements that split a process flow into multiple independent flows, allowing for simultaneous execution of tasks, and later merging these flows to ensure coordination before moving forward.
|
||||
|
||||
### Process Steps
|
||||
|
||||

|
||||
1. **Parallel Gateway (Split)**: After the start event, the gateway divides the main flow into two separate paths, enabling tasks to be processed in parallel.
|
||||
|
||||
|
@ -72,12 +72,14 @@ Remember that each pool requires Lane configuration, even if it contains just a
|
||||
|  | **ID:** lane_manager | A distinct ID to differentiate each Lane, especially when there are multiple. |
|
||||
---
|
||||
### Example: Using Lanes and Pools for Petty Cash Request Process
|
||||
|
||||
This example demonstrates the application of Lanes and pools in a BPMN diagram, specifically designed to handle a petty cash request process within an organization.
|
||||
|
||||
The process is structured around different tasks allocated to lane and pools, emphasizing role-based access and task execution.
|
||||
|
||||
|
||||
#### BPMN Diagram
|
||||
|
||||

|
||||
|
||||
**Process Flow:**
|
||||
@ -104,7 +106,8 @@ After approval, the workflow returns to the Requester Lane for final confirmatio
|
||||
Your petty cash request for {{amount}} has been approved by {{approved_by}}
|
||||
```
|
||||
|
||||
This message informs the requester of the approval status, including the approved amount and the name of the approver. After manual task, marks the end of the process.
|
||||
This message informs the requester of the approval status, including the approved amount and the name of the approver.
|
||||
After manual task, marks the end of the process.
|
||||
|
||||

|
||||
|
||||
@ -113,7 +116,8 @@ This BPMN diagram effectively uses Lanes and pools to structure a petty cash req
|
||||
|
||||
## Managing Approval Processes for Designated Group Users
|
||||
|
||||
One common requirement in workflow management is creating an approval process where any user can initiate a request, but only a designated group can grant approval. A specific challenge arises when the initiator is also a member of the approval group and should not approve their own request.
|
||||
One common requirement in workflow management is creating an approval process where any user can initiate a request, but only a designated group can grant approval.
|
||||
A specific challenge arises when the initiator is also a member of the approval group and should not approve their own request.
|
||||
|
||||
Let's consider a typical approval process where:
|
||||
|
||||
@ -156,6 +160,7 @@ Assigning lane owners correctly in BPMN workflows is important for ensuring that
|
||||
Lets discuss the methods for assigning lane owners:
|
||||
|
||||
### Methods to Assign Lane Owners:
|
||||
|
||||
1. **Using Script Tasks**:
|
||||
- Script tasks enable dynamic assignment of lane owners within the workflow. You can specify the lane owners directly in the workflow logic, ensuring that tasks are routed correctly based on current operational needs or specific conditions.
|
||||
- **Example**:
|
||||
@ -187,7 +192,9 @@ Lets discuss the methods for assigning lane owners:
|
||||
- This configuration shows how different user roles, such as admins and reviewers, are populated with specific users.
|
||||
|
||||
### Practical Application in a BPMN Model:
|
||||
In a typical BPMN workflow, lane assignments are crucial for managing who performs various tasks within the process. For example, a process might involve several departments or roles, each represented by a lane in the workflow model.
|
||||
|
||||
In a typical BPMN workflow, lane assignments are crucial for managing who performs various tasks within the process.
|
||||
For example, a process might involve several departments or roles, each represented by a lane in the workflow model.
|
||||
|
||||
- **Process Start**
|
||||
- The process begins and an initial script task sets the lane owners. Below BPMN model effectively demonstrates a comprehensive workflow leading to a dynamic assignment of reviewers in the "Script Task: Get Reviewers"
|
||||
|
@ -40,6 +40,7 @@ Editing Process Models locally is another perfectly good option, depending on yo
|
||||
* Each webhook call from the git remote will result in a git pull in the backend.
|
||||
|
||||
## Editing Process Models locally
|
||||
|
||||
Rather than editing your process models on a shared server, you can choose to make all process model changes locally.
|
||||
There are other guides for running SpiffWorkflow on your local computer, so follow the one that you prefer (docker compose or native).
|
||||
Then, when your process model repo is configured as you desire, you can run it in a read only mode on your shared environments like dev, staging, and prod.
|
||||
|
@ -379,7 +379,8 @@ can I resolve this?
|
||||
|
||||
**Answer:**
|
||||
|
||||
Yes, SpiffWorkflow is well-suited for integrating with external systems, including CRM platforms. SpiffWorkflow can interact with these systems through various mechanisms to enhance your workflow capabilities.
|
||||
Yes, SpiffWorkflow is well-suited for integrating with external systems, including CRM platforms.
|
||||
SpiffWorkflow can interact with these systems through various mechanisms to enhance your workflow capabilities.
|
||||
|
||||
**Key Integration Features:**
|
||||
|
||||
@ -394,7 +395,8 @@ Yes, SpiffWorkflow is well-suited for integrating with external systems, includi
|
||||
|
||||
**Example and Resources**:
|
||||
|
||||
For practical implementation, refer to examples and guides available on SpiffWorkflow’s documentation site, such as the [external services integration example](https://spiffdemo.org/process-groups/examples:2-in-depth:2-2-external-services). This resource provides detailed steps on how to set up and utilize Service Tasks for calling external APIs.
|
||||
For practical implementation, refer to examples and guides available on SpiffWorkflow’s documentation site, such as the [external services integration example](https://spiffdemo.org/process-groups/examples:2-in-depth:2-2-external-services).
|
||||
This resource provides detailed steps on how to set up and utilize Service Tasks for calling external APIs.
|
||||
By adjusting the return value of your script task's `execute` method and understanding the underlying mechanics of task state management in SpiffWorkflow, you can effectively control the flow of your workflow processes.
|
||||
|
||||
### **40: Event Design in SpiffWorkflow**
|
||||
|
@ -93,6 +93,7 @@ There are various reasons for terminating a process instance such as the instanc
|
||||
 |
|
||||
|
||||
## Reset a Process
|
||||
|
||||
> **Step 1: Find the active Process Instance**
|
||||
|
||||
> **Step 2: Navigate to the active User Task**
|
||||
@ -107,29 +108,32 @@ Ensure the status has changed from *user_input_required* to *suspended*
|
||||
|
||||
Only a previously completed section highlighted in grey can be chosen.
|
||||
|
||||
> **Step 5: Select 'View process instance at the time when this task was active.**
|
||||
> **Step 5: Select 'View process instance at the time when this task was active.
|
||||
**
|
||||
|
||||

|
||||
|
||||
> **Step 6: Observe the task once highlighted in grey should now be yellow.**
|
||||
> **Step 6: Observe the task once highlighted in grey should now be yellow.
|
||||
**
|
||||
|
||||
A previously completed section is now active and shown in yellow.
|
||||
|
||||
> **Step 7: Select 'Reset Process Here’ icon in the popup window.**
|
||||
> **Step 7: Select 'Reset Process Here’ icon in the popup window.
|
||||
**
|
||||
|
||||

|
||||
|
||||
> **Step 8: "Resume" process instance.**
|
||||
The process instance should be resumed by selecting the ‘Resume’ icon next to the Process Instance Id
|
||||
> **Step 8: "Resume" process instance.
|
||||
** The process instance should be resumed by selecting the ‘Resume’ icon next to the Process Instance Id
|
||||
|
||||

|
||||
|
||||
|
||||
> **Step 9: Refresh page**
|
||||
|
||||
Wait for Resume action to complete, this may take some time. Refresh the page to ensure it has transitioned to the next activity, replacing the current one.
|
||||
Wait for Resume action to complete, this may take some time.
|
||||
Refresh the page to ensure it has transitioned to the next activity, replacing the current one.
|
||||
|
||||
<aside>
|
||||
✅ From this point onward, the remaining part of the process can smoothly proceed.
|
||||
<aside> ✅ From this point onward, the remaining part of the process can smoothly proceed.
|
||||
|
||||
</aside>
|
||||
|
@ -5,7 +5,6 @@ It has API documentation available at `/v1.0/ui` generated by openapi ([example
|
||||
|
||||
## Layers
|
||||
|
||||
|
||||
```mermaid
|
||||
graph LR
|
||||
Controllers -- delegate work to --> Services
|
||||
@ -14,8 +13,9 @@ Models -- access --> DB[(DB)]
|
||||
```
|
||||
|
||||
### Controllers / routes
|
||||
|
||||
Requests come in through the controller layer.
|
||||
An example controller is src/spiffworkflow_backend/routes/health_controller.py
|
||||
An example controller is src/spiffworkflow_backend/routes/health_controller.py.
|
||||
In order to know which controller a request should go to, src/spiffworkflow_backend/api.yml is used by the connexion library.
|
||||
For example, in api.yml, a GET of /status is mapped to spiffworkflow_backend.routes.health_controller.status, where status is a function in health_controller.py.
|
||||
Controllers can use services (preferred) and models (allowed) to do their work, but they can never use another controller.
|
||||
@ -29,30 +29,36 @@ Services are allowed to use models, but models are not allowed to use Services.
|
||||
Services cannot use controllers.
|
||||
Keeping calls flowing in a single direction makes things easier to understand and avoids circular imports.
|
||||
|
||||
* We have a general notion that services should not call other services (or at
|
||||
least it must be calls in a single direction. if you call serviceB with serviceA,
|
||||
- We have a general notion that services should not call other services (or at
|
||||
least it must be calls in a single direction. If you call serviceB with serviceA,
|
||||
then serviceB cannot call serviceA)
|
||||
* Services should get called by routes.
|
||||
* We have a general notion that services can call models, but models should
|
||||
- Services should get called by routes.
|
||||
- We have a general notion that services can call models, but models should
|
||||
not call services (again, to avoid circular dependencies)
|
||||
|
||||
### Models
|
||||
|
||||
Models are how flask code interacts with the database
|
||||
|
||||
## Database
|
||||
|
||||
Backend uses the sqlalchemy library to connect to a required relational database.
|
||||
This database can be one of MySQL, PostgreSQL, or SQLite.
|
||||
All of these database engines are tested in CI.
|
||||
|
||||
## Serialization
|
||||
|
||||
When serializing models to json:
|
||||
* avoid json.dumps when you are creating json. use jsonify (a flask thing) instead
|
||||
* avoid marshmallow when possible and instead use @dataclass on your model
|
||||
* if you need to represent your object in a very custom way (the default dataclass columns are not working out), write a method called serialized on your model (this is used by the default serializer)
|
||||
|
||||
- avoid json.dumps when you are creating json. use jsonify (a flask thing) instead
|
||||
- avoid marshmallow when possible and instead use @dataclass on your model
|
||||
- if you need to represent your object in a very custom way (the default dataclass columns are not working out), write a method called serialized on your model (this is used by the default serializer)
|
||||
|
||||
## Exceptions
|
||||
|
||||
Do not define BlahError (exceptions) inside other classes.
|
||||
All exception classes should be defined in 1) one file, if there are not too many or 2) files that contain only other exception class definitions, again to avoid circular imports.
|
||||
|
||||
## Deployment
|
||||
|
||||
The gunicorn web server is used to serve the application in the default Dockerfile.
|
||||
|
@ -25,13 +25,13 @@ You can specify what data is required as well as how the form should look.
|
||||
We haven't deeply integrated this library, but it is used by the system that caches permission calls.
|
||||
## Layers
|
||||
|
||||
|
||||
```mermaid
|
||||
graph LR
|
||||
Routes -- delegate work to --> Services
|
||||
```
|
||||
|
||||
### Routes
|
||||
|
||||
When the browser sees a URL like /hithere, it will render a route component to handle the request.
|
||||
|
||||
|
||||
|
@ -1,6 +1,7 @@
|
||||
# Technical Overview
|
||||
|
||||
## Components
|
||||
|
||||
```mermaid
|
||||
graph TD
|
||||
subgraph spiff-arena
|
||||
|
@ -9,6 +9,7 @@ There are few options here:
|
||||
|
||||
Please pick the one that best fits your needs.
|
||||
## 1. Use the default make task
|
||||
|
||||
You can set up a full development environment for SpiffWorkflow like this:
|
||||
```sh
|
||||
git clone https://github.com/sartography/spiff-arena.git
|
||||
|
Loading…
x
Reference in New Issue
Block a user