d2k forms
TRANSCRIPT
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?
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--
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
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
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
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
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
--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
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
<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
--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
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
--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
--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
# 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
----------------------------------------
# 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)
--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
--------------------------------
HOW TO DESIGN
MASTER/DETAIL FORM
-----------------------------------------------
REQUISITION FORM
PURCHASE ORDER FORM
RECEIVING FORM
INVOICE
----------------------------------------------
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
--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
---------------------------------------------------
# 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>
--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
--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
-----
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
--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
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
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-
--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
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
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
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
--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????
1. ---
2. ---
--IT USES A KEYWORD
SYSTEM
:SYSTEM.<VAR_NAME>
:SYSTEM.BLOCK_STATUS
NEW
CHANGED
QUERY
--DATATYPE=CHAR
--VALUE IN UPPER CASE
----------------------------------------------
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
# 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();
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
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'>);
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();
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
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:=' ';
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;
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;
ELSE
MESSAGE('NO DATA TO SAVE '|| :SYSTEM.BLOCK_STATUS);
MESSAGE('NO DATA TO SAVE '|| :SYSTEM.BLOCK_STATUS);
END IF;
--------------------------------
-------------------------
UPDATE_RECORD;
DELETE_RECORD;
-------------------------------
: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
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;
--lov must be attached to item
CLEAR_ITEM;
INVOKE SAME LOV
TO TWO DIFFERNT BLOCK
WITH ASSIGNMENT
------------------
NXT CLASS
DECLARE
VLOV BOOLEAN;
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
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
--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;
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
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....');
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
# 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
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
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
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);
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',
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
# 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
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
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,
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
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);
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
----------------------------
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
---------
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
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
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');
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;
: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
SHOW_VIEW('CAN_SALG');
GO_BLOCK('EMP');
HIDE_VIEW('CAN_SALG');