16 Oktober 2014

[Workflow] Tentang Split Mode dan Join Mode

Bismillahirrahmaanirrahiim

Alhamdulillah, akhirnya tercerahkan juga... begini nih kalo belajar otodidak dan cuma riset dari source code... dan tidak ada teman diskusi yang bisa dicolek2 (sabun kalii) plus suka lupaa (males) untuk cari manual nya duluu... 

Jadi, ceritanya beberapa kali bikin workflow suka mentok, tiba2 transisi dari activity 1 ke activity lain tidak berjalan...

Lalu, ketika baca ini https://doc.odoo.com/trunk/server/workflows/ bagian Split Mode dan Join Mode.
tiba2 tercerahkan yuhuuuuuuu

Penjelasan Singkatnya begini:

SPLIT MODE adalah  kondisi ketika transisi pergi meninggalkan suatu node activity. (panah keluar dari node). Ada 3 mode di sini: OR, XOR dan AND.
OR = semua transisi akan dicek kondisinya. Semua kondisi bernilai True akan dijalankan.
Saya kasih contoh ya: ketika di Workflow Purchase Order maka ada 2 kondisi yang dicek, yang berhubungan dengan:
1. Pembuatan Incoming Shipment
2. Pembuatan Invoice

XOR = kondisi True pertama yang dipenuhi akan dijalankan. Yang lain tidak akan dicek kembali.
Contoh kembali di Purchase Order:
Jika barang merupakan barang stockable  (bukan service), maka akan pindah ke activity picking untuk melakukan pembuatan incoming Shipment
Jika barang bukan barang stockable (seperti service), maka pengiriman dianggap selesai dan masuk ke activity picking_done
Kondisi XOR adalah kondisi default, jadi kalau gak di define di xml otomatis akan pakai kondisi XOR.

AND = semua kondisi harus bernilai True sebelum bisa menuju activity tujuan.
Nah kalau yang ini saya belum pernah nemu nih contohnya.. belum kepikiran jugaa... kalau ada ide, monggo disampaikan ya :)
Karena saya pikir2 kalau memang harus AND juga kan bisa digabungkan dalam suatu function condition ya..

Selanjutnyaa...

JOIN MODE adalah kondisi ketika transisi menuju suatu node (panah menuju node). Di sini hanya ada 2 mode yaitu XOR dan AND
Penjelasan XOR dan AND sama aja kok dengan split. tapi kenapa gak ada OR ya? yaa namanya juga JOIN ke suatu node. jadi tujuannya cuma 1 kan.. 

Lalu gimana penerapannya?
Kalau mau coba2 edit dari workflownya, bisa click suatu node activity, maka  akan muncul form dengan field Split Mode dan JOin Mode yang bisa dipilih.
Kalau mau dari xml bisa lihat contoh berikut:

        <record id="purchase.act_router" model="workflow.activity">
            <field name="wkf_id" ref="purchase.purchase_order"/>
            <field name="name">router</field>
            <field name="split_mode">OR</field>            <field name="kind">function</field>
            <field name="join_mode">XOR</field>            <field name="action">wkf_approve_order()</field>
        </record>

Kebeulan contohnya ada di node activity act_router di workflow purchase.
Aslinya adalah:

        <record id="act_router" model="workflow.activity">
            <field name="wkf_id" ref="purchase_order"/>
            <field name="name">router</field>
            <field name="split_mode">OR</field>
            <field name="kind">function</field>
            <field name="join_mode">AND</field>            <field name="action">wkf_approve_order()</field>
        </record>

Saya bold bagian join_mode yang membuat kekacauan selama ini :D
dipakai AND, yang artinya jika semua kondisi transition terpenuhi, baru bisa menuji activity router.

Oke aslinya memang yang menuju router hanya 1 transisi,
tapi ketika saya mau menambahkan 1 lagi transisi menjadi 2 transisi, akhirnya router ini tidak pernah dicapai, karena tidak mungkin 2 kondisi tersebut terpenuhi bersamaan?
Bisa cek contoh workflow yang saya buat di sini


Ada 2 transisi menuju router (JOIN MODE)
2 transisi itu berasal dari 2 activity yang berbeda setelah melalui serangkaian transisi yang berbeda untuk sampai ke smcus_case1 dan approve2 ..
Jika yang dipakai di JOIN MODE adalah AND yaa gak akan sampai ke router. karena tidak mungkin ke-2nya bernilai True. maka yang dipakai adalah XOR, karena itu saya replace acivity router dengan mengganti menjadi XOR

Sedangkan untuk SPLIT MODE yang dipakai sudah benar yaitu OR, karena harus mencek 4 kondisi yang berhubungan dengan picking dan invoice, seperti penjelasan saya sebelumnya.

Jadi, begitu deh...

Semoga bisa bermanfaat .

Happy coding ^.^


Tidak ada komentar:

Posting Komentar