D2K FORMS

81
MODEL WINDOW --------------------- --IF IT IS ACTIVE,NAVIGATION NOT POSSIBLE TO ANY OTHER WINDOW #IT ALWAYS NEESD RESPONSE MODELESS WINDOW--default --generally used ------------------------ --IF IT IS ACTIVE,NAVIGATION POSSIBLE TO ANY OTHER WINDOW CONTENT CANVAS ----------------------- --ONLY ONE CONTENT CANVAS CAN BE DISPLAYED AT RUN TIME ON ONE APPL WINDOW AT A TIME WHY? --CONTENT CANVAS OCCUPIES THE WHOLE AREA OF APPLICATION WINDOW STACKED CANVAS ----------------------- --MORE THAN ONE STACKED CANVAS CAN BE DISPLAYED AT RUN TIME ON ONE APPL WINDOW AT SAME TINE

Transcript of D2K FORMS

Page 1: D2K FORMS

MODEL WINDOW

---------------------

--IF IT IS ACTIVE,NAVIGATION NOT POSSIBLE TO ANY OTHER WINDOW

#IT ALWAYS NEESD RESPONSE

MODELESS WINDOW--default

--generally used

------------------------

--IF IT IS ACTIVE,NAVIGATION POSSIBLE TO ANY OTHER WINDOW

CONTENT CANVAS

-----------------------

--ONLY ONE CONTENT CANVAS CAN BE DISPLAYED AT RUN TIME ON ONE APPL WINDOW AT A TIME

WHY?

--CONTENT CANVAS OCCUPIES THE WHOLE AREA OF APPLICATION WINDOW

STACKED CANVAS

-----------------------

--MORE THAN ONE STACKED CANVAS CAN BE DISPLAYED AT RUN TIME ON ONE APPL WINDOW AT SAME TINE

HOW?

Page 2: D2K FORMS

CONDITIONAL QUERY

--by using default menu

---------------------------------

--CLICK ON ENTER(QUERY)

--ENTER THE COND VALUE INTO THE ITEM

--CLICK THE EXECUTE(QUERY)

COMPLEX QUERY COND

----------------------------

--CLICK ON ENTER(QUERY)

--ENTER THE BIND VARIABLE IN ANY ITEM

--CLICK ON EXECUTE

# IT OPEN A QUERY/WHERE WINDOW

--WRITE THE QUERY COND

IN THE WINDOW AS REQUIREMENT

--------------------------------------A--

Page 3: D2K FORMS

DESIGNING AN APPLICATION BASED ON

CONTROL BLOCK

-----------------------------------------------

--CREATE CONTROL BLOCK(manually)

--CREATE A CANVAS

--PLACE AT LEAST ONE USER INTERACTIVE ITEM ON CANVAS

--go to item property

--go to physical section

--go to canvas

--select the canvas name

# TABLE NAME & BLOCK NAME MAY BE

--SAME OR

--DIFFERENT

CONTROL BLK ----->DATA BLK

-----------------------------------

--GO TO CONTROL BLK PROPERTY

--GO TO DATABASE SECTION

* DATABASE BLOCK=YES --default

* Query data source type=table --default

* Query data source name=<tbl_name> emp

Page 4: D2K FORMS

DATA BLK ----->CONTROL BLK

* Query data source name=<no any table name>

--------------------------------------------------

HOW TO CREATE GUI ITEM

-------------------------------

* LIST ITEM

* RADIO BUTTON

* CHECK BOX

-----------------------------------------------------------

* LIST ITEM

----------------

TYPE OF LIST ITEM

---------------------

1. POPULIST

2. TLIST

3. COMBO BOX

Page 5: D2K FORMS

CREATE TABLE SUPPL

(

ID NUMBER(4),

NAME VARCHAR2(10),

SEX VARCHAR2(1),

CATEGORY VARCHAR2(1),

LOCAL VARCHAR2(1),

COUNTRY VARCHAR2(1),

FOREIGN VARCHAR2(1),

TAX_TYPE VARCHAR2(3)

);

# WHEN WE DELETE THE ITEM FROM CANVAS ,THAT ALSO DELETED FROM BLOCK

Page 6: D2K FORMS

1. POPULIST

--------------------

--CREATE A POPULIST LIST ITEM

--DEFINE FOR LIST ITEM

1. ELEMENTS &

2. VALUE

ELEMENTS

--VISIBLE TO USER FOR SELECTION AT RUN TIME

VALUE

--FOR SELECTED ELEMENTS,THIS VALUE GOES TO

COLUMN OF TABLE AFTER COMMIT

# ELEMENT & VALUE MAY BE

--SAME OR

--DIFFERENT

depending on requirement

Page 7: D2K FORMS

stps

---------

GO TO LIST ITEM PROPERTY

--CLICK ON

ELEMENTS IN LIST

--DEFINE

* ELEMENT &

* VALUES

--DEFAULT VALUE FOR LIST ITEM

-----------------------------------------

--GO TO LIST ITEM PROPERTY

--GO TO DATA SECTION

--GO TO INITIAL VALUE=S

$$DATE$$

--------------------------------

TLIST

------

--SCROLL BAR VISIBLE AT RUN TIME,NOT AT DESIGN TIME

Page 8: D2K FORMS

--IT IS VISIBLE IF ALL ELEMENTS NOT DISPLAYED IN TLIST AT RUN TIME

--DEFINE

--ELEMENTS

--VALUES

--GO TO TLIST PROPERTY

--CLICK ON ELEMENTS IN LIST

#THE SELECT ELEMENT FROM TLIST ALWAYS ACTIVATED

RADIO BUTTON

------------------------

--CREATE RD GRP

