Masino Sinaga

Web Development, PHPMaker, & PHP Report Maker

Anda di sini: Beranda / PHPMaker / Menonaktifkan Field Tertentu Saat Data Diubah pada Aplikasi Web dari PHPMaker
Menambahkan Halaman List ke Custom Files di Aplikasi Web dari PHPMaker
Mengambil Data Master untuk Ditampilkan di Tabel Detail pada Halaman Master/Detail

Menonaktifkan Field Tertentu Saat Data Diubah pada Aplikasi Web dari PHPMaker

Agustus 24, 2014 oleh Masino Sinaga 20 Komentar

Pernahkah Anda sebagai Web Developer ingin menonaktifkan, atau istilah kerennya: men-disable, Field tertentu pada sebuah form saat Pengguna mengubah data? Kalau saya sering menghadapi kondisi ini di sebagian besar Aplikasi Web yang saya bangun dengan PHPMaker. Saya pun yakin hal tersebut pasti sering juga Anda alami. Jika selama ini Anda mengalami kesulitan mengenai hal itu, maka silahkan simak solusi berikut ini.

PHPMaker sudah menyediakan sebuah server event bernama Row_Rendered yang bisa mengatasi kondisi tadi. Seperti namanya, server event ini akan dipanggil saat sistem sedang me-render atau mengeluarkan output HTML dari sebuah baris Record (Row) ke browser Pengguna. Karena itu, maka untuk kasus di atas tadi bisa menggunakan server event ini untuk memanipulasi tampilan object atau Field yang terdapat di sebuah Form pada halaman Edit.

Katakanlah kita ingin menonaktifkan salah satu Field yang bernama Nama_Pegawai di sebuah Form pada halaman Edit (Ubah Data), dengan tujuan supaya Pengguna tidak dapat mengubah data tersebut. Maka solusinya cukup tambahkan kode berikut ke dalam server event Row_Rendered:

// Pertama, pastikan kode berikut untuk halaman "Edit" dan tidak sedang dalam mode konfirmasi
if (CurrentPageID() == "edit" && $this->CurrentAction != "F") {
	$this->Nama_Pegawai->EditValue = $this->Nama_Pegawai->CurrentValue;
	$this->Nama_Pegawai->ReadOnly = TRUE;
}

// Kedua, pastikan untuk halaman "Edit" dan sedang dalam mode konfirmasi (jika diaktifkan dari Field Setup)
if ($this->CurrentAction == "edit" && $this->CurrentAction=="F") {
	$this->Nama_Pegawai->ViewValue = $this->Nama_Pegawai->CurrentValue;
}

Kalau kita perhatikan dengan lebih teliti pada kode di atas, maka ada dua bagian kode di sana.

Bagian Pertama adalah bagian yang paling penting, di mana sistem akan memastikan bahwa kode tersebut hanya saat ID Halaman yang sedang aktif bernilai edit (halaman berisi Form untuk mengubah data), dan Aksi yang terakhir (CurrentAction) tidak bernilai F (Form dalam kondisi terbuka dengan mode Ubah). Sebelum men-disable Field tersebut dengan menugaskan property ReadOnly dengan nilai TRUE, maka kita harus menampilkan terlebih dulu nilai pada property EditValue dengan nilai yang diambil dari nilai sekarang (CurrentValue).

Bagian Kedua adalah bagian yang tidak selalu harus ada, tapi perlu juga kita antisipasi jika Anda mengaktifkan mode Konfirmasi di halaman Edit dari bagian Fields Setup project PHPMaker Anda. Artinya, jika halaman Edit berada dalam mode Konfirmasi, maka kita harus menampilkan nilai Field tersebut yang diambil dari property CurrentValue dan berasal dari mode Ubah pada bagian Pertama sebelumnya.

Kadang-kadang, selain kode di server event Row_Rendered tadi, dibutuhkan juga kode tambahan di server event Row_Updating yang akan dipanggil saat sistem sedang menyimpan data hasil perubahan. Jadi, kode berikut ini hanya digunakan jika diperlukan saja (just in case), ehm.

// Pastikan data yang disimpan berasal dari recordset awal
$rsnew["Nama_Pegawai"] = $rsold["Nama_Pegawai"]; 

Betapa mudah dan simpel sekali, bukan? 🙂

Ditempatkan di bawah: PHPMaker Ditag dengan:PHPMaker Indonesia, Row_Rendered, Server Events, Tutorial PHPMaker

Masino Sinaga

Web Developer pengguna PHPMaker untuk membangun Aplikasi Web sejak tahun 2004. Sampai sekarang masih aktif dan rajin membagikan pengalamannya menggunakan PHPMaker melalui situs masinosinaga.com dan ilovephpmaker.com.

