Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Manajemen Jendela dalam Formulir Oracle D2k

Manajemen Jendela di Oracle D2k Formulir

Bagian ini menyajikan dua teknik manajemen jendela yang sangat berguna di Oracle D2k Forms:menutup jendela aktif dengan mengklik ikon x kanan atas dan mengubah ukuran, memposisikan ulang , dan menutup jendela aktif apa pun yang terbuka dalam formulir. Yang pertama adalah persyaratan pengguna yang sangat dihargai yang tidak dimiliki Oracle Forms; itu sangat sesuai dengan aplikasi Windows standar apa pun. Teknik kedua adalah rutinitas umum untuk meminimalkan upaya pemrograman, serta upaya pengguna akhir, dalam menutup setiap jendela yang terbuka satu per satu.

Menutup Jendela dengan Ikon x

Menutup jendela dengan mengklik ikon x di sudut kanan atas adalah fitur yang sering dibutuhkan dan juga fungsionalitas standar Windows. Meskipun teknik ini diabaikan oleh Formulir, Anda dapat mencapainya melalui beberapa baris kode. Untuk melakukannya, tulis WHEN-WINDOW-CLOSED pemicu, dan navigasikan keluar jendela atau keluar dari formulir seperlunya dengan memeriksa :SYSTEM.EVENT_WINDOW. Misalnya, untuk keluar dari formulir dengan mengklik x ketika jendela aktif adalah jendela konsol (yang umumnya WINDOW1 ), prosedur p_close_window dapat dikodekan sebagai berikut:
PROCEDURE p_close_window(p_window_name  VARCHAR2,

                         console_window VARCHAR2,

                         ret_code OUT NUMBER)

IS

   Win_id Window;

BEGIN

Win_id := FIND_WINDOW(p_window_name);

    IF ID_NULL(win_id) THEN

        Ret_code := -1;

        Return;

     END IF;



   IF NAME_IN('SYSTEM.EVENT_WINDOW') = p_window_name THEN

      IF console_window = 'Y'THEN

         DO_KEY('EXIT_FORM');

      ELSE

       SET_WINDOW_PROPERTY(win_id, VISIBLE, PROPERTY_FALSE);

      END IF;

      IF FORM_SUCCESS THEN

        Ret_code := 0;

      ELSE

        Ret_code := -1;

      END IF;

   END IF;



END;

Prosedur ini umum dalam arti bahwa prosedur ini dapat digunakan untuk menutup jendela apa pun, bukan hanya jendela konsol. Keluar dari kunci khusus formulir dapat ditulis untuk menangani pemeriksaan khusus sebelum menutup formulir tertentu dengan mengklik ikon x.

Mengubah Ukuran, Memosisikan Ulang, dan Menutup Semua Jendela

Jendela anak memegang kanvas bertumpuk sangat sering diperlukan dalam bentuk untuk menampilkan informasi yang menjadi bagian dari jendela utama. Misalnya, daftar pilihan mungkin ditampilkan di jendela utama, dan detail serta subdetail berikutnya mungkin muncul di satu atau beberapa kanvas bertumpuk yang dipegang oleh jendela anak. Mengubah ukuran, memposisikan ulang, atau menutup secara dinamis setiap jendela ini sangat penting ketika beberapa jendela harus ditampilkan secara bersamaan. Ini membutuhkan sejumlah besar kode. Teknik ini menyediakan rutinitas umum untuk mengubah ukuran, memposisikan ulang, dan menutup jendela apa pun dalam satu bentuk, sehingga menghemat waktu dan upaya pemrogram yang diperlukan untuk menulis kode substansial yang diperlukan. TipJendela acara harus memiliki close_allowed, mengubah ukuran_diizinkan, dan move_allowed properti disetel ke Ya/Benar pada waktu desain. Ini diperlukan untuk mengaktifkan fitur penutupan, pengubahan ukuran, dan pemosisian ulang default. Prosedur untuk mengubah ukuran dan memposisikan ulang jendela apa pun dapat ditulis pada baris yang sama:
PROCEDURE p_resize_window(p_window_name  VARCHAR2,

                          console_window VARCHAR2,

                          width NUMBER,

                          height NUMBER,

                          ret_code OUT NUMBER)

IS

   Win_id Window;

BEGIN



/* The window name, its target width, and its height are passed

as input parameters. Also, an additional parameter to identify whether

the window under consideration is a console window is passed as input. */



    Win_id := FIND_WINDOW(p_window_name);

/* If input window does not exist, exit the procedure and return –1 */



    IF ID_NULL(win_id) THEN

        Ret_code := -1;

        Return;

     END IF;

/* If the input window is the active window and is not the console window,

resize it to the specified width and height */



   IF NAME_IN('SYSTEM.EVENT_WINDOW') = p_window_name THEN

      IF console_window = 'Y'THEN

        NULL; /* CANNOT RESIZE CONSOLE WINDOW */

      ELSE

        RESIZE_WINDOW(win_id, WIDTH, HEIGHT);

      END IF;

      IF FORM_SUCCESS THEN

        Ret_code := 0;

      ELSE

        Ret_code := -1;

      END IF;

   END IF;