--CREATE RD BUTTON

--DEFINE THE VALUE FOR RD BUTTON

--GO TO RD BUTN PROPERTY

--RADIO BUTTON VALUE=M/F

--DEFINE THE INITIAL VALUE FOR

Page 9: D2K FORMS

RADIO GROUP

--------------------------------

CHECK BOX

---------------

--CREATE CHK BOX

--DEFINE THE VALUE FOR

* WHEN CHECK BOX CHECKED

* WHEN CHECK BOX UNCHECKED

--any one is mandatory

--go to chk box propertry

# HOW TO REMOVE ANY ITEM FROM CANVAS

WHICH SHOULD BE AT OBJ NVG

--SEND THE ITEM TO PRE-DEFINED CANVAS

Page 10: D2K FORMS

<NULL>

HOW TO MAKE AN ITEM

NON-INTERACTIVE

------------------------------------------

--DISPLAY ITEM OR

--only for text item

--ENABLED=YES/NO --select NO

--default YES

for

text_item

GUI ITEM

-----------------------------------------------------

LOV--list of values

------

-- IT IS A DATA STRUCTURE LIKE A TBALE

--IT GET DATA FROM

RECORD GROUP

#RECORD GROUP

--IT IS ALSO A DATA STRUCTURE LIKE A TABLE

Page 11: D2K FORMS

--IT POPULATE DATA TO

--LOV

--LIST_ITEM

--RGP CAN ALSO BE USED AS

PARAMETER FOR

--REPORTS OR

--GRAPHICS

to pass a bunch of values at a time

TYPE OF RECORD GROUP

---------------------------

1. QUERY-BASED RGP

2. NON-QUERY BASED RGP

3. STATIC RGP

1. QUERY-BASED RGP

------------------------

-- A QUERY IS ASSOCIATED TO THE RGP

--IT IS DYNAMIC

--IT CAN BE CREATED AT

# DESIGN TIME--object navigator

# RUN TIME --using program

--it is generally used

Page 12: D2K FORMS

2. NON-QUERY BASED RGP

--------------------------------

--NO QUERY ASSOCIATED TO THE RGP

--IT MAY BE

* DYNAMIC OR

* STATIC

--IT CAN BE CREATED AT

# RUN TIME ONLY

# DESIGN TIME --not allowed

3. STATIC RGP

---------------

--NO QUERY ASSOCIATED WITH RGP

--IT IS ALWAYS

* STATIC

--IT CAN BE CREATED AT

# DESGIN TIME ONLY

# RUN TIME --not allowed

NOTE

--------

--A LOV CAN BE ATTACHED TO ONLY ONE RGP AT A TIME

--AT RUN TIME,WE CAN ATTACH SAME LOV TO DIFFERENT RGP BUT AT A TIME TO ONLY ONE RGP

Page 13: D2K FORMS

--MORE THAN ONE LOV CAN BE ATTACHED TO SAME RGP

--RGP & LOV CAN BE CREATED SEPARATELY AND WILL BE ATTACHED TOGETHER

--LOV CAN BE CREATED BY

* WIZARD--generally used

* MANUALLY

# WHEN WE CREATE LOV THROUGH WIZARD

AND BASED ON QUERY,automatically a RGP created and attached to the LOV

--this technique is generally used

USE OF LOV

------------

1. HELP BOX

2. ASSIGNMENT

3. VALIDATION

------------------------------------------------

HOW TO CREATE A LOV

WIZARD(based on query)

---------------------------------------------

--DB CLICK ON LOV AT OBJ NVG

--SELECT (based on query)

--WRITE THE RGP QUERY

SELECT * FROM DEPT

Page 14: D2K FORMS

--ATTACH LOV TO ITEM

--GO TO ITEM PROPERTY

--GO TO LOV SECTION

--SELECT THE LOV NAME

HOW TO INVOKE LOV WHICH

IS ATTACHED TO ITEM

PRESS F9 when control on the item

--to customise the look of lov

--go to lov property

--design as requirement

FONT

COLOR

HOW TO DO ASSIGNMENT

------------------------------

--GO TO PROPERTY OF LOV

--GO TO COLUMN MAPPING PROPERTIES

--DEFINE THE

Page 15: D2K FORMS

# RETURN ITEM VALUE

<BLK_NAME>.<ITEM_NAME>

EMP.DEPTNO

OR

--click on browse &

select the item name from list

HOW TO DO VALIDATION

------------------------------

--GO TO ITEM PROPERTY(LOV ATTACHED)

--GO TO LOV SECTION

--VALIDATE FROM LIST=YES

-------------------------------

SEARCHING TECHNIQUE IN LOV

--------------------------------------

1. FIND method

2. PANEL method

----------------------------------------

Page 16: D2K FORMS

# CREATING

RECORD GROUP &

LOV SEPARATELY

AND ATTACH THEM TOGATHER

---------------------------------------

--DB CLICK ON RGP AT OBJ NVG

* STATIC

* BASED ON QUERY --click on it

--WRITE THE QUERY

--DB CLICK ON LOV

* WIZARD

# based on query

# existing record group

* MANUALLY

--select any one

* MANUALLY

--GO TO LOV PROPERTY

--CLICK ON COLUMN MAPPING

--DEFINE THE LOV COLUMNS BASED ON

RECORD GROUP

#attaching the lov to rgp

--CLICK ON RECORD GROUP(LOV PROPERTY)

Page 17: D2K FORMS

--SELECT THE RGP NAME

-----------------------------------------

STATIC RGP

--DB CLICK ON RGP

--CLICK ON * STATIC

--DEFINE

# RGP COLUMN/datatype &

# RGP COLUMN VALUE

NOTE

