Home

Support

Contact

Our Blog

Email

 

Visual FoxExpress | AFP | CrystalVFE | Xcase | Orders | Training | Consulting | Support | Forums | Contact | About

 

A Tour of the Student Registration Application

The Student Registration Application is the second part of F1 Technologies’ five-day training course, represented days three, four, and five of the class we have presented in Toledo and around the country. 

In the StudentReg Application we will build on the skills developed in the first two days of training by building an application which has a good deal more complexity.  We will  demonstrate many techniques of creating method code which takes advantage of built-in functionality of the framework and give more examples of how you can figure out how to write code in your own methods, especially how to talk to data objects.

It is highly recommended that the student complete the Visual FoxExpress Jumpstart CD prior to doing this set of material.  We will repeat many of the concepts introduced in the Invoice Application in order to reinforce them, but the explanation will probably be more detailed in the Invoice App materials. The Invoice App also deals with a few things that will not be repeated again in the StudentReg application.  The Invoice App, for example, is structured in such a way as to demonstrate better the use of Parent-child-grandchild design and how efficiently this can be accomplished using the Wizards.

Contents of CD 1

01 - A Tour of the Student Registration Application  (  20:59 min/sec )

An overview of the finished StudentReg Application.

( Run \Compiled StudentReg\StudentReg.EXE  to try the completed application.)

02 - Creating the new VFE Application ( 13:53 min/sec )

The Application Wizard

Examining the Application Object

The Files Page

Class libraries added to the application

03 - Adding an Existing DBC to the Project  ( 15:01 min/sec )

 Adding the StudentReg.dbc

Naming Conventions

Changing the name of an existing table in the project

Setting up the generation of Primary Keys

The Appids.dbc

Setting up and examining indexes on tables

Dealing with Candidate Keys

studentreg end of 03.zip
 
 
 
04 - Creating v_Studentreg Database  ( 08:31 min/sec)
Creating the basic views
Examining the generated SQL code
Gotchas in the View Designer
05 - Indexes and search index tags on views  ( 10:56  min/sec )
Primary key generation in views
Co-ordinating appids for tables and views
Creating Indexes on views
Search index tags
06 - User Interface Classes and Lookups  (  11:11 min/sec )
Read only property
Captions properties
Regarding Codebook Naming Conventions
User Interface Class
UI Builder
Comboxes and Lookups
Lookup Builder
Optiongroups
Lookups on other than key fields  - non-dynamic lookups
07 - Parameterized view and lookup for cMajors_id  ( 08:38 min/sec )
Creating a view used only for lookup
Parameterizing a lookup view against another foreign key in the parent
Setting up views for changing values in one lookup based on the selected value in another
08 - Cursor classes, DEs and Bizobjs  ( 14:47 min/sec )
Creating Cursor classes
Naming class libraries
Setting default index order
Creating Data Environment classes
Creating Business object classes
09 - Grid Presentation Objects  ( 16:14 min/sec )
Presentation Object wizard
Grid Builder
Edit boxes on grid presobjs
Edit box builder
10 - Form style Presentation Objects ( 15:26 min/sec )
Parameterizing a child view on a parent’s key
Parent and Child Presentation Object wizard
Properties of the Bizobj Loader
Multi-page presentation objects
11 - Creating Forms   (  17:39 min/sec )
Creating Presentation Object Forms
Creating Single Record Modal Add Forms
Reusing presentation objects
Associating SRMAFs with lookups
List page
12 - Modifying the v_StudentsPresobj   (  08:05 min/sec )
Resizing the presobj and controls
Setting up the optiongroup and optionbuttons
lgetcaption
13 - Creating toolbars, First run of the app  ( 24:48  min/sec )
Refitting the modified presobj to the form
Creating toolbars
Setting applications default toolbar
When and what to build
Running the project for the first time
Options dialog
Assessing what needs changing
Studentreg end of 13.zip

 

 

14 - Changing the StudentsPresobj   ( 18:04 min/sec )
Using buttons instead of tabs to change pages
First code
pgf.PresentObject.Activepage
Putting controls outside the pageframe
Refreshing a label from data
Adding a method
Bizobj.getvalues()
With … Endwith
oBizobj object reference
Field objects and the objectifying of data
Cursor class’s item array
15 - Synchronizing Dropdown Listboxes  ( 36:44 min/sec )
Setting Tab Order of the Presobj
Creating new properties of the presobj
Dealing with properties that store object references
Modifying destroy()
Storing self-reference of a control from the Init()
Using the oGlobalhook reference and the getcontroller() method
Using the control’s valid() method
Using the oField object reference and the ischanged() method lLoseFocusonSelection
lAllowFocuswhenEmpty
16 - Adding a field to the view and the List Grid  ( 13:18 min/sec )
Modifying the table
Dealing with Select * views
Adding the field to the view
Adding a control to the Presobj
Checkbox Builder
Navigating the grid with the Properties sheet
CurrentControl property of grid column
17 - Hacking views to get two left outer joins   ( 20:56 min/sec )
Inner vs. Outer Joins
Adding View hacking functionality to VFE
Config.fpw
Sys(1270)
VFEStarter6.prg
VFEGenview.prg
Hacking the view in code
18 - Nulls and refreshing looked up fields  ( 14:02 min/sec )
Adding looked up fields to the List Grid
Review of changing lActive to checkbox in List Grid
NullDisplay property
Explanation, using debugger, of need to refresh looked up fields prior to requery.
Contents of CD 2
19 - Field Behavior Classes to refresh looked up fields   ( 13:07 min/sec )
Creating FBCs
Using Checklookup_post()
Modifying the field’s Behavior Class property
Modifying the college cbo valid()
20 - Importing Data   ( 12:28 min/sec )
Suggestions and examples for importing data
Adding 92 records to the Students table from a free table
21 - Courses - view through running form  ( 45:03 min/sec )
Setting order of cursor class
Using filters instead of two left joins
Adding indexes and setting search index tag properties
Setting lookups
Demonstrating a view where the primary display values are looked up values
Another example of needing a refresh of the looked up values
studentreg end of 21.zip

 


