Skip to content

Latest commit

 

History

History
131 lines (89 loc) · 2.44 KB

README.md

File metadata and controls

131 lines (89 loc) · 2.44 KB

Laravolt Workflow Engine

Sebuah engine untuk berkomunikasi dengan diagram BPMN melalui Camunda REST API untuk membuat aplikasi 2 minggu jadi.

Instalasi

composer require laravolt/workflow

Konfigurasi REST API

# Wajib
CAMUNDA_API_URL=https://<camunda-host>/rest

# Opsional
CAMUNDA_API_TENANT_ID=
CAMUNDA_API_USER=
CAMUNDA_API_PASSWORD=

Membuat Modul Baru

  1. Buat sebuah file BPMN
  2. Deploy ke server Camunda
  3. Jalankan perintah php artisan workflow:make
  4. Sebuah file config/workflow-modules/<module.php> akan digenerate

Konfigurasi Modul

<?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,
        ],
      ],
    ],
  ],
];

Menampilkan Data

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()
    ];
  }
}

Mutator

Buat sebuah class dengan struktur:

class InvoiceNumberGenerator
{
  public function execute()
  {
   	// do logic
    return $generatedInvoiceNumber;
  }
}