---

WE CAN POPULATE LIST ITEM DYNAMICALLY

AT RUN TIME BASED ON DATABASE

--by using program

---------------------------------------------

HOW TO USE TAB CANVAS

--------------------------------

Page 18: D2K FORMS

HOW TO DESIGN

MASTER/DETAIL FORM

-----------------------------------------------

REQUISITION FORM

PURCHASE ORDER FORM

RECEIVING FORM

INVOICE

----------------------------------------------

Page 19: D2K FORMS

IMPLEMENTATION OF

MASTER/DETAIL FORM

------------------------------

# CREATE MASTER FORM

--based on pk table

# CREATE DETAIL FORM

--based on fk table

TYPE OF BLOCK

--based on no of records dispalyed

---------------------------------------

1. SINGLE RECORD BLOCK

--only one recd dispalyed

2. MULTI-RECORD BLOCK

Page 20: D2K FORMS

--more than one recd displayed

---------------------------------------------------

nxt class

--CREATING RELATION B/W

MASTER/DTL BLOCKS

-----------------------------------------------

# EACH BLOCK HAVING ITS OWN RELATION NODE AT OBJECT NVG

--WE CAN CREATE RELATION BY USING THE

RELATION NODE

--used when both blocks have been created

# USE relation node of master block

--DB CLICK ON RELATION NODE OF MASTER BLOCK AT OBJ NVG

--CLICK ON SELECT button

--SELECT THE DETAIL BLOCK NAME

--WRITE THE JOIN-CONDITION

in-side the join-cond window

<blkm_name>.<commn_item>=

<blkd_name>.<commn_item>

EMP.DEPTNO=DEPT.DEPTNO

click on ok button

---------------------------------------------------

Page 21: D2K FORMS

# WHEN WE CREATE RELATION,AUTOMATICALLY

FORM TRIGGERS &

PROGRAM UNITS(procedures)

created to maintain the data integrity b/w master & detail block

HOW MANY FORM TRIGGERS & PROGRAM UNITS?

------------------------------------------------

FORM TRIGGERS=03

trg levels

-----------

1. form level =01 trigger

ON-CLEAR-DETAILS

2. master block level=02 triggers

ON-POPULATE-DETAILS

ON-CHECK-DELETE-MASTER

PROGRAM UNITS=03

* Check_Package_Failure

*Clear_All_Master_Details

*Query_Master_Details

Relation Name

------------------

<mst_blok>_<dtl_blk>

Page 22: D2K FORMS

--it can be changed

EMP.DEPTNO=DEPT.DEPTNO

MASTER DELETE COMDITIONS

--------------------------------------

1. CASCADING

2. ISOLATED

3. NON-ISOLATED --default

1. CASCADING

--WHEN WE DELETE MASTER DATA ,AUTOMATICALLY

CHILD DATA ALSO DELETED

--PRE-DELETE

2. ISOLATED

--WHEN WE DELETE MASTER DATA,

NO EFFECT ON CHILD DATA

3. NON-ISOLATED --default

--WE CAN NOT DELETE MASTER DATA IF ANY CHILD DATA EXISTS

Page 23: D2K FORMS

--1st delete child data then

delete master data

--------------------------------------------------

COORDINATION PROPERTY

-------------------------------

--IT CONTROL THE QUERY BEHAVIOUR OF DETAIL BLOCK WHEN WE DO QUERY AT MASTER BLOCK

TYPE

------

1. AUTO-QUERY --default

2. DEFERRED

1. AUTO-QUERY --default

--when master data retrieved,immediately child data also retrieved

2. DEFERRED

--child data not displayed immediately

along with master data

type

-----

Page 24: D2K FORMS

1. deferred with auto-query

2. deferred without auto-query

1. deferred with auto-query

--when control goes to detail block,immediately child data displayed

2. deferred without auto-query

--we have to do separate query

for child data

PREVENT MASTERLESS OPERATION

CHECKED

UNCHECKED --default

--------------end---------------------------

# COMBINATION BLOCK

# SUMMARY BLOCK --6i

----------------------------------------

--for salcomm

------------------------

--GO TO PROPERTY OF SALCOMM

--GO TO CALCULATION SECTION

--CALCULATION MODE=FORMULA

--CLICK ON FORMULA

Page 25: D2K FORMS

--WRITE THE PRGM

:SAL+NVL(:COMM,0)

--for sum(sal)

-------------------

--go to property of sumsal

--go to calculation section

--calculation mode=summary

*summary function=sum

*summarized block=emp

*summarized item=sal

--go to block property

--go to records section

--query all records=yes

------------------------------------

PROGRAMMING IN D2K

-----------------------------

--BY USING

* FORM TRIGGERS

* FORM BUILT-INS

WITH PL/SQL BLOCK

Page 26: D2K FORMS

FORM TRIGGERS

--------------------

--IT IS A PL/SQL BLOCK ASSOCIATED WITH ANY EVENT

--IT IS FIRED WHEN EVENT OCCURED

--IT IS USED FOR

--DATA PROCESSING

--VALIDATION

--PASSING PARAMETER

--FORM BUILDER HAVING ITS OWN EVENTS

TYPE OF EVENTS

------------------

1. EXTERNAL EVENTS

--done by user

2. INTERNAL EVENTS

--due to navigation

COMPONENT OF FORM TRIGGERS

---------------------------------------

* TYPE--pre-defined

* SCOPE--pre-defined

* CODE--user written progm

Page 27: D2K FORMS

nxt class

TYPE

-------

PRE-

POST-

WHEN-

ON-

KEY-

-------------------

PRE-

--IT IS FIRED JUST BEFORE THE EVENT TAKE PLACE

