Form API
Di TechMaju, objek frm menyediakan berbagai metode untuk berinteraksi dengan formulir. Metode-metode ini penting untuk mengatur value, menyegarkan formulir, menangani peristiwa, dan banyak lagi. Berikut adalah daftar rinci metode yang sering digunakan beserta deskripsi dan contohnya.
Mengatur Value
Metode | Deskripsi |
|---|---|
| Atur value dari sebuah field. Memicu peristiwa perubahan field. |
// atur satu value
frm.set_value('description', 'Deskripsi Baru')
// atur beberapa value sekaligus
frm.set_value({
status: 'Open',
description: 'Deskripsi Baru'
})
// mengembalikan sebuah janji
frm.set_value('description', 'Deskripsi Baru')
.then(() => {
// lakukan sesuatu setelah value diatur
})Menyegarkan dan Menyimpan
Metode | Deskripsi | Contoh |
|---|---|---|
| Menyegarkan formulir dengan value terbaru dari server. | |
| Memicu penyimpanan formulir, dengan opsi untuk Submit, Cancel, dan Update. | |
Mengaktifkan/Nonaktifkan Penyimpanan
Metode | Deskripsi |
|---|---|
| Aktifkan tombol Save. |
| Nonaktifkan tombol Save. |
if (frappe.user_roles.includes('Custom Role')) {
frm.enable_save();
} else {
frm.disable_save();
}Mengirim Dokumen melalui Email
Metode | Deskripsi |
|---|---|
| Buka dialog Email untuk formulir ini. |
// buka dialog email
frm.email_doc();
// buka dialog email dengan beberapa pesan
frm.email_doc(`Hello ${frm.doc.customer_name}`);Memuat Ulang dan Menyegarkan Field
Metode | Deskripsi | Contoh |
|---|---|---|
| Muat ulang dokumen dengan value terbaru dari server dan panggil | |
| Menyegarkan field tertentu dan dependensinya. | |
Status Formulir dan Pemeriksaan
Metode | Deskripsi | Contoh |
|---|---|---|
| Periksa apakah value formulir telah diubah dan belum disimpan. | |
| Atur formulir sebagai "dirty". | |
| Periksa apakah formulir baru dan belum disimpan. | |
Mengatur Intro Text
Metode | Deskripsi |
|---|---|
| Atur teks pengantar di bagian atas formulir dengan warna opsional. |
if (!frm.doc.description) {
frm.set_intro('Harap atur value deskripsi', 'biru');
}
Tombol Khusus
Metode | Deskripsi | Contoh |
|---|---|---|
| Tambahkan tombol khusus di toolbar bagian dalam. | |
| Ubah jenis tombol khusus berdasarkan label. | |
| Hapus tombol khusus berdasarkan label. | |
| Hapus semua tombol khusus dari toolbar bagian dalam. | |
Properti DocField
Metode | Deskripsi |
|---|---|
| Ubah properti DocField dari sebuah field dan menyegarkannya. |
// ubah tipe field dari field deskripsi menjadi Teks
frm.set_df_property('description', 'fieldtype', 'Text');
// atur opsi dari field status untuk hanya berisi [Open, Closed]
frm.set_df_property('status', 'options', ['Open', 'Closed'])
// atur sebuah field sebagai wajib
frm.set_df_property('title', 'reqd', 1)
// atur sebuah field sebagai hanya-baca
frm.set_df_property('status', 'read_only', 1)Toggle Field
Metode | Deskripsi | Contoh |
|---|---|---|
| Toggle sebuah field atau daftar field menjadi hanya-baca berdasarkan kondisi. | |
| Toggle sebuah field atau daftar field menjadi wajib berdasarkan kondisi. | |
| Tampilkan/sembunyikan sebuah field atau daftar field berdasarkan kondisi. | |
Mengatur Query
Metode | Deskripsi |
|---|---|
| Terapkan filter pada field Link untuk menampilkan catatan terbatas untuk dipilih. Anda harus memanggil |
// hanya tampilkan pelanggan yang wilayahnya diatur ke India
frm.set_query('customer', () => {
return {
filters: {
territory: 'India'
}
}
})
// tampilkan pelanggan yang wilayahnya salah satu dari India, Nepal, Jepang
frm.set_query('customer', () => {
return {
filters: {
territory: ['in', ['India', 'Nepal', 'Japan']]
}
}
})
// atur filter untuk field Link item_code dalam
// field items yang merupakan Child Table
frm.set_query('item_code', 'items', () => {
return {
filters: {
item_group: 'Products'
}
}
})Anda juga dapat mengganti metode filter dan menyediakan metode khusus Anda sendiri di server. Cukup atur query ke jalur modul dari metode Python Anda.
// ubah metode filter dengan memberikan metode khusus
frm.set_query('fieldname', () => {
return {
query: 'dotted.path.to.custom.custom_query',
filters: {
field1: 'value1'
}
}
})# signature metode python
def custom_query(doctype, txt, searchfield, start, page_len, filters):
# logika Anda
return filtered_listOperasi Child Table
Metode | Deskripsi | Contoh |
|---|---|---|
| Tambahkan baris dengan value ke field Tabel. | |
Panggilan Server
Metode | Deskripsi |
|---|---|
| Panggil metode kontroler server-side dengan argumen. Saat mengakses metode server-side menggunakan |
class ToDo(Document):
@frappe.whitelist()
def get_linked_doc(self, throw_if_missing=False):
if not frappe.db.exists(self.reference_type, self.reference_name):
if throw_if_missing:
frappe.throw('Dokumen terkait tidak ditemukan')
return frappe.get_doc(self.reference_type, self.reference_name)Anda dapat memanggilnya dari klien menggunakan frm.call.
frm.call('get_linked_doc', { throw_if_missing: true })
.then(r => {
if (r.message) {
let linked_doc = r.message;
// lakukan sesuatu dengan linked_doc
}
})Memicu Peristiwa
Metode | Deskripsi |
|---|---|
| Memicu setiap peristiwa formulir secara eksplisit. |
frappe.ui.form.on('ToDo', {
refresh(frm) {
frm.trigger('set_mandatory_fields');
},
set_mandatory_fields(frm) {
frm.toggle_reqd('priority', frm.doc.status === 'Open');
}
})Mendapatkan Baris yang Dipilih
Metode | Deskripsi | Contoh |
|---|---|---|
| Dapatkan baris yang dipilih di Tabel Anak dalam objek di mana kunci adalah nama field tabel dan value adalah nama baris. | |
Mengabaikan Linked Doctypes
Metode | Deskripsi |
|---|---|
| Untuk menghindari pembatalan dokumen terkait selama pembatalan semua, Anda perlu mengatur properti |
frappe.ui.form.on("DocType 1", {
onload: function(frm) {
// Abaikan pembatalan untuk semua dokumen terkait dari DocTypes masing-masing.
frm.ignore_doctypes_on_cancel_all = ["DocType 2", "DocType 3"];
}
}Dalam contoh di atas, sistem akan menghindari pembatalan untuk semua dokumen dari 'DocType 2' dan 'DocType 3' yang terkait dengan dokumen dari 'DocType 1' selama pembatalan.