Workflow dengan Windows Workflow Foundation

Soeleman 28 Februari 2017

Workflow dengan Windows Workflow Foundation

Console

Pada kesempatan ini kita akan menggunakan projek console sebagai host dari Workflow Flowchart.

Reference

Penting kita menambahkan pada references, System.Activities di projek. Terutama karena kita akan bekerja dengan Windows Workflow Foundation (WWF).

< VB.NET >

alt text

< C# >

alt text

Activity

Kita akan mengunakan 'visual' dari WWF. Dan kita akan membuat/menambahkan Activity dengan pilihan seperti pada gambar dibawah.

< VB.NET >

alt text

< C# >

alt text

YesNo Activity

Activity yang akan kita buat ini untuk mendukung flowchart yang akan di buat. Fungsi YesNoActivity ini sebagai input validator. Kenapa perlu ada validator? Karena kita hanya mengharapkan user hanya memberikan jawaban Y('Y' atau 'y') atau N('N' atau 'n'). Di luar itu kita akan 'memaksa' user untuk memberikan jawaban seperti yang diharapkan.

Bisa saja ditulis dalam bentuk kode, hanya saja ditulisan ini kita akan buat itu sebagai flowchart. Boleh dibilang ini sebagai sub-flowchart dari flowchart utama. Lagi pula kita akan menggunakan ini beberapa kali, jadi lebih baik kita buat flowchart terpisah.

Sekarang kita Add Activity seperti pada gambar di atas. Kita beri nama YesNoActivity.xaml.

Flowchart

Saat ini kita akan menggunakan Workflow Flowchart Type. Caranya mudah, cukup di-drag flowchart component ke dalam Activity Page. Tips: Drag-nya sampai ke tulisan di tengah.

Setelah itu kita akan melihat 'box' dalam YesNoActivity.xaml. Type Flowchart ini memiliki tanda Start sebagai awalan, seperti pada gambar di bawah.

alt text

Flowchart Variable

Dalam process yang akan terjadi, kita memerlukan sebuah variable untuk menyimpan informasi. Variable itu ber-type String dengan nama YesNoAnswer.

Menambahkan variable di flowchart cukup klik tulisan Variables yang ada di kiri bawah. Dan jangan lupa agar scope-nya sesuai dengan flowchart-nya, terlihat dengan gambar panah.

alt text

Flowchart Argument

Di karenakan ini merupakan Sub-Workflow, maka perlu ada cara untuk memberikan informasi ke Main-Workflow. Salah satu caranya dengan membuat Argument.

Hampir sama dengan variable, bedanya diklik tulisan Arguments yang berada disebelah Variables. Di sini kita buat argument ber-Argument-type String dan Direction In/Out dengan nama TheAnswer.

alt text

WriteLine Activity

Kita perlu memberikan informasi ke user. Maka kita drag WriteLine dan kita isi dengan "Enter answer (Y/N):". Dengan begitu kita bisa memberitahukan agar jawabannya hanya Y/N. Dan jangan lupa tarik panah dari Start ke WriteLine ini.

alt text

Assign Activity

Assign biasanya di gunakan untuk menulis kedalam sebuah variable yang ada dalam scope dari Workflow. Tapi kita bisa gunakan ini sebagai Input dengan menggunakan Expression sebagai Value. Kita bisa melihat lebih jelas dari Properties Windows, seperti layaknya control pada Winform, WebForm atau Xaml-based.

Sama seperti WriteLine, kita drag kemudian tarik panah dari WriteLine ke Assign. Pada To masukkan flowchart-variable(YesNoAnswer). Dan untuk Value kita isi dengan Expression Console.ReadLine().ToUpper().

alt text

FlowSwitch

Kalau kita ingin melakukan kondisi untuk multi-value maka kita perlu FlowSwitch activity. Caranya sama seperti lainnya, di-drag ke flowchart kemudian tarik panah dari Assign. Setelah itu akan muncul dialog untuk type, untuk keperluan kita cukup dengan Int32.

alt text

Seperti halnya dalam statement switch kita memasukkan state untuk di evaluasi. State di sini adalah Expression-nya, seperti pada gambar dibawah. Tujuan kode ini adalah mendapatkan nilai Int32 dari Char pertama.

< VB.NET >

alt text

< C# >

alt text

FlowSwitch Default

Sama halnya dengan statement Switch, kita memiliki default. Pengertiannya, bila nilai Int32 tidak ada yang bisa di evaluasi maka switch akan memilih default. Di sini kita tambahkan WriteLine dengan pesan ke user. Dan apabila kita tarik panah dari FlowSwitch ke WriteLine, maka akan muncul default. Kita bisa rubah ini di Property dari panah itu, tapi untuk saat ini biarkan seperti itu.

alt text

FlowSwitch Values

Karena hasil evaluasi akan mengarah yang sama, maka kita cukup menambahkan WriteLine.

alt text

Saatnya kita membuat 'Case' untuk di evaluasi. Dengan menarik panah dari FlowSwitch ke WriteLine, kita akan mendapati property Case nilainya 0. Nilai Int32 dari karakter N adalah 78, maka kita ganti itu menjadi 78. Perhatikan panah merah pada gambar dibawah. Bila kita mengganti nilai property Case, maka itu akan terlihat garis. Dan nilai itu pula yang akan dievaluasi oleh FlowSwitch.