PRE-FORM

PRE-BLOCK

PRE-RECORD

PRE-TEXT-ITEM

POST-

Page 28: D2K FORMS

--IT IS FIRED JUST AFTER THE EVENT TAKE PLACE

POST-FORM

POST-BLOCK

POST-RECORD

POST-TEXT-ITEM

WHEN-

--IT IS FIRED JUST AFETR ALL DEFAULT PROCESSING OVER

--it is fired when the control focused to the form object

--generally used for initialization

WHEN-NEW-FORM-INSTANCE

WHEN-NEW-BLOCK-INSTANCE

WHEN-NEW-RECORD-INSTANCE

WHEN-NEW-ITEM-INSTANCE

ON-

--IT IS USED TO REPLACE THE DEFAULT PROCESEE

IN CASE OF DML operation

--generally used for non-base table

ON-INSERT

ON-DELETE

ON-UPDATE

Page 29: D2K FORMS

KEY-

--SOME FORM TRIGGERS ARE ASSOCIATED TO THE SPECIFIC KEY

--IF THE KEY IS PRESSED,THE TRIGGER IS FIRED

KEY-NEXT-ITEM

when we press(ENTER/TAB)

KEY-UP

KEY-DOWN

etc

# function key

F1/F2/F3--

---------------------------------------------

When-Clear-Block

When-Create-Record

When-Database-Record

When-Remove-Record

Page 30: D2K FORMS

BIND VARIABLE OF D2K

----------------------------------

--A VARIABLE DEFINED IN HOST ENVIRONMENT IS KNOWN AS BIND VARIABLE

--IT USES : AS PREFIX

--IT CAN HOLD ONLY ONE VALUE AT A TIME

TYPE OF BIND VARIABLE USED IN D2K

------------------------------------------------

1. ITEM VARIABLE

2. GLOBAL VARIABLE

3. PARAMETER VARIABLE

4. SYSTEM VARIABLE

--------------------------------------------------------

1. ITEM VARIABLE

--ITEM CAN BE USED AS VARIABLE IN PL/SQL BLOCK

:<BLOCK_NAME>.<ITEM_NAME>

:EMP.EMPNO

--block name is not mandatory

2. GLOBAL VARIABLE

--IT IS USED TO PASS/RECEIVE VALUE FROM

FORM TO FORM

FORM TO REPORTS

Page 31: D2K FORMS

FORM TO GRAPHICS

--DATATYPE=CHAR(255)

--IT MUST BE INITIALIZED

--its value can be changed during execution

--it is open till session

--it uses a keyword

GLOBAL

--IT CAN BE DEFINED AT ANY LEVEL

F/B/I

WHEN-NEW-FORM-INSTANCE

WHEN-NEW-BLOCK-INSTANCE

:GLOBAL.<VAR_NAME>:=' ';

:GLOBAL.DNO:=' ';

--recomendation to avoid it if not required

3. PARAMETER VARIABLE

--it is also used to pass value

FORM TO FORM

FORM TO REPORTS

FORM TO GRAPHICS

--DATATYPE=NUMBER/DATE/CHAR

--INITIALIZTION IS NOT MANDATORY

--NOT OPEN TILL SESSION

Page 32: D2K FORMS

--IT USES A KEYWORD

PARAMETER

--IT IS DEFINED AT DESIGN TIME AT OBJECT NAVIGATOR

:PARAMETER.<VAR_NAME>

:PARAMETER.PDNO:=10;

--recomendation to use in place

of GLOBAL variable

4. SYSTEM VARIABLE

--IT IS PRE-DEFINED VARIABLE

--USED BY FORM BUILDER TO KEEP THE STATUS OF FORM AT RUN TIME

--WE CAN NOT DO

--DML operation on system variable

--we can use the value of system variable

--exception

#some system variable can be changed by user

* which system variable can be changed by user????

Page 33: D2K FORMS

1. ---

2. ---

--IT USES A KEYWORD

SYSTEM

:SYSTEM.<VAR_NAME>

:SYSTEM.BLOCK_STATUS

NEW

CHANGED

QUERY

--DATATYPE=CHAR

--VALUE IN UPPER CASE

----------------------------------------------

Page 34: D2K FORMS

AN INITIALIZED VARIABLE WHICH VALUE NEVER CHANGES DURING THE EXECUTION

BUILT-INS USED IN D2K

-----------------------------

--IT IS PRE-DEFINED NAMED PL/SQL BLOCK

AS A PART OF D2K

--THEY ARE CATEGORISED IN TWO GROUPS

# PROCEDURE OR

Page 35: D2K FORMS

# FUNCTIONS

--FORM BUILT-INS ARE KEPT IN D2K BUILT-IN PACAKGE

STANDARD EXTENSIONS --pkg name

note

------

form builder having other packages also which is used for special task

--for example

TEXT_IO --used for data migration

FTREE --used for hierarchical data dispaly

etc

TYPE OF BUILT-INS

----------------------

* RESTRICTED BUILT-INS

* UNRESTRICTED BUILT-INS

* RESTRICTED BUILT-INS

---------------------------------

--SUCH BUILT-INS NOT ALLOWED TO ALL TRIGGERS

--HOW TO KNOW?

-----------------------

--THE BUILT-INS WHICH INITIATE THE NAVIGATION

ARE KNOWN AS

restricted built-ins

GO_BLOCK();

Page 36: D2K FORMS

NEXT_ITEM

NEXT_RECORD

* UNRESTRICTED BUILT-INS

--SUCH BUILT-INS ALLOWED TO ALL TRIGGERS

MESSAGE();

------------------------------------------------------------

LIST OF USEFUL BUILT-INS

--------------------------------