22 - FBCs for Course Name and Location   ( 19:06 min/sec )
Using Getvalues() with parameters
Using Setvalues() to update a cursor from and object created from a lookup cursor record.
Testing the oHost property of the field object before calling the Refresh() of the presobj.
23 - LIst and Copy Buttons  ( 14:55 min/sec )
Pluses and minuses of the isearchgrid
Using the Presobj builder to set the cListfields property
Disabling the isearchgrid when using a List Page
lCopyinprogress
Setting a label’s visible property to lCopyinprogress
24 - Digressing on Debugging   (11:44 min/sec )
Demonstrating the Form Handler
Using the debugger to explore the application object’s oforms
Using OKL F8 to get an object reference
25 - Application Toolbar  (16:05 min/sec )
iAdmintoolbarbutton
cform property
cMainToolbar property of the Application object
studentreg end of 25.zip

 

 
26 - v_StudentReg view through bizobj  ( 11:48 min/sec )
Principles of Many-to-many relationships
Creating the v_Registrations view
Things to watch for in the DBSetprops of generated code
Creating cursor, data environment and bizobj classes
27 - v_StudentRegPresObj  ( 15:16 min/sec )
Creating a presobj using ilistbox
Requerying issues using ilistbox
Columncount property
Columnwidths property
28 - v_Availablecourses view through bizobj  ( 12:10 min/sec )
StudentReg presobj
Creating a presobj withoout controls from wizard
Using presobj.delete_post()
v_Availablecourses view
Bizobj with no presentation layer
Listtoarray() method of bizobj and cursor classes
Getcourselist()
Creating data for the array to feed the iMover class
studentreg end of 28.zip

 

 

 

29 - v_Studentregbizobj_getcourselist()  ( 9:19 min/sec )

Storing object references in properties of the bizobj

Cleaning up in the destroy()

Instantiating bizobjs in method code

More complex OOP design for communicating between objects

30 - v_StudentregPresobj_Registration()  ( 10:32 min/sec )

Using iMover

Array manipulation for the mover class

Passing arrays by reference

Using named constants from VFE.H in the Messagebox()

31 - v_StudentregPresobj_Saveregistrations()  ( 13:17 min/sec )

Working with Objectified fields in VFE

Using bizboj Findfield()

Parsing the array to two dimensions

Bizobj Getfield()

Bizobj GetPKValue()

Bizobj GetPKName()

studentreg end of 31.zip

 

 

 

32 - v_StudentRegBizobj_SaveRegistrations()  ( 26:54 min/sec )

Complex VFE method code involving processing

Using stored object references to requery data

Using bizobj.Search()

Modifying multiple cursors from inside one method

Creating an array of record objects

Bizobj.Adderrormessage()

Adding new records in code and setting values

Cancelling and reverting changes

studentreg end of 32.zip

 

 

 

33 - Adding and Testing v_Studentregpresobj  ( 22:24 min/sec )

Creating a presobj using ilistbox

Requerying issues using ilistbox

Adding the presobj to v_StudentsPresobj

Setting relations in the bizobj loader

Bizobj loader builder

Testing Registrations

Contents of CD 3

34 - debugmode() and v_studentreg  ( 30:02 min/sec )

Thorough explanation of the most complex method code using the debugger and watch window to demonstrate record objects etc.

35 - Subclassing iMoverform  ( 08:56 min/sec )

Changes in the iLayer

Subclassing from the iLayer

36 - Adding a seat when a course is dropped  ( 16;29 min/sec )

Bizobj.Delete_pre()

Bizobj.Delete_post()

V_Coursebizobj.Addseat()

studentreg end of 36.zip

 

 

 

37 - Grade Entry Module  ( 38:59 min/sec )

Creating views with registered parameter variables

Using PADR() with calculated view fields

Using Value is in List with very short values

Creating lookups for view parameters

View parameter containers

Data entry checkboxes in grids

Testing mDown() in the checkbox When() clause

Using display controls’ interactivechange()

Fixing unresolved Array references with External Array

studentreg end of 37.zip

 

 

 

38 - V_Student_Payments view  ( 15:35 min/sec )

Another approach to parameterized child views

Using a View Parameter Behavior Class to set parameter for parent key

Using Value is in List with a cbo lookup

39 - v_Student_Payments cursor through 1st run   ( 23:56 min/sec )

Using grid and control combinations on data entry screens

Changing field visibility based on data

Adding the v_student_paymentspresobj to v_studentspresobj

40 - Calculating totals.scm    ( 23:38 min/sec )

Creating Bizobj properties to bind to data

Calculatesum()

Using access methods

Another ilayer subclass for a currency display textbox

41 - Bizrules  ( 19:40 )

Situations where business rules are appropriate

Creating a business rule

Storing a persistant object reference to the calling business object to be used in methods called from execute()

Creating new bizrule methods

Using the additem() method of the obizrule object

studentreg end of 41.zip

 

 

 

42 - Student Roster by Status Report  ( 18:16 min/sec )

A Naming convention for views

Simple report design’

View parameters and output objects

Output object wizard

The Repolist table

43 - Student Report Cards  ( 25:07 min/sec )

Complex parameterized views to drive reports

Views used for lookups

More complex report design

lallowselectall property of the bizobj

cstartform property of the Application Object

studentreg - finished.zip

 

 

Copyright (c) 2008, F1 Technologies