alt text

Ini sama seperti diatas untuk 78. Bedanya ini untuk nilai 89, yang berarti itu karakter Y. Dengan begitu FlowSwitch hanya mengarah kesini apabila hasil evaluasi mendapatkan nilai 78 atau 89, di luar itu akan menuju default.

alt text

Assign Argument

Disini kita mengirimkan hasilnya ke flowchart-argument(TheAnswer). Juga yang kita kirim hanya satu karakter dan karakter pertama.

alt text

Flowchart Lengkap

Akhirnya selesai juga Flowchart ini. Hasilnya juga menarik dan mudah di baca bukan. Walaupun tidak sepenuhnya Visual Programming, tampaknya ada bibit-bibit ke arah sana. :)

alt text

Engineering Activity

Tambahkan activity baru dengan nama EngineeringActivty.xaml pada solusi kita. Dan kita akan membuat Flowchart Engineering.

_Seperti apa sich Engineering Flowchart?

alt text

Tentu ini hanya lelucon, tapi cukup menarik untuk di buatkan Workflow-nya. Masih tertarik? Mari kita mulai!

Flowchart Engineering

Lakukan seperti Flowchart YesNoActivity dan di sini kita perlu hanya sebuah flowchar-variable saja. Variable itu ber-type String dengan nama Answer.

alt text

YesNoActivity

Setelah flowchart siap. Kita tambahkan WriteLine dan YesNoActivity. YesNoActivity muncul di Toolbox setelah kita sukses mengkompile solusi. Seperti yang di lihat pada gambar. Namespace Dikoding akan muncul sebagai group-nya.

alt text

Masih ingat flowchart-argument yang ada di YesNoActivity. Di sini kita menggunakan dan menghubungkan ke dua flowchart, dengan memasukkan flowchart-variable(Answer) ke property TheAnswer.

alt text

FlowDecision

Sekarang kita tambahkan FlowDecision. Activity ini cocok dengan kebutuhan kita yang menghendaki hasilnya Yes atau No. Pada property Condition kita masukkan expression seperti pada gambar. Dan juga untuk label-nya kita buat Yes dan No.

< VB.NET >

alt text

< C# >

alt text

Dengan menambah WriteLine di kedua sisi, maka kita akan melihat lebih jelas kenapa kita perlu merubah label.

alt text

Flowchart yang kita buat adalah dua tingkat, jadi sekarang kita menggunakan YesNoActivity kembali untuk mengambil input. Dan kembali dihubungkan flowchart-variable(Answer ke property TheAnswer untuk ke dua YesNoActivity.

alt text

FlowDecision Duct Tape

Kita fokus dulu untuk membuat flow Duct Tape. Lakukan seperti yang kita lakukan untuk FlowDecision diatas.

< VB.NET >

alt text

< C# >

alt text

Lalu kita tambahkan WriteLine pada kedua sisinya dengan Text yang sesuai.

alt text

FlowDecision WD-40

Sama halnya disini ini. Lakukan yang sama seperti pada FlowDecision sebelumnya.

< VB.NET >

alt text

< C# >

alt text

Setelah itu tentu kita tambahkan WriteLine pada kedua sisinya dengan Text-nya.

alt text

Flowchart Final

Ini lah hasil dari Workflow yang kita buat. Dan tampaknya mirip dengan Engineering Flowchart dari kayu seperti gambar diatas.

alt text

Test Workflow

Untuk menjalankan Workflow diatas, cukup menggunakan class WorkflowInvoker. Dan di-method Invoke, kita taruh object EngineeringActivity -- Ini merupakan class representative dari EngineeringActivity.xaml.

< VB.NET >

alt text

< C# >

alt text

Hasil Test

Karena ada beberapa kondisi yang mungkin terjadi. Oleh karena itu kita akan lihat empat test kombinasi 'kondisi'. Hasilnya akan seperti dibawah.

Dengan kombinasi Yes + Yes

1 Does it move? Y 2 Should It? Y 3 Hasil-nya: No Problem!

alt text

Dengan kombinasi Yes + No

1 Does it move? Y 2 Should It? N 3 Hasil-nya: Duct Tape It!

alt text

Dengan kombinasi No + Yes

1 Does it move? N 2 Should It? Y 3 Hasil-nya: Spray with WD-40

alt text

Dengan kombinasi No + No

1 Does it move? N 2 Should It? N 3 Hasil-nya: No Problem!

alt text

Penutup

Visual Programming memang masih jauh dari kenyataan ala IronMan atau si-fi lainnya. Kendala User Interface(UI) yang terbatas untuk mengexpresikan pemikiran dan logic masih menjadi tantangan untuk itu. Walaupun WWF berusaha menjembatani antara user dengan developer tetap jaraknya masih cukup jauh. Tapi setidaknya kita bisa melihat 'logic' secara visual, yang lebih mudah di bandingkan 'list' atau 'kode'.

Referensi

Perhatian! Code yang ditampilkan dalam tulisan ini merupakan ilustrasi dari yang ingin dipaparkan dan bukan production ready code. Sudah banyak kejadian karena asal meng-copy-and-paste tanpa mengerti code yang diambil itu ke dalam production. Selain itu perlu ada tambahan code dan test sebelum siap untuk digunakan secara utuh.