DML operation

-----------------

COMMIT_FORM; --just like commit;

CLEAR_BLOCK(DO_COMMIT);

NO_COMMIT

CLEAR_BLOCK;

EXIT_FORM(DO_COMMIT);

NO_COMMIT

ASK_COMMIT

CLEAR_FORM(DO_COMMIT);

NO_COMMIT

ASK_COMMIT

Page 37: D2K FORMS

CLEAR_FORM;

DELETE_RECORD;

COMMIT;

UPDATE_RECORD; --not allowed at item level

--allowed only to

form/block level

COMMIT;

NAVIGATIONAL BUILT-INS

---------------------------------

GO_BLOCK(<'BLK_NAME'>);

NEXT_BLOCK;

FIRST_RECORD;

LAST_RECORD;

PREVIOUS_RECORD;

NEXT_RECORD;

GO_RECORD(<REC_NO>);

GO_ITEM(<'BLK_NAME.ITEM_NAME'>);

NEXT_ITEM;

GO_FORM(<'FORM_NAME'>);

Page 38: D2K FORMS

NEXT_FORM;

OTHER purpose built-ins

-----------------------------

EXECUTE_QUERY;

MESSAGE(<'MSG STRING'>);

SHOW_LOV(<'LOV_NAME'>);

LIST_VALUES; --used to invoke LOV if lov attached to the item

SHOW_EDITOR(....);

EDIT_TEXTITEM;--used to invoke EDITOR if that is attached to the item

SHOW_VIEW(<'STACKED_CANVAS_NAME'>);

HIDE_VIEW(<'STACKED_CANVAS_NAME'>);

SHOW_ALERT(<'ALERT_NAME'>);

SET_<OBJECT>_PROPERTY(...)

--used to change the object property at run time

SET_BLOCK_PROPERTY();

SET_ITEM_PROPERTY();

SET_LOV_PROPERTY();

SET_CANVAS_PROPERTY();

SET_WINDOW_PROPERTY();

Page 39: D2K FORMS

etc

GET_<OBJECT>_PROPERTY(...)

--used to get existing property of object at run time

GET_APPLICATION_PROPERTY() --it is function

USERNAME

PASSWORD

CONNECT_STRING

add_list_elements()

---------------------------------

POST;

NAME_IN();

COPY()

---------------------------------------------------------

programmimn in d2k

-----------------------

HOW TO USE

ITEM VARIABLE

Page 40: D2K FORMS

GLOBAL VARIABLE

PARAMETER

SYSTEM VARIABLE

-------------------------------------

smart triggers

------------------

--IT IS A COLLECTION OF FREQUENTLY USED TRIGGERS W.R.T. THE OBJECT WHERE CURRENTLY CONTROL EXISTS

POST-TEXT-ITEM(ENAME)

-----------------------------

:EMP.ENAME:=UPPER(:EMP.ENAME);

GLOBAL VARIABLE

---------------------

WHEN-NEW-FORM-INSTANCE

:global.pdno:=' ';

Page 41: D2K FORMS

GO_BLOCK('DEPT');

PRE-TEXT-ITEM(DEPTNO OF DEPT BLOCK)

:DEPT.DEPTNO:=:GLOBAL.PDNO;

W.N.B.I(DEPT)

:DEPT.DEPTNO:=:GLOBAL.PDNO;

--SENDING VALUE FROM ITEM TO ITEM

GO_BLOCK('DEPT');

:DEPT.DEPTNO:=:EMP.DEPTNO;

Page 42: D2K FORMS

PARAMETER

---------------

--CREATE A PARAMETER AT OBJECT NVG

:PARAMETER.PDNO:=:EMP.DEPTNO;

GO_BLOCK('DEPT');

W.N.B.I(DEPT)

:DEPT.DEPTNO:=:PARAMETER.PDNO;

SYSTEM VARIABLE

---------------------

ITS VALUE ALWAYS IN UPPER CASE

----------------------------------

W.B.P(SAVE)

------------------

IF :SYSTEM.BLOCK_STATUS='CHANGED' THEN

COMMIT_FORM;

Page 43: D2K FORMS

ELSE

MESSAGE('NO DATA TO SAVE '|| :SYSTEM.BLOCK_STATUS);

MESSAGE('NO DATA TO SAVE '|| :SYSTEM.BLOCK_STATUS);

END IF;

--------------------------------

-------------------------

UPDATE_RECORD;

DELETE_RECORD;

Page 44: D2K FORMS

-------------------------------

:EMP.SYSVAR:=:SYSTEM.BLOCK_STATUS;

INVOKING LOV

-----------------

SHOW_LOV

--function

--return BOOLEAN

SHOW_LOV(<'LOV_NAME'>);

DECLARE

VLOV BOOLEAN;

BEGIN

VLOV:=SHOW_LOV('LOVDNO');

IF VLOV THEN

SELECT COUNT(*) INTO :EMP.CNT

FROM EMP

Page 45: D2K FORMS

WHERE DEPTNO=:EMP.DEPTNO;

ELSE

MESSAGE('NO SELECTION FROM LOV');

MESSAGE('NO SELECTION FROM LOV');

END IF;

END;

clear_block(no_commit);

LIST_VALUES;

if :emp.deptno is not null then

SELECT COUNT(*) INTO :EMP.CNT

FROM EMP

WHERE DEPTNO=:EMP.DEPTNO;

else

MESSAGE('NO SELECTION FROM LOV');

MESSAGE('NO SELECTION FROM LOV');

end if;

Page 46: D2K FORMS

--lov must be attached to item

CLEAR_ITEM;

INVOKE SAME LOV

TO TWO DIFFERNT BLOCK

