Setelah berhasil mempersiapkan environtment dev untuk idempiere 5.1 maka selanjutnya saya mencoba untuk melakukan development plug-in. Namun saya tidak membuat dari nol, karena untuk konsepnya saya masih meraba-raba. Saya coba ambil dari plug-in yang telah ada. Saya pilih coba mengembangkan Plugin: Create from requisition - iDempiere en. Plug in ini berguna untuk melakukan generate PO line dari requisition line. Default di iDempiere fungsi untuk generate PO langsung melalu menu Create PO from Requisition (Process ID-337) - iDempiere en. Namun saya rasa kurang fleksibel.
Langkahnya:
1. Download dahulu source codenya disini. Kemudian di extract ke folder yang di inginkan.
2. Buka menu File -> Open Project From File System
3. Pilih directory tempat folder tadi diekstrak, dan tekan finish. Maka akan muncul project baru seperti dibawah ini.
4. Terlihat JRE yang dipakai adalah Java 1.6 (Java 6). Hal ini karena plug-in tersebut dibuat di iDempiere versi 2.0 yang masih menggunakan Java 6. Apakah bermasalah? Saya juga belum tahu, tapi amannya saya ganti versi java nya difile MANIFEST.MF (Klik 2x pada file tersebut)
5. Pada tab Overview (Manifest.fm) ubah execution environment menjadi Java 8 seperti gambar dibawah.
6. Pada tab Dependencies terlihat ada error. Hal ini terjadi karena saat ini library yang digunakan berganti nama. Maka lakukan remove kemudian add lagi dengan memilih zk (8.0.2.2)
7. Pilih ZK 8.0.2.2 dan Zul (8.0.2.2) kemudian tekan OK. Di source aslinya hanya ada zkoss library. Di versi idempeire 5.1 library tersebut dipisah menjadi ZK dan Zul.
8. Error akan hilang setelah proses refresh dan build (jika build manual)
9. Setelah error hilang, setting Run Configurations dan pastikan plugin muncul dipilihan. Centang sehingga saat run plug-in akan terload dan bisa digunakan.
10. Sebelumnya, kita harus melakukan setting pada Application Dictionary iDempiere yaitu dengan menambah tombol pada tabel C_Order dan window Purchase Order. Jalankan query dibawah ini untuk mudahnya:
ALTER TABLE adempiere.c_orderADD COLUMN createfrom CHAR(1) ;--ColumnmINSERT INTO "ad_column" ("ad_column_id", "ad_client_id", "ad_org_id", "isactive", "created", "updated", "createdby", "updatedby", "name", "description", "help", "version", "entitytype", "columnname", "ad_table_id", "ad_reference_id", "ad_reference_value_id", "ad_val_rule_id", "fieldlength", "defaultvalue", "iskey", "isparent", "ismandatory", "isupdateable", "readonlylogic", "isidentifier", "seqno", "istranslated", "isencrypted", "callout", "vformat", "valuemin", "valuemax", "isselectioncolumn", "ad_element_id", "ad_process_id", "issyncdatabase", "isalwaysupdateable", "columnsql", "mandatorylogic", "infofactoryclass", "isautocomplete", "isallowlogging", "formatpattern", "ad_column_uu", "isallowcopy", "seqnoselection", "istoolbarbutton", "issecure", "ad_chart_id", "fkconstraintname", "fkconstrainttype", "pa_dashboardcontent_id") VALUES (912001, 0, 0, 'Y', '2021-08-14 20:52:31.914', '2021-08-14 20:52:31.914', 0, 0, 'Create lines from', 'Process which will generate a new document lines based on an existing document', 'The Create From process will create a new document based on information in an existing document selected by the user.', 0, 'U', 'CreateFrom', 259, 28, NULL, NULL, 1, NULL, 'N', 'N', 'N', 'Y', NULL, 'N', 0, 'N', 'N', NULL, NULL, NULL, NULL, 'N', 1490, NULL, 'N', 'N', NULL, NULL, NULL, 'N', 'Y', NULL, 'fc189bcf-2b48-4969-818c-2341f6d76749', 'Y', 0, 'Y', 'N', NULL, NULL, 'N', NULL);----FieldINSERT INTO "ad_field" ("ad_field_id", "ad_client_id", "ad_org_id", "isactive", "created", "createdby", "updated", "updatedby", "name", "description", "help", "iscentrallymaintained", "ad_tab_id", "ad_column_id", "ad_fieldgroup_id", "isdisplayed", "displaylogic", "displaylength", "isreadonly", "seqno", "sortno", "issameline", "isheading", "isfieldonly", "isencrypted", "entitytype", "obscuretype", "ad_reference_id", "ismandatory", "included_tab_id", "defaultvalue", "ad_reference_value_id", "ad_val_rule_id", "infofactoryclass", "ad_field_uu", "isallowcopy", "seqnogrid", "isdisplayedgrid", "xposition", "numlines", "columnspan", "isquickentry", "isupdateable", "isalwaysupdateable", "mandatorylogic", "readonlylogic", "istoolbarbutton", "isadvancedfield", "isdefaultfocus", "vformat", "ad_labelstyle_id", "ad_fieldstyle_id") VALUES (912001, 0, 0, 'Y', '2021-08-14 20:55:13.451', 0, '2021-08-14 20:55:13.451', 0, 'Create lines from', 'Process which will generate a new document lines based on an existing document', 'The Create From process will create a new document based on information in an existing document selected by the user.', 'Y', 294, 912001, NULL, 'Y', NULL, 0, 'N', 510, 0, 'N', 'N', 'N', 'N', 'U', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'd99471ce-72a0-418d-8809-861d1d3a8a72', NULL, 510, 'Y', 1, 1, 1, 'N', NULL, NULL, NULL, NULL, NULL, 'N', 'N', NULL, NULL, NULL);
11. Buka form PO, maka akan muncul tombol create lines.
Penjelasan:
Fungsi action button di iDempiere ada di class org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/AbstractADWindowContent.java
Di class tersebut, ketika terdapat button dengan nama columnnya "CreateForm" maka akan memanggil fungsi WCreateFromFactory.create(GridTab tab). Fungsi itu akan melist semua object yang memiliki interface ICreateFromFactory baik dicore iDempiere ataupun di plug-in nya. Di plug-in yang kita coba terdapat class FaaCreateFromFactory yang mengimplementasikan ICreateFromFactory. Kebetulan Tab Purchase Order standartnya tidak ada kolom CreateFrom, jadi cukup menambah kolom CreateFrom akan dapat memanggil form dari plug-in.
Jika kolom sudah ada, maka pendekatannya bisa menggunakan membuat process yang memanggil form custom.
Tidak ada komentar:
Posting Komentar