Sebuah engine untuk berkomunikasi dengan diagram BPMN melalui Camunda REST API untuk membuat aplikasi 2 minggu jadi.
composer require laravolt/workflow
# Wajib
CAMUNDA_API_URL=https://<camunda-host>/rest
# Opsional
CAMUNDA_API_TENANT_ID=
CAMUNDA_API_USER=
CAMUNDA_API_PASSWORD=
- Buat sebuah file BPMN
- Deploy ke server Camunda
- Jalankan perintah
php artisan workflow:make
- Sebuah file
config/workflow-modules/<module.php>
akan digenerate
<?php
return [
// sesuai Process Definition Key dari Camunda
'process_definition_key' => 'registration',
// Judul modul, akan ditampilkan di tiap halaman
'label' => 'Registrasi',
// Definisi tabel dan query untuk menampilkan data
'table' => \App\TableView\SomeModuleTableView::class,
// Satu process BPMN bisa memiliki banyak Task Definition Key
// Dibawah ini adalah whitelist task-task yang akan ditampilkan ketika melihat detail
// sebuah Process Instance berdasar Module Key di atas
'whitelist' => [
[
'label' => 'A Task Label',
'task' => 'task_name_1',
// hanya tampilkan field-field berikut ini
'only' => ['field_1', 'field_2'],
// mutators digunakan untuk mengubah value dari sebuah field yang akan disimpan
'mutators' => [
'invoice_no' => [
\App\Services\InvoiceNumberGenerator::class,
],
],
],
],
];
Buat sebuah Table dengan stuktur sebagai berikut:
<?php
declare(strict_types=1);
namespace App\TableView;
use Illuminate\Support\Facades\DB;
use Laravolt\Suitable\Columns\Numbering;
use Laravolt\Suitable\Columns\Text;
use Laravolt\Workflow\Tables\Table;
class SomeModuleTableView extends Table
{
// query untuk menampilkan data, bisa pakai Query Builder, bisa pakai Eloquent
public function source($sqlOnly = false)
{
return DB::table('foo')->paginate();
}
// definisi kolom, sesuai https://laravolt.dev/docs/suitable/
protected function columns()
{
return [
Numbering::make('No'),
Text::make('process_instance_id'),
// dan kolom lainnya sesuai kebutuhan...
// CRUD buttons
$this->buttons()
];
}
}
Buat sebuah class dengan struktur:
class InvoiceNumberGenerator
{
public function execute()
{
// do logic
return $generatedInvoiceNumber;
}
}