WITH ASSIGNMENT

------------------

NXT CLASS

DECLARE

VLOV BOOLEAN;

Page 47: D2K FORMS

BEGIN

VLOV:=SHOW_LOV('LOVDNO');

:EMP.DEPTNO:=:PARAMETER.PDNO;

END;

-----------

--CREATE LOV

--CREATE A PARAMETER=PDNO

--COLUMN MAPPIMNG properties(LOV PROPERTY)

--RETURN ITEM=PARAMETER.PDNO

DECLARE

VLOV BOOLEAN;

BEGIN

VLOV:=SHOW_LOV('LOVDNO');

:DEPT.DEPTNO:=:PARAMETER.PDNO;

END;

----------------------------------------------

display the message at run time

------------------------------------

--by using

# built-ins=MESSAGE()

--used for non-decision making message

# form object=ALERT

--used for decision making message

Page 48: D2K FORMS

ALERT

--------

--it is a form object

--used for decision making message

--it has 03 buttons

1. ALERT_BUTTON1 OK --default

2. ALERT_BUTTON2 CANCEL

3. ALERT_BUTTON3 <user_label>

--IT HAS 03 STYLES(GRAPHICS)

* NOTE

* CAUTION

* STOP --default

built-in used to invoke ALERT

SHOW_ALERT() --function

--return number value

STPS

-------

--DB CLICK ON ALERT AT OBJ NVG

--DEFINE

# TITLE --optional

# MESSAGE

Page 49: D2K FORMS

--CALL TO FORM AT RUN TIME

--GO TO ALERT PROPERTY

--TITLE=......DELETION.........

--MESSAGE=DO YOU WANT TO DELETE..?

W.B.P(DELETE)

-------------------

DECLARE

VALT NUMBER;

BEGIN

VALT:=SHOW_ALERT('ALT1');

IF VALT=ALERT_BUTTON1 THEN

DELETE_RECORD;

---COMMIT;

ELSIF

VALT=ALERT_BUTTON2 THEN

MESSAGE('deletion canceled');

MESSAGE('deletion canceled');

else

MESSAGE('NO DELETION');

MESSAGE('NO DELETION');

END IF;

END;

Page 50: D2K FORMS

HOW TO USE SAME ALERT FOR

DIFFENT ACTION

----------------------------------

--by changing Message/Title at run time

SET_ALERT_PROPERTY()

--------------------------------------------------

DECLARE

VALT NUMBER;

BEGIN

------------defining message/TITLE---------

SET_ALERT_PROPERTY('ALT1',

TITLE,

'....DELETION....');

SET_ALERT_PROPERTY('ALT1',

ALERT_MESSAGE_TEXT,

'DO YOU WANT TO DELETE?');

-----------------------------------------------------

VALT:=SHOW_ALERT('ALT1');

IF VALT=ALERT_BUTTON1 THEN

DELETE_RECORD;

---COMMIT;

ELSIF

VALT=ALERT_BUTTON2 THEN

Page 51: D2K FORMS

MESSAGE('deletion canceled');

MESSAGE('deletion canceled');

else

MESSAGE('NO DELETION');

MESSAGE('NO DELETION');

END IF;

END;

W.B.P(SAVE)

----------------

DECLARE

VALT NUMBER;

BEGIN

------------defining message/TITLE---------

SET_ALERT_PROPERTY('ALT1',

TITLE,

'....INSERT....');

Page 52: D2K FORMS

SET_ALERT_PROPERTY('ALT1',

ALERT_MESSAGE_TEXT,

'DO YOU WANT TO SAVE?');

-----------------------------------------------------

VALT:=SHOW_ALERT('ALT1');

IF VALT=ALERT_BUTTON1 THEN

COMMIT_FORM;

ELSIF

VALT=ALERT_BUTTON2 THEN

MESSAGE('INSERT canceled');

MESSAGE('INSERT canceled');

else

MESSAGE('NO INSERT');

MESSAGE('NO INSERT');

END IF;

END;

-----------------------------------------------

HOW TO POPULATE LIST ITEM DYNAMICALLY

-----------------------------------------------------

--by using special built-ins

# CREATE_GROUP_FROM_QUERY--function

# POPULATE_GROUP --function

Page 53: D2K FORMS

# POPULATE_LIST

# DELETE_GROUP--OPTIONAL

--DATATYPE=RECORDGROUP

----------------------------------------------------

DECLARE

RG_ID RECORDGROUP;

STATUS NUMBER;

BEGIN

RG_ID:=CREATE_GROUP_FROM_QUERY('RGP1',

'SELECT DISTINCT JOB,JOB FROM EMP');

STATUS:=POPULATE_GROUP(RG_ID);

POPULATE_LIST('JOB',RG_ID);

DELETE_GROUP(RG_ID);

END;

-----------------------------------------------------

EDITOR

-------------

--system defined editor =SYSTEM_EDITOR

--user-defined editor

------------------------------------

SYSTEM_EDITOR

--GO TO ITEM PROPERTY

--GO TO EDITOR SECTION

--SELECT THE EDITOR=SYSTEM_EDITOR

Page 54: D2K FORMS

CTRL+e --to invoke editor

user-defined editor

--DB CLICK ON EDITOR AT OBJ NVG

--CUSTOMIZE THE EDITOR if required

DECLARE

OK BOOLEAN;

BEGIN

SHOW_EDITOR('SYSTEM_EDITOR',

:EMP.RMK,:EMP.RMK,OK);

END;

EDIT_TEXTITEM;

--editor must be attached to the item

Page 55: D2K FORMS

QUERY PROCESSING

-------------------------

EXIT --EXIT_FORM;