Menambahkan Halaman List ke Custom Files di Aplikasi Web dari PHPMaker
Mengambil Data Master untuk Ditampilkan di Tabel Detail pada Halaman Master/Detail

Comments

  1. angga mengatakan

    September 5, 2015 pada 4:58 pm

    pak mau tanya misal ada 3 teksbox (A,B,C). yg A sudah di edit lalu disave pas mau di edit seharusnya teksbox B, tapi tanpa sengaja si A terhapus. bisakah si A itu di disable sehabis edit pertama kali

    makasih

    Balas
    • Masino Sinaga mengatakan

      September 5, 2015 pada 6:17 pm

      Bisa saja, prinsip cara men-disable sama dengan contoh kode di artikel ini. Anda harus membuat kondisi yang memeriksa apakah field tersebut sudah pernah diedit pertama kali, misalnya dengan menyimpan status setiap field yang sudah diubah ke tabel lain, lalu cek dari tabel tersebut setiap kali user akan mengubah data di suatu field.

      Untuk mengecek apakah suatu field akan diubah saat akan disimpan, tinggal bandingkan nilai field tersebut dari recordset lama ($rsold) dan recordset baru ($rsnew). Jika keduanya tidak sama, berarti field itu akan diubah.

      Balas
      • angga mengatakan

        September 5, 2015 pada 10:27 pm

        sebelumnya terima kasih pak atas jawabannya. saya sudah tester dgn script diatas dan sudah saya coba2 . mungkin petanyaan saya juga yg keliru :). saya coba modifikasi spt berikut

        if (CurrentPageID() == “edit” && $this->CurrentAction != “F”) {
        $this->field_1->EditValue = $this->field_1->CurrentValue;
        $this->field_1->ReadOnly = TRUE;
        }
        else {
        //$this->field_1->EditValue = $this->field_1->CurrentValue = NULL;
        $this->field_1->OldValue = $this->field_1->CurrentValue;
        $this->field_1->ReadOnly = FALSE;
        }

        if ($this->CurrentAction == “edit” && $this->CurrentAction==”F”) {
        $this->field_1->ViewValue = $this->field_1->CurrentValue;
        }
        }

        dan kalau boleh bertanya kembali, jika field_1 sudah ada data maka teksboxA disable, tetapi jika data masih kosong teksboxA enable.

        terima kasih

        Balas
        • Masino Sinaga mengatakan

          September 7, 2015 pada 11:23 am

          Kode Anda tersebut tidak menangani kondisi jika data di field_1 tersebut sudah ada datanya atau kosong. Kode itu hanya menangani kondisi jika di halaman form Edit dan tidak dalam mode konfirmasi, dan juga sebaliknya selain kondisi tadi.

          Balas
          • angga mengatakan

            September 10, 2015 pada 7:29 pm

            sudah bisa akhirnya pak. makasih yah pak ntar boleh tanya2 lagi 🙂

            Balas
            • Masino Sinaga mengatakan

              September 11, 2015 pada 10:36 am

              Sama-sama.

              Balas
  2. Pramudiyanto mengatakan

    Maret 22, 2017 pada 9:40 am

    Salam kenal Pak Masino

    Seandainya yg akan di disable adalah combobox dengan pilihan modal dialog for lookup, bagaimana scriptnya ya.
    saya coba dengan script ini

    $this->Nama_Pegawai->ReadOnly = TRUE;

    tidak berhasil, mohon bantuannya

    terima kasih

    Balas
    • Masino Sinaga mengatakan

      Maret 22, 2017 pada 10:02 am

      Cek id elemennya dari View Page Source browser, lalu gunakan jQuery untuk menyembunyikan elemen berdasarkan id-nya.

      Balas
      • Pramudiyanto mengatakan

        Maret 22, 2017 pada 11:17 am

        Akhirnya berhasil

        Terima kasih Pak Masino

        Balas
        • Masino Sinaga mengatakan

          Maret 22, 2017 pada 11:24 am

          Sama-sama. Kebetulan saya baru saja menulis artikel yang terkait dengan ini: Begini Mudahnya Membuat Field Lookup dengan Modal Dialog Menjadi ReadOnly.

          Balas
          • Pramudiyanto mengatakan

            Maret 22, 2017 pada 11:39 am

            Wah, ini dia yang saya cari..

            Sekali lagi, terima kasih Pak Masino

            Balas
            • Masino Sinaga mengatakan

              Maret 22, 2017 pada 12:31 pm

              Oke, sama-sama.

              Balas
  3. Septian mengatakan

    Mei 18, 2017 pada 10:10 am

    Salam kenal pak masino,

    Bagaimana jika kita ingin menonaktifkan field pada halaman “add”? Karena case yang saya buat adalah field yang akan saya disable ini telah otomatis terisi berdasarkan field lain pada tabel tersebut..

    Terima kasih sebelumnya pak 🙂

    Balas
    • Masino Sinaga mengatakan

      Mei 19, 2017 pada 2:11 pm

      Gunakan jQuery code, dan taruh di bagian Client Scripts -> Startup Script pada halaman bertalian.

      Balas
  4. Henry mengatakan

    September 13, 2017 pada 6:54 am

    Pak Masino, saya pemula pengen belajar.
    1. Hal edit kalo di phpmaker standartnya namanya apa ya? Apa ‘namatabeledit’?

    Balas
    • Masino Sinaga mengatakan

      September 14, 2017 pada 10:40 am

      Iya betul.

      Balas
  5. Pieter Allan mengatakan

    Oktober 27, 2017 pada 8:16 pm

    Pak saya mau tanya..

    Bagaimana cara mengatasi sebuah kondisi seperti ini :

    ketika user ingin mengubah data pada satu table namun ada satu filed yang tidak boleh diubah tapi jika kondisi field tersebut kosong (tidak ada datanya) data bisa terubah

    namun ketika field itu sudah ada datanya, data tidak bisa diubah

    Terimakasih..

    Balas
    • Masino Sinaga mengatakan

      November 30, 2019 pada 10:50 am

      Pakai server event Row_Inserting jika ingin menambah data, atau Row_Updating jika ingin mengubah data. Tinggal periksa saja nilai field yang terkait, dan jika tidak sesuai, tampilkan pesan error, dan di bawahnya kembalikan nilai FALSE.

      Balas
  6. Julian mengatakan

    November 27, 2019 pada 11:35 am

    Bang masino Ysh

    Bang saya mau tanya… saya mebuat input select misal:

    POOL

    Bubutan
    Perak
    Sawahan
    Simpang
    Gubeng

    maksud saya begini bang…kalau kita pakai ceckbox untuk memilih pool yang sama pada saat input dan yang terpilih pool itu terus, atau yang saya maksud seperti Nama Pengirim sama pada aplikasi internal kantor (mungkin bang masino tau maksud saya) itu gimana bang… maaf newbie bang masih belajar. hatur nuhun kang.

    Balas
    • Masino Sinaga mengatakan

      November 30, 2019 pada 10:48 am

      Pakai jQuery code untuk menangani saat user memilih Checkbox, simpan nilai pilihan itu di Cookie, lalu saat form dimuat kemudian, ambil kembali nilai di Cookie tadi, untuk ditampilkan lagi pada Checkbox yang terakhir terpilih tersebut.

      Balas