END;



PROCEDURE p_reposition_window(p_window_name VARCHAR2,

                              console_window VARCHAR2,

                              xpos number,

                              ypos NUMBER,

                              ret_code OUT NUMBER)

IS

   Win_id Window;

BEGIN

/* The window name and its target (x,y) position are passed as

input parameters. Also, an additional parameter to identify whether the window

under consideration is a console window is passed as input. */



     Win_id := FIND_WINDOW(p_window_name);



/* If the input window does not exist, exit the procedure and return –1 */



    IF ID_NULL(win_id) THEN

        Ret_code := -1;

        Return;

     END IF;

/* If the input window is the active window and is not the console window,

resize it to the specified width and height */



   IF NAME_IN('SYSTEM.EVENT_WINDOW') = p_window_name THEN

      IF console_window = 'Y'THEN

        NULL; /* CANNOT RESIZE CONSOLE WINDOW */

      ELSE

        MOVE_WINDOW(win_id, xpos, ypos);

      END IF;

      IF FORM_SUCCESS THEN

        Ret_code := 0;

      ELSE

        Ret_code := -1;

      END IF;

   END IF;



END;

Dua prosedur sebelumnya dan yang diberikan di bagian sebelumnya dapat digeneralisasi menjadi satu dengan menambahkan parameter tambahan bernama action_type :
PROCEDURE p_action_window(p_window_name VARCHAR2,

                          console_window VARCHAR2,

                          action_type VARCHAR2,

          Width number, height number, xpos number, ypos number,

          ret_code OUT NUMBER,

)

IS

   Win_id Window;

   V_window_name VARCHAR2(40);

BEGIN



/* This procedure takes the action type (CLOSE, RESIZE or REPOSITION )

as an input parameter and calls the corresponding procedure

(p_close_window,

 p_rresize_window or p_reposition_window ) to perform that action.

Initially, it checks for the existence of the input window name */



Win_id := FIND_WINDOW(NAME_IN(p_window_name));



    IF ID_NULL(win_id) THEN

        Ret_code := -1;

        Return;

     END IF;

     IF (action_type = 'CLOSE') THEN

          P_close_window(p_window_name, console_window, ret_code);

      ESLIF (action_type = 'RESIZE') THEN

        P_resize_window(p_window_name, console_window, ret_code);

      ELSIF (action_type = 'REPOSITION')

        P_reposition_window(p_window_name, console_window, ret_code);

      END IF;

      IF FORM_SUCCESS THEN

          ret_code := 0;

       ELSE

          (ret_code = -1);

       END IF;

   END IF;



END;

Panggilan ke p_close_window dapat diganti dengan p_action_window sebagai berikut:
WHEN-WINDOW-CLOSED



DECLARE

    ret_code NUMBER;

BEGIN



p _action_window('WINDOW0'), 'Y','CLOSE', ret_code);

IF (ret_code <>  0) THEN

    MESSAGE('Error closing Console Window!');

    RAISE FORM_TRIGGER_FAILURE;

END IF;

END;

Kode untuk masing-masing dari tiga prosedur p_close_window, p_resize_window, dan p_reposition_window dapat dikustomisasi untuk menangani logika khusus aplikasi. Misalnya, kode untuk p_close_window prosedur dapat disesuaikan untuk memuat panggilan untuk memulai navigasi eksplisit keluar dari jendela masing-masing, seperti GO_ITEM atau GO_BLOCK, yang akan memungkinkan jendela itu untuk menutup dan juga melempar Apakah Anda ingin menyimpan? waspada jika ada perubahan basis data yang tertunda. Juga, seperti yang terlihat pada contoh menutup jendela konsol, EXIT_FORM dapat membantu dalam menutup semua jendela yang memulai keluar dari formulir tertentu. TipPanggilan ke SET_WINDOW_PROPERTY . bawaan dengan properti VISIBLE setel ke FALSE menutup (menyembunyikan) jendela hanya jika jendela tersebut tidak memiliki item yang dapat dinavigasi di dalamnya atau gaya jendelanya adalah Dokumen. Jika jendela memiliki setidaknya satu item yang dapat dinavigasi di dalamnya, atau gaya jendela adalah Dialog, jendela tetap ditampilkan kecuali dan hingga pengguna secara eksplisit menavigasi keluar jendela. Juga, jika jendela adalah modal, satu-satunya cara untuk keluar adalah melalui navigasi eksplisit. Ini dapat diatasi dengan penyesuaian p_close_window prosedur seperti yang diuraikan dalam contoh sebelumnya.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Referensi tabel dalam skema lain yang menghilangkan nama skema

  2. Oracle Menggabungkan beberapa kolom menjadi satu

  3. Indeks partisi Oracle

  4. Cara membuat tautan DB antara dua instance Oracle

  5. Permintaan Oracle SQL:Ambil nilai terbaru per grup berdasarkan waktu