Row Level EEPS in Forms
     PRODUCT: R:BASE            VERSION: 4.5
     In R:Base 4.5 users now have the ability to use row level Entry/exit 
     procedures in a form in addition to field level procedures. A row 
     level Entry/exit procedure is executed at one of four times:
     *       On entry into a row
     *       On exit from a row, before saving the row
     *       On exit from a row, after saving the row
     *       After leaving a section (table)
     Row level entry exit procedures allow for much greater flexibility of 
     data manipulation in forms. Instead of putting an EEP on every field 
     to make sure it executes no matter what field the user is on, you can 
     put a single EEP at the row level. Row level EEPs are assigned on the 
     Table settings screen. 
     A practical example of a row level EEP is illustrated using a modified 
     version of the form Tranform in the Concomp sample database. 
     Specifically, the form is updated to allow for greater control of 
     inventory management. A customer may order one or many products and 
     each product may exist in one or several locations. Each location 
     maintains a certain product inventory level. As a product is ordered 
     from a particular inventory location, an inventory count is taken. If 
     the inventory count falls below a preset level, the user is informed 
     that the reorder point has been reached for that product at its' 
     selected location. The user is then prompted if they'd like to see a 
     list of alternate locations for the selected product. If the user 
     chooses an alternate product location, the reorder point for the 
     alternate selection will also be checked. After the reorder point is 
     checked, the prodlocation table is updated to reflect the inventory 
     depletion. Keep in mind that if the user does not select an alternate 
     product location, the updates will still occur using the original 
     selections. This works because the product reorder point was set at a 
     relatively high level, 100 units. If a lower reorder point, for 
     example 20 units, is set the EEP may be altered so the user is forced 
     to choose an alternate product location to fill the order. All of the 
     form modifications were made to the Transdetail table in the form 
     Tranform. The located fields were reordered, new fields added and 
     expressions added.
     This figure illustrates the new format of the Transdetail tiers:
            vmodel        vlocation            vprod
              |              |                    |
              |              |                    |
      model: S  E location: S E Product Name: S               E
      Detail#: S E Quantity: SE price: S      E extprice: S       E
                |             |           |                  |
                |             |           |                  |
           Detailnum       vunits       vprice            vextprice
     Notice that Detailnum is the only column located, all the other fields 
     are variables. 
     Here is a list of the required variables. Keep in mind that most of 
     these are already defined in Tranform. The vprice and vprod 
     expressions are modified to change the WHERE clause comparison value 
     from model to vmodel. The expression model = .vmodel is added to save 
     the model value to the table.
     1. TEXT    :   vprod     =  prodname IN product WHERE model = .vmodel
     2. CURRENCY:   vprice    =  listprice IN product WHERE model = .vmodel
     3. CURRENCY:   vextprice =  (.vunits * .vprice)
     4. CURRENCY:   price     =  (.vprice)
     5. INTEGER :   units     =  (.vunits)
     6. INTEGER :   vtransid  =  transid
     7. TEXT    :   model     =  (.vmodel)
     A field level EEP is placed on the vmodel field to display a pop-up 
     menu for selection of a model and location. An EEP is used instead of 
     a double column pop-up because both values, the model and the 
     location, are needed. The pop-up defined in the field settings would 
     return only one value.
     *(model.eep -- choose model and location)
     (model + ',' + ' ' + location) +
     FROM prodlocation AT 15 3 CLEAR
     IF vmod = '[Esc]' THEN
     -- Parse the model and location values 
     -- into separate variables
     SET VAR vmodel = +
     SET VAR vlocation = +
     An EEP is already used in Tranform (tranupd.rmd on vunits  ) to 
     calculate the extended price and net amount and update the Transmaster 
     table. Leave this EEP on the form. The following EEP, update.eep, is 
     placed as a row level EEP in the Table setting screen to execute upon 
     exit from the row, but before the row is saved to the table. This 
     lets the user change the location the product is pulled from before 
     the row is saved.
     *(update.eep -- check product availability)
     --Get the inventory count for the selected product and location
     LABEL R_check
     SELECT onhand INTO VOnhand IVOnhand FROM prodlocation +
     WHERE model = .vmodel and location = .vlocation
     --Check to see if product has reached reorder point
     IF VOnhand <= 100 THEN
     PAUSE 2 USING 'Reorder point reached, hit any key to continue'
     DIALOG 'View list of alternate locations?' vresponse vend YES
     IF vresponse = 'YES' THEN
     CHOOSE valt FROM #VALUES FOR (model +','+' '+ location) +
     FROM prodlocation WHERE model = .vmodel
     SET VAR vloc = (SSUB(.valt,2))
     SET VAR vloc1 = (LJS(.vloc,5))
     SET VAR vlocation = .vloc1
     GOTO R_check
     --Update the prodlocation table to show proper inventory depletion
     WRITE 'Updating location table' AT 24 25
     UPDATE prodlocation SET onhand = (onhand - .vunits) WHERE +
     model = .vmodel and location = .vlocation
     --Clear variable values and prepare to enter the next row of data.
     SET VAR vmodel    TEXT = ' ', +
     vlocation  TEXT = ' ', +
     vprod    TEXT = ' ', +
     vunits    INT = NULL, +
     vprice    CUR = NULL, +
     vextprice  CUR = NULL