REFRESH ---CLEAR_BLOCK(NO_COMMIT);

QUERY EXECUTE_QUERY;

--------------------------------

EXECUTE_QUERY --built-in for query

--it clear the block before fetching data

--it is used as unconditional query

HOW TO DO CONDITIONAL QUERY

-----------------------------------------

--EXECUTE_QUERY does not accept query condition from query block

--for conditional query we can use following methods

methods

----------

1. CONTROL BLOCK method

2. GLOBAL variable method

3. SET_BLOCK_PROPERTY() method

4. SELECT statement method

Page 56: D2K FORMS

5. ENTER_QUERY (built-in) method

---------------------------------------------------------

1. CONTROL BLOCK method

-------------------------------

--create a control block for query condition

--create items as requirement

--place the item on query block canvas

--go to item property(EMPNO)

--go to data section

COPY VALUE FROM ITEM=QRY1.PNO

2. GLOBAL variable method

--------------------------------

--EXECUTE_QUERY always search the query condition at query block property at run time

WHERE CLAUSE --block propertry name

W.N.F.I

:GLOBAL.PNO:=' ';

W.B.P(QUERY)

----------------

:GLOBAL.PNO:=:EMP.EMPNO;

CLEAR_BLOCK(NO_COMMIT);

Page 57: D2K FORMS

EXECUTE_QUERY;

--GO TO BLOCK PROPERTY(EMP)

--GO TO DATABASE SECTION

WHERE CLAUSE EMPNO=:GLOBAL.PNO

3. SET_BLOCK_PROPERTY() method

--generally used

W.B.P(QUERY)

----------------

SET_BLOCK_PROPERTY('EMP',

DEFAULT_WHERE,

'EMPNO='||:EMP.EMPNO);

CLEAR_BLOCK(NO_COMMIT);

EXECUTE_QUERY;

