Thursday, May 10, 2018

Advanced Form Development (Nested Form with Tabs) on Oracle APEX

Leave a Comment

This article will discuss about advanced form development (nested form with tabs) on Oracle APEX. Here we’re going to create a process of submission that involves three forms where each form in on different tab. The goal is we will fill some data into form1 on tab1, after completed then we will fill some data into form2 on tab2 and then we will fill some data into form3 on tab3. Data will be correlated among all of those three  forms.
The development phases will be divided into three, that are ER Diagram creation, Mockup Diagram creation and then following with coding phase.
1.       ER Diagram Creation
This article will use following ER Diagram that has 3 Entity Sets (Mahasiswa, DetilMahasiswa and UKM).



2.       Mockup Diagram Creation
Here are the three mockup diagrams that we will create (Form1, Form2, Form3):



3.       Coding Phase
After we design an ER Diagram, now we are ready for entering the coding phase. Here are the steps:
1.       Create 3 tables based on ER Diagram
a.       Tabel TMAHASISWA {#nim,nama,jk}
b.       Tabel TDETILMAHASISWA {alamat1,alamat2,telp,email,@nim}
c.       Tabel TMHS_UKM {tahun,jabatan,@idukm,@nim}

2.       Create new Database Application with a blank page

3.       Edit Page 1, Add HTML region namely form1
a.       Add following items (P1_JK static select list)


b.       Add a Next button, action when clicked is Submit.
c.       Fill this code on PL/SQL Process name it as simpan_form1:
BEGIN
                INSERT INTO tmahasiswa(nim,nama,jk) VALUES(:P1_NIM,:P1_NAMA,:P1_JK);
                COMMIT;
                htp.init;
                owa_util.redirect_url('f?p=&APP_ID.:2:&APP_SESSION.::::P2_NIM:'||:P1_NIM);
                apex_application.stop_apex_engine;
                apex_application.g_print_success_message := 'Berhasil';
END;

d.       Run the page, it should be look like this:


4.       Add new Blank Page
a.       Name it as Form2, Breadcrumb is enabled


b.       Choose Tab option enabled


c.       Finish the creation process the edit it. Add a HTML Region.
d.       Add following items on Form 2:


e.       Set P2_NAMA item with following descriptions:


f.        Add a button name it P2_PREV. Set the properties as follows:


g.       Add a button name it P2_NEXT, action when button clicked = Submit. Set the grid layout properties as follows:


h.       Create a PL/SQL Process name it as simpan_form2, assign it to P2_PREV button. Fill this code into source:
BEGIN
                INSERT INTO tdetilmahasiswa(alamat1,alamat2,telp,email,nim) VALUES(:P2_ALAMAT1,:P2_ALAMAT2,:P2_TELP,:P2_EMAIL,:P2_NIM);
                COMMIT;
                htp.init;
                owa_util.redirect_url('f?p=&APP_ID.:3:&APP_SESSION.::::P3_NIM:'||:P2_NIM);
                apex_application.stop_apex_engine;
END;
i.         Run the Page, it should be look like this:


5.       On SQL Command, create stored function name it as cek_ukm
create or replace function cek_ukm(p1 in varchar2, p2 in number, p3 in number) return varchar2
as
                vukm VARCHAR2(8);
                hasil varchar2(128);
begin
                select idukm into vukm from tmhs_ukm where idukm=p1 and nim=p2 and tahun=p3;
                select nama_ukm into hasil from tukm where id=vukm;
                return hasil;
end;

6.       Create stored function name it as cek_jabatan
create or replace function cek_jabatan(p1 in varchar2, p2 in number, p3 in number) return varchar2
as
                hasil varchar2(128);
begin
                select jabatan into hasil from tmhs_ukm where idukm=p1 and nim=p2 and tahun=p3;
                return hasil;
end;

7.       Create new Blank Page
a.       Name it as Form3, Breadcrumb is activated


b.       Activate the Tab set


c.        Finish the page creation the edit it. Add new HTML region.
d.       Add following items:


e.       Set P3_NAMA item properties as follows:


f.         Add a report region, fill this SQL into the source:
select NVL(cek_ukm(id,nim,tahun),APEX_ITEM.SELECT_LIST_FROM_QUERY(1,NULL,'SELECT NAMA_UKM,ID FROM TUKM')) as ORG, NVL(cek_jabatan(id,nim,tahun),APEX_ITEM.TEXT(2)) as JBT
from tukm a
left outer join (select * from tmhs_ukm where nim=:P3_NIM and tahun= :P3_TAHUN) b on a.id=b.idukm

Edit that region, go to Report Attributes


Edit column ORG and JBT, make sure the Column Attributes set to Display As Standard Report Column. Apply Changes.
g.       Add new button (P3_SIMPAN), action when button clicked=submit
h.       Create new PL/SQL Process name it as simpan_form3, assign to P3_SIMPAN button. Fill this code into the Source area:
begin
 for i in 1..apex_application.g_f01.count loop
  IF apex_application.g_f01(i) <> '%null%' THEN
  insert into TMHS_UKM (tahun,jabatan,idukm,nim)
                values (:P3_TAHUN,apex_application.g_f02(i),apex_application.g_f01(i),:P3_NIM);
  END IF;
 end loop;
 COMMIT;
end;
i.         Run the Page, it should be look like this:


The creation process has completed, now we’re going to try it.
1.       Check the TUKM table data


2.       Run the application, fill data on Form1 then click Next button


3.       Form2 will automatically shows along with Nama (Boby Siswanto). Fill data on Form2 then click on Next button


a.       Form3 will automatically shows, fill the text fields. Choose select list options on bellow area (Organisasi) and fill the Jabatan’s values. Click Simpan button.


b.       When the process is successful, success message will be shown:


c.       Check the TMAHASISWA table, new record with Boby Siswanto values will be inserted.
d.       Check the TMHS_UKM table, it should be contains some values:


That’s all for advanced form development (nested form with tabs) on Oracle APEX tutorial. You should be able to create one process divided into several forms.

Thank You - Bobsis

Read More