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

frm.set_value

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

frm.refresh

Menyegarkan formulir dengan value terbaru dari server.

frm.refresh();

frm.save

Memicu penyimpanan formulir, dengan opsi untuk Submit, Cancel, dan Update.

// simpan formulir
frm.save();

// submit formulir
frm.save('Submit');

// batalkan formulir
frm.save('Cancel');

// perbarui formulir (setelah submit)
frm.save('Update');

Mengaktifkan/Nonaktifkan Penyimpanan

Metode

Deskripsi

frm.enable_save

Aktifkan tombol Save.

frm.disable_save

Nonaktifkan tombol Save.

if (frappe.user_roles.includes('Custom Role')) {
    frm.enable_save();
} else {
    frm.disable_save();
}

Mengirim Dokumen melalui Email

Metode

Deskripsi

frm.email_doc

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

frm.reload_doc

Muat ulang dokumen dengan value terbaru dari server dan panggil frm.refresh().

frm.reload_doc();

frm.refresh_field

Menyegarkan field tertentu dan dependensinya.

frm.refresh_field('description');

Status Formulir dan Pemeriksaan

Metode

Deskripsi

Contoh

frm.is_dirty

Periksa apakah value formulir telah diubah dan belum disimpan.

if (frm.is_dirty()) {    frappe.show_alert('Harap simpan form sebelum melampirkan file')
}

frm.dirty

Atur formulir sebagai "dirty".

frm.doc.browser_data = navigator.appVersion;
frm.dirty();
frm.save();

frm.is_new

Periksa apakah formulir baru dan belum disimpan.

// tambahkan tombol khusus hanya jika formulir tidak baru
if (!frm.is_new()) {
frm.add_custom_button('Klik saya', () => console.log('Tombol khusus diklik'))
}

Mengatur Intro Text

Metode

Deskripsi

frm.set_intro

Atur teks pengantar di bagian atas formulir dengan warna opsional.

if (!frm.doc.description) {
    frm.set_intro('Harap atur value deskripsi', 'biru');
}

Contoh teks pengantar

Tombol Khusus

Metode

Deskripsi

Contoh

frm.add_custom_button

Tambahkan tombol khusus di toolbar bagian dalam.

// Tombol khusus
frm.add_custom_button('Buka formulir Referensi', () => {
    frappe.set_route('Form', frm.doc.reference_type, frm.doc.reference_name);
})

// Tombol khusus dalam grup
frm.add_custom_button('Ditutup', () => {
    frm.doc.status = 'Closed'
}, 'Atur Status');

frm.change_custom_button_type

Ubah jenis tombol khusus berdasarkan label.

// ubah tipe tombol yang tidak dikelompokkan
frm.change_custom_button_type('Buka formulir Referensi', null, 'primary');

// ubah tipe tombol dalam grup
frm.change_custom_button_type('Ditutup', 'Atur Status', 'danger');

frm.remove_custom_button

Hapus tombol khusus berdasarkan label.

// hapus tombol khusus
frm.remove_custom_button('Buka formulir Referensi');

// hapus tombol khusus dalam grup
frm.remove_custom_button('Ditutup', 'Atur Status');

frm.clear_custom_buttons

Hapus semua tombol khusus dari toolbar bagian dalam.

frm.clear_custom_buttons();

Properti DocField

Metode

Deskripsi

frm.set_df_property

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

frm.toggle_enable

Toggle sebuah field atau daftar field menjadi hanya-baca berdasarkan kondisi.

// atur status dan prioritas sebagai hanya-baca
// jika pengguna tidak memiliki peran System Manager
let is_allowed = frappe.user_roles.includes('System Manager');
frm.toggle_enable(['status', 'priority'], is_allowed);

frm.toggle_reqd

Toggle sebuah field atau daftar field menjadi wajib berdasarkan kondisi.

// atur prioritas sebagai wajib
// jika status adalah Open
frm.toggle_reqd('priority', frm.doc.status === 'Open');

frm.toggle_display

Tampilkan/sembunyikan sebuah field atau daftar field berdasarkan kondisi.

// tampilkan field prioritas dan due_date
// jika status adalah Open
frm.toggle_display(['priority', 'due_date'], frm.doc.status === 'Open');

Mengatur Query

Metode

Deskripsi

frm.set_query

Terapkan filter pada field Link untuk menampilkan catatan terbatas untuk dipilih. Anda harus memanggil frm.set_query sangat awal dalam siklus hidup formulir, biasanya di setup atau onload.

// 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_list

Operasi Child Table

Metode

Deskripsi

Contoh

frm.add_child

Tambahkan baris dengan value ke field Tabel.

let row = frm.add_child('items', {
    item_code: 'Tennis Racket',
    qty: 2
});

frm.refresh_field('items');

Panggilan Server

Metode

Deskripsi

frm.call

Panggil metode kontroler server-side dengan argumen. Saat mengakses metode server-side menggunakan frm.call(), Anda perlu membuat metode tersebut dalam daftar putih menggunakan dekorator @frappe.whitelist.

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

frm.trigger

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

frm.get_selected

Dapatkan baris yang dipilih di Tabel Anak dalam objek di mana kunci adalah nama field tabel dan value adalah nama baris.

let selected = frm.get_selected()
console.log(selected)
// {
//  items: ["bbfcb8da6a", "b1f1a43233"]
//  taxes: ["036ab9452a"]
// }

Mengabaikan Linked Doctypes

Metode

Deskripsi

frm.ignore_doctypes_on_cancel_all

Untuk menghindari pembatalan dokumen terkait selama pembatalan semua, Anda perlu mengatur properti frm.ignored_doctypes_on_cancel_all dengan array dari DocTypes dokumen terkait.

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.

Discard
Save

On this page

Review Changes ← Back to Content
Message Status Space Raised By Last update on