SUBROUTINE PROCESS.DB * Template version dated 20060904 * Provided by Nebula Research and Development * Based on original template provided by DesignBais International * Site-specific Application comments and copyrights go here $INCLUDE DBI DBI.COMMON FILENAME = FIELD(SCREENROOT,"_",1) * Flag = 1 if we are in designer mode, 0 if not IS.DESIGNER = (INDEX(SCREENROOT,".DESIGNER",1) > 0) * Flag = 1 if form is run in Enquiry mode, 0 if not IS.ENQUIRY = (INDEX(SCREENROOT,"~E",1) > 0) IS.INQUIRY = IS.ENQUIRY ; * for Americans ;^) SCREEN.NO = FIELD(SCREENROOT,"_",2) SCREEN.NO = CHANGE(SCREEN.NO,".DESIGNER","") THIS.EVENT = PROCESS.EVENT EVENTSOURCE = PROCESS.EVENTSOURCE * Do other setup and initialization here GOSUB HANDLE.EVENT * Do wrapup, logging, reset DBDS if not debugging, etc RETURN * * HANDLE.EVENT: * Event Table * BEGIN CASE CASE THIS.EVENT = "BEFORE READ"; * Master rec about to be read GOSUB BEFORE.READ CASE THIS.EVENT = "AFTER READ"; * Master record has been read GOSUB AFTER.READ CASE THIS.EVENT = "GET SCREEN"; * Before "After Display" GOSUB GET.SCREEN CASE THIS.EVENT = "AFTER DISPLAY"; * After Screen Display GOSUB AFTER.DISPLAY CASE THIS.EVENT = "BEFORE FIELD"; * Before Field (on focus) GOSUB BEFORE.FIELD CASE THIS.EVENT = "VALIDATE"; * Validation (on change) GOSUB VALIDATION CASE THIS.EVENT = "BUTTON"; * Button Click (after process) GOSUB BUTTON CASE THIS.EVENT = "BEFORE REPORT"; * report hasn't been run yet GOSUB BEFORE.REPORT; * not onform report CASE THIS.EVENT = "REPORT BREAK"; * control break in report GOSUB REPORT.BREAK CASE THIS.EVENT = "REPORT"; * Cell in a report activated GOSUB REPORT CASE THIS.EVENT = "IMAGE"; * On Clicking on Image GOSUB IMAGE CASE THIS.EVENT = "MODAL RETURN"; * Returning from anywhere GOSUB MODAL.RTN CASE THIS.EVENT = "BEFORE WRITE"; * Before DesignBais writes GOSUB BEFORE.WRITE CASE THIS.EVENT = "AFTER WRITE"; * After DesignBais Writes GOSUB AFTER.WRITE CASE THIS.EVENT = "BEFORE DELETE"; * Before DesignBais Delete GOSUB BEFORE.DELETE CASE THIS.EVENT = "AFTER DELETE"; * After DesignBais Delete GOSUB AFTER.DELETE CASE THIS.EVENT = "MV_ADD"; * Before Adding a MV line GOSUB MV.ADD CASE THIS.EVENT = "MV_INSERT"; * Before Inserting a MV line GOSUB MV.INSERT CASE THIS.EVENT = "MV_DELETE"; * Before Deleting a MV line GOSUB MV.DELETE CASE THIS.EVENT = "MV_HEADER"; * User clicked MV column header GOSUB MV.HEADER CASE THIS.EVENT = "MV_POST"; * MV Post Action GOSUB MV.POST CASE THIS.EVENT = "DIALOG"; * User clicked button in dialog GOSUB DIALOG CASE THIS.EVENT = "CREATE SELECTION"; * sel alternative process GOSUB CREATE.SELECTION CASE THIS.EVENT = "BEFORE SELECTION"; * from selection process GOSUB BEFORE.SELECTION CASE THIS.EVENT = "AFTER SELECT"; * from selection process GOSUB AFTER.SELECT CASE THIS.EVENT = "BEFORE SCREEN"; * inherited from menus GOSUB BEFORE.SCREEN CASE THIS.EVENT = "BEFORE CLOSE"; * inherited from menus GOSUB BEFORE.CLOSE CASE THIS.EVENT = "DERIVED KEY"; * After form but before data GOSUB DERIVED.KEY END CASE * RETURN * MODAL.RTN: * Excuted after a modal form returns to current form RETURN * GET.SCREEN: * See manual, this is executed when a user requests any screen * This is a higher level function, not form-level * EVENTSOURCE = user name * PROCESS.PARAMETER = user group * SCREENROOT = requested form * Set PROCESS.STACK to override requested form RETURN * AFTER.DISPLAY: * Process After Display or DBTIMER event * No EVENTSOURCE RETURN * BEFORE.READ: * Process before reading main record RETURN * AFTER.READ: * Process after reading main record RETURN * BEFORE.FIELD: * Process Before Field (On Focus) * EVENTSOURCE = Field Name RETURN * VALIDATION: * Process to perform Validation (On Change) * EVENTSOURCE = Field Name * DBVALUE = new value entered by user * DBMVCOUNT = current row number in MV set * Set IERR.TEXT to cancel the update BEGIN CASE CASE EVENTSOURCE = "XX" CASE 1 END CASE RETURN * BUTTON: * Process to perform after a button is pressed * EVENTSOURCE = Button Name BEGIN CASE CASE EVENTSOURCE = "B.XX" CASE 1 END CASE RETURN * BEFORE.REPORT: * Executed before printing report process, not onform reports * EVENTSOURCE = report name * See manual for values of DBUSAGEVAR * Set IERR.TEXT to cancel report RETURN * REPORT.BREAK: * Control break condition has occurred in report being generated * EVENTSOURCE = name of the break * PROCESS.PARAMETER = VM-delimited names of accumulators * DBVALUE = Corresponding VM-delimited list of values RETURN * REPORT: * Process to perform operation when user clicks on * cell in onform report * EVENTSOURCE = OnForm Report Name RETURN * IMAGE: * Process the image event * EVENTSOURCE = Image Name RETURN * BEFORE.WRITE: * Process Before System Write * EVENTSOURCE = Write from Button Name BEGIN CASE CASE EVENTSOURCE = "B.SUBMIT" NULL CASE 1 NULL END CASE RETURN * AFTER.WRITE: * Process After System Write * EVENTSOURCE = Write from Button Name RETURN * BEFORE.DELETE: * Process Before System Delete * EVENTSOURCE = Delete from Button Name RETURN * AFTER.DELETE: * Process After System Delete * EVENTSOURCE = Delete from Button Name RETURN * MV.ADD: * Process Before MV Add * EVENTSOURCE = MV Association Name * DBMVCOUNT has row count of current array RETURN * MV.INSERT: * Process Before MV Insert * EVENTSOURCE = MV Association Name * DBMVCOUNT = row number of the insertion point, everything * else will shift down when the current data is entered RETURN * MV.DELETE: * Process Before MV Delete * EVENTSOURCE = MV Association Name RETURN * MV.HEADER: * EVENTSOURCE = Name of MV field, not the association * DBMVCOUNT = Row that currently has focus, or 1 if no focus RETURN * MV.POST: * EVENTSOURCE = MV Association Name RETURN * DIALOG: * Process After a Dialog Box * EVENTSOURCE = DBDIALOG.PARAMETER from call to DBI.G.DIALOG * THIS.PARAMETER = Contains the response from the dialog * * BEGIN CASE * * CASE EVENTSOURCE = "OK TO DELETE" * BEGIN CASE * CASE THIS.PARAMETER = 6 ; * clicked YES * GOSUB HANDLE.DELETE * CASE THIS.PARAMETER = 7 ; * clicked NO * DBRETURN.TO.FIELD = "NAME" ; * some neutral field * END CASE * CASE 1 * END CASE * RETURN * CREATE.SELECTION: * EVENTSOURCE = FILENAME_FORMNAME * RETURNVALUE IS DBRETURN.SELECT(N) * EXAMPLE: * EXECUTE "SSELECT BLAH" CAPTURING MSG RTNLIST DBRETURN.SELECT(1) RETURN * BEFORE.SELECTION: * Validate user entry in selection process before selection is done * EVENTSOURCE = FILENAME_SELECTIONPROCESSNAME * PROCESS.PARAMETER from Selection Process RETURN * AFTER.SELECT: * User has made a selection in a selection process * EVENTSOURCE = FILENAME_SELECTIONPROCESSNAME * PROCESS.PARAMETER from Selection Process RETURN * BEFORE.SCREEN: * Used when "Subroutine to invoke before screen" is specified in a menu * Caution, this is a higher level routine which is executed by all * forms executed under a given menu and its submenus. * EVENTSOURCE = SCREENROOT RETURN * BEFORE.CLOSE: * Used when "Subroutine on Main Form Close" is specified in a menu. * Caution, this is a higher level routine which is executed by all * forms executed under a given menu, and sub menus inherit from * their main menu. * EVENTSOURCE = SCREENROOT RETURN * DERIVED.KEY: * Occurs after the AFTER DISPLAY event but before data is shown * Change value of derived key here if required - just in case * DesignBais doesn't generate the keys exactly as the app requires RETURN * END *------------------------------------------------------------ * Anything below this line shouldn't be compiled, depends on * your platform. Comment out this entire block if required *------------------------------------------------------------ * SAMPLE CODE SOURCE (AKA, THE SAMPLE BONE YARD) * USE THE CODE BELOW AS A MODEL FOR DB INTERFACE * RESET DOWN/UP IMAGES IN COLLAPSABLE SECTIONS DBWORK = 0 DBIMAGESPEC<1> = "SECIMG1" : @VM : "SECIMG2" DBIMAGESPEC<2> = "ROUNDDOWN.jpg" : @VM : "ROUNDDOWN.jpg" * SHOW AN IMAGE OF A CUSTOMER OR THEIR LOGO IF DBRECORD<72> # "" THEN DBIMAGESPEC<1> = "CUSTPIC" DBIMAGESPEC<2> = DBRECORD<72> END * OPEN A FILE AND HANDLE THE ERROR - NEVER "STOP" OR "ABORT" OPEN '','SALESREPS' TO F.SALESREPS ELSE IERR.TEXT = "Unable to open the file" CALL DBI.G.GLOSSARY(IERR.TEXT) RETURN END * SET THE VALUE OF ANOTHER CONTROL DBPASS.DBVALUE = VAL1 DBPASS.DBVALUE.TO = "ID" * LANCH ANOTHER FORM PROCESS.STACK = "DBCLIENT_TG.MODAL1"; * add "~M", "~~E", etc