SET_BLOCK_PROPERTY('EMP',

Page 58: D2K FORMS

DEFAULT_WHERE,

'JOB LIKE ='''||:EMP.JOB||'''||'%' ||'AND '|| 'SAL='||:EMP.SAL||'''');

4. SELECT statement method

--------------------------------------

W.B.P(QUERY)

-------------------------

SELECT EMPNO,ENAME,JOB,DEPTNO

INTO

:EMP.EMPNO,:EMP.ENAME,

:EMP.JOB,:EMP.DEPTNO

FROM EMP

WHERE EMPNO=:EMP.EMPNO;

# DATA DISPLAYED IN THE FORM BY USING THE SELECT STATEMENT IS ALWAYS IN INSERT STATUS

SELECT statement method

is used for

Page 59: D2K FORMS

# control block or

# control item on data block

--generally used for reference value

POST-QUERY(EMP BLOCK LEVEL)

--------------------------------------------

SELECT DNAME INTO :EMP.DNAME

FROM DEPT

WHERE DEPTNO=:EMP.DEPTNO;

5. ENTER_QUERY (built-in) method

----------------------------------------------

ENTER_QUERY changes the form from

NORMAL MODE---->QUERY MODE

# ENTER_QUERY & EXECUTE_QUERY

CAN BE USED TOGATHER

--------------------------------------------------

MULTIPLE APPLICATIONS DESIGN

---------------------------------------

--IT IS A TECHNIQUE/MACHANISM TO DESIGN MORE THAN ONE APPLICATIONS IN SUCH WAYS WHEN 1ST

APPLICATION LOADED INTO MEMOEY AREA,THAT CAN INVOKE OTHER APPLICATIONS ALSO FROM ITS OWN

Page 60: D2K FORMS

SESSION

--MEANS INVOKING OTHER APPLICATIONS FROM A SINGLE SESSION

# THE INVOKING APPLICATION IS KNOWN AS

CALLING FORM

# THE INVOKED APPLICATION IS KNOWN AS

CALLED FORM

# IT IS POSSIBLE TO PASS VALUE FROM CALLING FORM TO CALLED FORM BY USING

* GLOBAL VARIABLE

* PARAMETERLIST --generally used

--FOR THIS WE USE FOLLOWING BUILT-INS

1. CALL_FORM

2. OPEN_FORM

3. NEW_FORM

--ALL ARE DIFFERENT IN ACTIONS

1. CALL_FORM

----------------

--ONLY ONE FORM CAN BE CALLED

--CALLING FORM IS SUSPENDED

--NAVIGATION NOT POSSIBLE B/W CALLING FORM & CALLED FORM

--THE WINDOW BEHAVIOUR OF CALLED FORM BECOME AS

MODEL WINDOW

--AFTER EXIT FROM CALLED FORM THE CONTROL GOES BACK TO CALLING FORM

Page 61: D2K FORMS

2. OPEN_FORM

----------------

--MORE THAN ONE FORM CAN BE CALLED

--CALLING FORM NOT SUSPENDED

--NAVIGATION POSSIBLE B/W CALLING FORM & CALLED FORM

--WINDOW BEHAVIOUR OF CALLED FORM IS AS

MODELESS WINDOW

--AFTER EXIT FROM CALLED FORM,THE CONTROL GOES BACK TO CALLING FORM

3. NEW_FORM

---------------

--ONLY ONE FORM CAN BE CALLED

--CALLING FORM IS EXIT OUT

# IF CALLING FORM IS INVOKED BY ANY HIGHER FORM THEN AFTER EXIT FROM CALLED FORM THE CONTROL GOES TO THE HIGHER FORM

------------------------------------------------------

SYNTAX--CALL_FORM

---------

CALL_FORM(<called FORM_NAME>,

DISPLAY_MODE,

SWITCH_MENU_MODE,

QUERY_MODE,

Page 62: D2K FORMS

PARAMETERLIST);

<FORM_NAME> --mandatory argument

--others are optionals

* having default values

--recomended to use all arguments

--parameterlist depends on requirement

'D:\FORMB.FMX' --generally used

--'D:\FORMB.FMB' --valid

--'D:\FORMB'--valid

DISPLAY_MODE

--calling form visible / not visusble

-----------------------------------

HIDE --default

NO_HIDE

SWITCH_MENU_MODE

--which menu visible

calling form/called form

-----------------------------

DO_REPLACE--menu of called form visisble

Page 63: D2K FORMS

NO_REPALCE--menu of calling form visisble

--------------------------------------------------------

QUERY_MODE

--called form can be used for

DML/DQL opertation both OR

DQL operation only

----------------------------------------------------

QUERY_ONLY--only DQL operation on called form

NO_QUERY_ONLY--both DML/DQL on called form

--------------------------------------------------------

PARAMETERLIST

--used for passing the value from calling form to called form

CALLING FORM ----VALUE---->CALLED FORM

# we have to write parameterlist progarm by usimg some special built-ins

EXAMPLE --call_form

-------------

CALL_FORM('D:\FORMB.FMX',

NO_HIDE,

NO_REPLACE,

NO_QUERY_ONLY);

Page 64: D2K FORMS

SYNTAX--OPEN_FORM

---------

OPEN_FORM(<called FORM_NAME>,

ACTIVATE MODE,

SESSION MODE,

QUERY_MODE,

PARAMETERLIST);

-----------------------------------------------------

ACTIVATE MODE

--the control should be where

calling form or

called form

ACTIVATE--control on called form

NO_ACTIVATE--control on calling form

---------------------------------------

SESSION MODE

--called form work on which database

-------------------------------------------------

SESSION --called form using different database

NO_SESSION--called form using same database of calling form

example --open_form

Page 65: D2K FORMS

----------------------------

OPEN_FORM('D:\FORMB.FMX',

ACTIVATE,

NO_SESSION,

NO_QUERY_ONLY);

W.N.F.I

SET_WINDOW_PROPERTY(FORMS_MDI_WINDOW,

WINDOW_STATE,

MAXIMIZE);

SET_WINDOW_PROPERTY('WINDOW1',

WINDOW_STATE,

MAXIMIZE);

SYNTAX--NEW_FORM

---------

Page 66: D2K FORMS

NEW_FORM(<called FORM_NAME>,

ROLLBACK MODE,

QUERY_MODE,

PARAMETERLIST);

ROLLBACK MODE

--for unsaved data of calling form

---------------------------------------

TO_SAVEPOINT --default

--generally used

NO_ROLLBACK

FULL_ROLLBACK

NEW_FORM('D:\FORMB.FMX',

TO_SAVEPOINT,

NO_QUERY_ONLY);

-----------------------------------------

HOW TO PASS PM VALUE TO CALLED FORM

----------------------------------------------------------

-by using parameterlist

Page 67: D2K FORMS

PARAMETERLIST

--------------------

--IT IS A DATA STRUCTURE TO PASS VALUE FROM

FORM TO FORM

FORM TO REPORTS

FORM TO GRAPHICS

COMPONENT OF PLIST

---------------------------

1. KEY --name of plist

2. TYPE--structure type

3. VALUE --to be passed

2. TYPE--structure type

--------------------------

# TEXT_PARAMETER

# DATA_PARAMETER

# TEXT_PARAMETER--generally used

----------------------

--IT PASSES SINGLE VALUE AT A TIME

--ACCEPTS ONLY STRING VALUE TO PASS

--CAN BE USED FOR

FORM TO FORM

Page 68: D2K FORMS

FORM TO REPORTS

FORM TO GRAPHICS

# DATA_PARAMETER

-------------------------

--it can pass a bunch of values at a time by using recordgroup

--it can be used for

FORM TO FORM --not allowed

FORM TO REPORTS

FORM TO GRAPHICS

---------------------------------------------------------

# FOR PARAMETERLIST PROGRAM WE USE FOLLOWING BUILT-INS

* CREATE_PARAMETER_LIST

* ADD_PARAMETER

* DESTROY_PARAMETER_LIST --optional

--the pmlist created at run time works only once

--DATATYPE=PARAMLIST

W.B.P(CALL) --FORMA(CALLING FORM)

-----------------------------------------------

DECLARE

PL_ID PARAMLIST;

BEGIN

PL_ID:=CREATE_PARAMETER_LIST('LISTA');

Page 69: D2K FORMS

ADD_PARAMETER(PL_ID,

'PDNO',

TEXT_PARAMETER,

:EMP.DEPTNO);

ADD_PARAMETER(PL_ID,

'PNM',

TEXT_PARAMETER,

:EMP.ENAME);

CALL_FORM('D:\FORMB.FMX',

NO_HIDE,

NO_REPLACE,

NO_QUERY_ONLY,

PL_ID);

DESTROY_PARAMETER_LIST(PL_ID);

END;

W.N.B.I(FORMB)

--------------------

:DEPT.DEPTNO:=:PARAMETER.PDNO;

Page 70: D2K FORMS

:DEPT.ENAME:=:PARAMETER.PNM;

INVOKING STACKED CANVAS

------------------------------------

SHOW_VIEW(<'STACKED_CAN_NAME'>);

HIDE_VIEW(<'STACKED_CAN_NAME'>);

----------------------

VIEWPORT --control the physical property of stacked canvas

WIDTH

HIGHT

X

Y

Page 71: D2K FORMS

SHOW_VIEW('CAN_SALG');

GO_BLOCK('EMP');

HIDE_VIEW('CAN_SALG');