Tinggalkan Balasan Batalkan balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Pos-pos Terbaru

  • Menyesuaikan Item Secara Dinamis pada Control Combobox di PHPMaker 2021
  • Mudahnya Menangani Field Upload yang Tidak Ada Filenya di PHPMaker 2021
  • Perbedaan Penanganan Current Filter di Tables dan Reports pada PHPMaker 2021
  • Betapa Mudahnya Mengubah Link atau URL Export to PDF dari PHPMaker 2021
  • Nomor Urut Record di Export Data pada PHPMaker 2020 dan PHPMaker 2021

Menu

  • Siapa Saya?
  • Web Development
  • PHPMaker
  • Umum
  • Syarat dan Ketentuan
  • Sitemap (Peta Situs)
  • Komentar

Komentar Terbaru

  • sukirno kasau pada Jangan Pernah Lagi Mencampur Kode PHP di Client Script atau Startup Script pada PHPMaker 2021
  • Masino Sinaga pada Mengenal Lebih Lanjut REST API di PHPMaker 2021
  • Bayu Pratama pada Mengenal Lebih Lanjut REST API di PHPMaker 2021
  • Masino Sinaga pada Mudahnya Menyaring Record Saat Halaman Dimuat di Aplikasi Web dari PHPMaker
  • Charly pada Mudahnya Menyaring Record Saat Halaman Dimuat di Aplikasi Web dari PHPMaker

Situs Terkait

  1. I Love PHPMaker
  2. Situs Resmi PHPMaker
  3. Forum Diskusi PHPMaker
  4. PHPMaker di IlmuKomputer.com
  5. PHPMaker Learning

Baru di PHPMaker?

Baca ini terlebih dulu ...

  1. Ayo Menjadi Web Developer yang Cerdas!
  2. PHPMaker: PHP Code Generator + PHP Framework
  3. Pertanyaan-Pertanyaan yang Paling Sering Diajukan Seputar PHPMaker
  4. Tips buat Anda Pemula yang Baru Mengenal dan Menggunakan PHPMaker
  5. Bacalah Help, Bacalah Help, dan Bacalah Help di PHPMaker!

(c) Masino Sinaga 2009 - 2019 | WordPress | Catat masuk | Kembali ke atas