Code revision
This commit is contained in:
@@ -0,0 +1,210 @@
|
||||
# Workflow-Based Android Application -- Concept & Database Design
|
||||
|
||||
## Overview
|
||||
|
||||
This document describes the core idea and database structure for a
|
||||
workflow-based Android application.
|
||||
|
||||
A **workflow** consists of multiple **steps**. Each step: - Executes a
|
||||
function - Receives input data - Produces a result - Determines the next
|
||||
step based on the result
|
||||
|
||||
Workflows can be triggered via UI elements such as buttons.
|
||||
|
||||
------------------------------------------------------------------------
|
||||
|
||||
## Core Concept
|
||||
|
||||
### Workflow Execution Flow
|
||||
|
||||
1. A workflow is started (e.g., by pressing a button)
|
||||
2. The first step is executed
|
||||
3. The step calls a function
|
||||
4. The function returns a result
|
||||
5. Based on the result, the next step is determined
|
||||
6. The process continues until no next step is defined
|
||||
|
||||
------------------------------------------------------------------------
|
||||
|
||||
## Context Handling
|
||||
|
||||
A shared **context object** is used to pass data between steps.
|
||||
|
||||
Example: - Step 1 stores selected contact → `SelectedContact` - Step 4
|
||||
reads `SelectedContact`
|
||||
|
||||
------------------------------------------------------------------------
|
||||
|
||||
## Database Schema
|
||||
|
||||
### 1. workflows
|
||||
|
||||
Stores workflow definitions.
|
||||
|
||||
``` sql
|
||||
CREATE TABLE workflows (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
name TEXT NOT NULL,
|
||||
description TEXT,
|
||||
start_step_id INTEGER,
|
||||
is_active INTEGER NOT NULL DEFAULT 1
|
||||
);
|
||||
```
|
||||
|
||||
------------------------------------------------------------------------
|
||||
|
||||
### 2. workflow_steps
|
||||
|
||||
Defines steps within a workflow.
|
||||
|
||||
``` sql
|
||||
CREATE TABLE workflow_steps (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
workflow_id INTEGER NOT NULL,
|
||||
step_key TEXT NOT NULL,
|
||||
name TEXT NOT NULL,
|
||||
function_key TEXT NOT NULL,
|
||||
input_mapping_json TEXT,
|
||||
parameter_json TEXT,
|
||||
output_key TEXT,
|
||||
sort_order INTEGER NOT NULL DEFAULT 0,
|
||||
is_active INTEGER NOT NULL DEFAULT 1,
|
||||
|
||||
FOREIGN KEY (workflow_id) REFERENCES workflows(id)
|
||||
);
|
||||
```
|
||||
|
||||
------------------------------------------------------------------------
|
||||
|
||||
### 3. workflow_transitions
|
||||
|
||||
Defines transitions between steps.
|
||||
|
||||
``` sql
|
||||
CREATE TABLE workflow_transitions (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
workflow_id INTEGER NOT NULL,
|
||||
from_step_id INTEGER NOT NULL,
|
||||
result_code TEXT NOT NULL,
|
||||
to_step_id INTEGER,
|
||||
is_default INTEGER NOT NULL DEFAULT 0,
|
||||
|
||||
FOREIGN KEY (workflow_id) REFERENCES workflows(id),
|
||||
FOREIGN KEY (from_step_id) REFERENCES workflow_steps(id),
|
||||
FOREIGN KEY (to_step_id) REFERENCES workflow_steps(id)
|
||||
);
|
||||
```
|
||||
|
||||
------------------------------------------------------------------------
|
||||
|
||||
### 4. workflow_functions
|
||||
|
||||
Describes available executable functions.
|
||||
|
||||
``` sql
|
||||
CREATE TABLE workflow_functions (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
function_key TEXT NOT NULL UNIQUE,
|
||||
name TEXT NOT NULL,
|
||||
description TEXT,
|
||||
input_schema_json TEXT,
|
||||
parameter_schema_json TEXT,
|
||||
output_schema_json TEXT,
|
||||
is_active INTEGER NOT NULL DEFAULT 1
|
||||
);
|
||||
```
|
||||
|
||||
------------------------------------------------------------------------
|
||||
|
||||
### 5. workflow_buttons
|
||||
|
||||
Defines UI triggers for workflows.
|
||||
|
||||
``` sql
|
||||
CREATE TABLE workflow_buttons (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
caption TEXT NOT NULL,
|
||||
icon TEXT,
|
||||
workflow_id INTEGER NOT NULL,
|
||||
group_name TEXT,
|
||||
sort_order INTEGER NOT NULL DEFAULT 0,
|
||||
is_active INTEGER NOT NULL DEFAULT 1,
|
||||
|
||||
FOREIGN KEY (workflow_id) REFERENCES workflows(id)
|
||||
);
|
||||
```
|
||||
|
||||
------------------------------------------------------------------------
|
||||
|
||||
### 6. workflow_runs
|
||||
|
||||
Tracks workflow executions.
|
||||
|
||||
``` sql
|
||||
CREATE TABLE workflow_runs (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
workflow_id INTEGER NOT NULL,
|
||||
started_at TEXT NOT NULL,
|
||||
finished_at TEXT,
|
||||
status TEXT NOT NULL,
|
||||
context_json TEXT,
|
||||
|
||||
FOREIGN KEY (workflow_id) REFERENCES workflows(id)
|
||||
);
|
||||
```
|
||||
|
||||
------------------------------------------------------------------------
|
||||
|
||||
### 7. workflow_run_steps
|
||||
|
||||
Tracks execution of each step.
|
||||
|
||||
``` sql
|
||||
CREATE TABLE workflow_run_steps (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
workflow_run_id INTEGER NOT NULL,
|
||||
step_id INTEGER NOT NULL,
|
||||
started_at TEXT NOT NULL,
|
||||
finished_at TEXT,
|
||||
status TEXT NOT NULL,
|
||||
input_json TEXT,
|
||||
output_json TEXT,
|
||||
result_code TEXT,
|
||||
error_message TEXT,
|
||||
|
||||
FOREIGN KEY (workflow_run_id) REFERENCES workflow_runs(id),
|
||||
FOREIGN KEY (step_id) REFERENCES workflow_steps(id)
|
||||
);
|
||||
```
|
||||
|
||||
------------------------------------------------------------------------
|
||||
|
||||
## Example: Call Workflow
|
||||
|
||||
### Steps
|
||||
|
||||
1. Select contact
|
||||
2. If contact is "Peter" → ask confirmation
|
||||
3. If confirmed → call
|
||||
4. Otherwise → end
|
||||
|
||||
### Transitions
|
||||
|
||||
From Step Result Code To Step
|
||||
---------------- ------------- ---------
|
||||
Select Contact PETER Ask
|
||||
Select Contact NOT_PETER Call
|
||||
Ask YES Call
|
||||
Ask NO End
|
||||
|
||||
------------------------------------------------------------------------
|
||||
|
||||
## Summary
|
||||
|
||||
Key components: - workflows - workflow_steps - workflow_transitions -
|
||||
workflow_functions - workflow_buttons
|
||||
|
||||
Optional but recommended: - workflow_runs - workflow_run_steps
|
||||
|
||||
This structure enables: - Dynamic workflows - Flexible branching logic -
|
||||
Reusable functions - UI-driven execution
|
||||
Reference in New Issue
Block a user