U of A University of Arkansas Division of Agriculture

Pictures of chickens, flowers, wheat, a boy looking through a magnifying glass, irrigation pipe, soybean pods, and fruits and vegetables.

Cooperative Extension Service

Cooperative Extension Service

Agricultural Experiment Station

Steve Rea's
Oracle Tips, Tricks, and Scripts

Link to Steve Rea's Oracle Certification graphic


Search | Publications | Jobs | Personnel Directory | Links

Fast Forms Development - Step-By-Step

Note: This is very out-dated, and is probably not very useful any more.  One of these days, I may have some time to update it!

In order to create a custom form in Banner, SCT has supplied a skeleton form, guaskel.fmb, in Banner 3, with most of the baseline code in it to create your own Banner-compatible form (gtvskel.fmb is also available).  They've put a lot of stuff in the Banner 4 version of guaskel.fmb which makes it unsuitable for modeling the forms I create, so, instead, I use one of the smaller forms, gtvobjt.fmb, as my skeleton form.  The first half of this web page shows the Banner 3 version, and below that in the second half of this web page is the Banner 4 version.  (I haven't done any later Banner versions of this yet.)  Also see Edward Stoever's white paper on creating custom forms (Fuller Theological Seminary).

All you will need to do with it is to copy the skeleton file you are modeling after to your new .fmb file (7-character name, with Banner requiring F (Finance) or one of the other products' prefix characters in the first character position, and with Z (or W or Y) in the second character position to indicate a locally-created form), open up that new form in the Forms Designer, rename some of the objects in it to your new form's name, add the table's block or fields in the screen layout editor, modify the objects' properties to describe them and their accessing further, make any code changes needed for the triggers used by the objects, and generate the resulting .fmx file.  You will also need to add the new form to the Banner security system, after which the form is ready to be used in Banner.

Below are the step-by-step instructions for creating a new FZIHOLD Invoice Hold Indicator Change form, which we are currently using to selectively change the hold status for a group of invoices, instead of individually bringing up each invoice in Banner's FAAPAYC Payment Control Form to release them.   It lists all open (unpaid) invoices, showing their invoice document number, payee, transaction date, total amount, cancel indicator, and hold indicator, in a scrollable list of 10 invoices per page, and allows you to change the hold indicator for a particular invoice, or a set of invoices, in the list by clicking on it's checkbox.  It also has the standard Rollback, Save, and Exit buttons supplied in guaskel.fmb (Banner 3).

Banner 3 Version

The screen layout for the Banner 3 version of FZIHOLD is shown below, which is a snapshot of the Forms Designer's screen layout editor:

wpe16.jpg (57496 bytes)

To create the form in the Oracle Forms Designer, the following steps are performed.  I've tried to give as much detail as needed for someone who has never used the Forms Designer to be able to create the FZIHOLD form in under 2 hours.  If you want more information about the properties, triggers, items, and other objects created and used here, please consult any of the books and manuals available on Oracle Forms Designer (or Designer2000), not me, since this stuff is all new to me, too, and I'm trying my best to dissuade our users from requesting custom forms and to not even get into forms develop- ment here!  (If I've left anything out, or deleted something that needs to be kept, please let me know!)

Copy guaskel.fmb to fzihold.fmb (may have to FTP it from the Oracle server
  from $BANNER_HOME/general/forms/guaskel.fmb), probably in the winfmx
  forms directory on your Windows PC client network.
Bring up the Forms Designer (f45des.exe for 16-bit forms, or f45des32.exe
  for 32-bit forms, in the orawin\bin directory on your Windows PC).
Click on File | Connect (item in the menu line across the top of the Forms
  Designer's Object Navigator screen) and log in as user baninst1 (our
  Forms Designer tends to crash if we don't connect first).
Click on File | Open (or, click on the folder icon (Open) at the top of
  the column of icons on the lefthand side of the screen), position to the
  forms directory (winfmx) using the Drives pull-down menu and Folders
  tree in the Open screen, select Forms (*.fmb) from the "List files of
  type" pull-down menu, and select (double click on) fzihold.fmb to bring
  up FZIHOLD in the Forms Designer.

Rename GUASKEL module name to FZIHOLD:
  Double click on the box beside (to the immediate left of) GUASKEL under
    the Forms section header.
  Type in FZIHOLD into the Name property value box, and press Enter (the
    property value box extends all the way across the top of the property
    window above the list of properties; the first property in the list of
    properties (Name) should already be selected).
  Click on the rightmost X in the Properties title line to close the
    property window.

Rename GUASKEL canvas name to FZIHOLD:
  Click on + beside the Canvas-Views section header.
  Right click on the box beside GUASKEL_1_CANVAS to bring up the menu.
  Click on Properties... in the menu.
  Highlight (select) GUASKEL in the Name property value, type in FZIHOLD
    over it, and press Enter, making it FZIHOLD_1_CANVAS.
  Click on the rightmost X in the Properties title line to close the
    property window.

Rename GUASKEL buttons to FZIHOLD:
  Click on + beside the Blocks section header.
  Click on + beside BUTTON_CONTROL_BLOCK under the Blocks section header.
  Click on + beside Items under BUTTON_CONTROL_BLOCK.
  (Or, instead of above three, you could just type GU into Find box.)
  Rename GUASKEL_1_ROLLBACK_BTN to FZIHOLD_1_ROLLBACK_BTN:
    Double click on the box (button) beside GUASKEL_1_ROLLBACK_BTN (it
      might have a typo error, and show GUASEKL_1_ROLLBACK_BTN instead).
    Highlight (select) GUASKEL in the Name property value, type in FZIHOLD
      over it, and press Enter, making it FZIHOLD_1_ROLLBACK_BTN.
    Click on the rightmost X in the Properties title line to close the
      property window.
  Rename GUASKEL_1_SAVE_BTN to FZIHOLD_1_SAVE_BTN as described above.
  Rename GUASKEL_1_EXIT_BTN to FZIHOLD_1_EXIT_BTN as described above.
  (If you don't need the ROLLBACK and SAVE buttons for your particular
    form, you could delete them as described below for CHECK_KEYS,
    instead of doing the rename's above for them.)

Remove CHECK_KEYS item:
  Click on the CHECK_KEYS text (under the FZIHOLD buttons).
  Click on the X icon (Delete) on the lefthand side of the screen (or,
    press the Delete key), answering Yes to the delete confirmation
    message to delete that item.

Remove KEY_BLOCK item (which contains the fields displayed on the original
GUASKEL screen; but, see the notes at the end when developing your forms):
  Click on the KEY_BLOCK text (under Blocks section header).
  Click on the X icon (Delete) on the lefthand side of the screen (or,
    press the Delete key), answering Yes to the delete confirmation
    message to delete that item.

Create FABINVH block to hold 10 FABINVH records at a time for the screen:
  Click on the Blocks section header.
  Click on the + icon (Create) on the lefthand side to create an item and
    bring up the New Block Options window.
  Type in FIMSMGR.FABINVH into the Base Table field (which also changes
    the Block Name field when you click into it - you could change that
    field value to name this block something other than FABINVH, such as
    FZIHOLD_BLOCK or back to the original KEY_BLOCK).
  Click on the Items tab in the New Block Options window.
  Click on the Select Columns button to bring in all columns in the
    FABINVH table.
  Click on each field in the Select Columns list (or, arrow down; make
    sure that Caps Lock is off before using the arrow or Enter keys),
    starting with FABINVH_POHD_CODE, and press Enter (or, click on the
    Include checkbox to uncheck it) to exclude that field (puts a "-"
    beside that field name in place of the +) for all fields except for:
      FABINVH_CODE, FABINVH_TRANS_DATE, FABINVH_HOLD_IND,
        FABINVH_CANCEL_IND
  Click on FABINVH_HOLD_IND in the Select Columns list and select
    Check Box in the Type pull-down menu to the right.
  Click on FABINVH_CANCEL_IND in the Select Columns list and select
    Check Box in the Type pull-down menu to the right.
  Click on the Layout tab in the New Block Options window.
  Enter 10 into Records.
  Click on the Scrollbar option to check it.
  Click on the OK button at the bottom of the New Block Options window.

Add PAYEE1 and TOTAL items to FABINVH block (their values will be derived
in a POST-QUERY trigger):
  Click on Items under FABINVH in the Blocks section.
  Click on the + icon (Create) on the lefthand side to create a new item
    (probably initially called ITEM1).
  Double click on abc box beside ITEM1 to bring up the property window.
  Highlight (select) ITEM1 in Name property value and type in PAYEE1 over
    it, and press Enter.
  Click on the Canvas property in the Display section, click on the arrow
    on the right end of the property value box, and select FZIHOLD_1_CANVAS
    (or, you could just double click on the Canvas property or press Enter
    to cycle around to that FZIHOLD_1_CANVAS value).
  Click on the rightmost X in the Properties title line to close the
    property window.
Do the same for TOTAL:
  Click on Items under FABINVH in the Blocks section.
  Click on the + icon (Create) on the lefthand side to create a new item
    (probably initially called ITEM2).
  Double click on abc box beside ITEM2 to bring up the property window.
  Highlight (select) ITEM2 in Name property value and type in TOTAL over
    it, and press Enter.
  Click on the Canvas property in the Display section, click on the arrow
    on the right end of the property value box, and select FZIHOLD_1_CANVAS
    (or, you could just double click on the Canvas property or press Enter
    to cycle around to that FZIHOLD_1_CANVAS value).
  Click on the rightmost X in the Properties title line to close the
    property window.

Arrange the items in the FZIHOLD_1_CANVAS so that they are lined up left
to right in the following order:
  FABINVH_CODE, PAYEE1, FABINVH_TRANS_DATE, TOTAL, FABINVH_HOLD_IND,
    FABINVH_CANCEL_IND, and the vertical scroll bar,
as shown at the top of this web page (PAYEE1 and TOTAL will be on top of
each other in the upper left corner, so, you'll have to move one to see
the other; the FABINVH fields will be toward the bottom of the form, so
you will have to scroll down to them):
  Click on + beside Canvas-Views section header (if not already expanded).
  Double click on box beside FZIHOLD_1_CANVAS to open up the screen editor.
  Click on and drag each 10-row item to its spot on the canvas, and, then,
    enlarge it or shrink it horizontally as needed by clicking on the square
    handle in the middle of the left or right edges of the item and dragging
    the handle left or right to fit (you can see the name of the item by
    double clicking on it to bring up it's property box; you'll have to
    enlarge the PAYEE1 text item and shrink the IND checkbox items).  (Below,
    I give you the actual coordinates I ended up with for the table's items.)
  Click on each item, click on Format | Font, select Arial, Regular, 8, and
    press the OK button, to set the font for that item.
  Click on and drag the Rollback, Save, and Exit buttons to align them
    below the grid of items.

Create headings above the items in the screen editor:
  Click on and delete (press the Delete key) each of the text headers from
    the added items and block and the leftover ID and Name headers.
  Click on Format | Font, select Arial, Regular, 8, and press the OK button,
    to set the font for all subsequent headings.
  Click on Format | Alignment | Center to center all subsequent headings.
    (I can't get centering to stick, but, maybe it will work for you.)
  Click on the Line Color icon (2nd icon below the huge T near the lower
    left corner) and select No Line below the color grid to not show a
    box around subsequent headings.
  Double click on the Text icon (T in the middle of the lefthand side of
    the screen, not the huge T near the lower left corner) to pin it for
    several text header additions.
  Click above the FABINVH_CODE item, and type in Invh<return>Code (<return>
    is the Enter key) to create the invoice code heading (don't worry about
    alignment just yet).
  Create headings for Payee, Trans<return>Date, Total, Cancel<return>Ind,
    and Hold<return>Ind as described above, clicking twice on the canvas
    before typing.
  Click on the diagonal arrow icon (Select) (topmost icon on left side)
    so that your cursor turns into an arrow instead of a + (make sure you
    don't have a text item currently being edited by clicking on the canvas
    once to close the current item; otherwise, the pinned Text icon will
    stay selected).
  Click on and drag each of the headings to align them above their items
    as close as you can.
  To align the tops of the headings, select all headings by holding down
    the left mouse button and dragging a selection box completely around
    all of the headings (but nothing else), then, click on Arrange | Align
    Objects, select Align Top in the Vertically box, and click on the OK
    button.  You may also have to click on View | Grid Snap to uncheck that
    option and allow you free movement of those selected items, instead of
    snapping to grid.

Finally, click on the lower right corner of the canvas area (the clear part)
to show its square handle, and drag the lower right corner up to just under
the row of buttons and just right of the vertical scroll bar so that it just
fits around the items on the canvas; then, click on the rightmost (or lower)
X in the screen editor title line to close the screen editor window.

Modify properties of FZIHOLD screen items:
  Click on + beside Blocks section header (if not already expanded).
  Click on + beside FABINVH in the Blocks section (if not already expanded).
  Click on + beside Items section header under FABINVH (if not already
    expanded).
  Double click on abc box beside TOTAL under Items section header to open
    up its property window.
  Click on the following properties and enter the given values for them
    (the X Position, Y Position, Width, and Height are what my positions
    for the item turned out to be, which you may or may not want to change,
    but, if you do, you'll want to go back into the FZIHOLD_1_CANVAS and
    readjust the headings on your screen after finishing these property
    changes; some of these property values are selected from the property
    value box pull-down menu using the arrow on the right end of the value
    box, or, you can double click or press Enter on them to cycle through
    their values):
      Display
        X Position                57
        Y Position                3
        Width                     13
      Data
        Data Type                 Number
        Maximum Length            14
        Format Mask               $9,999,990.99
      Navigation
        Enabled                   False
        Navigable                 False
      Database
        Base Table Item           False
        Insert Allowed            False
        Query Allowed             False
        Update Allowed            False
      Functional
        Alignment                 Right
  Click on the rightmost X in the Properties title line to close the
    property window.
  Do the same for the following properties for the PAYEE1 item:
      Display
        X Position                16
        Y Position                3
        Width                     30
      Navigation
        Enabled                   False
        Navigable                 False
      Database
        Base Table Item           False
        Insert Allowed            False
        Query Allowed             False
        Update Allowed            False
      Functional
        Alignment                 Left
  Do the same for the following properties for the FABINVH_CODE item:
      Display
        X Position                6
        Y Position                3
      Database
        Query Only                True
        Primary Key               True
        Insert Allowed            False
        Update Allowed            False
  Do the same for the following properties for the FABINVH_TRANS_DATE item:
      Display
        X Position                46
        Y Position                3
      Database
        Query Only                True
        Insert Allowed            False
        Update Allowed            False
  Do the same for the following properties for the FABINVH_HOLD_IND item:
      Display
        X Position                77
        Y Position                3
        Width                     2
      Database
        Insert Allowed            False
      Functional
        Label                     <delete it to blank it out>
        Check Box Other Values    Unchecked
  Do the same for the following properties for the FABINVH_CANCEL_IND item:
      Display
        X Position                72
        Y Position                3
        Width                     2
      Database
        Query Only                True
        Insert Allowed            False
        Update Allowed            False
      Functional
        Label                     <delete it to blank it out>
        Check Box Other Values    Unchecked
      Miscellaneous
        Auto Hint                 True
  Do the same for the following properties for the FABINVH block:
      Display
        Scroll Bar X Position     81
        Scroll Bar Y Position     3
      Database
        Delete Allowed            False
        Insert Allowed            False
        WHERE Clause              fabinvh_open_paid_ind = 'O'
        ORDER BY Clause           fabinvh_code
        Records Buffered          20
        Update Changed Columns    True
      Miscellaneous
        In Menu                   False
        Block Description         <delete it to blank it out>
  Do the same for the following properties for the MAIN_WINDOW, after
  clicking on + beside Windows section header.
      Display
        Width                     84
        Height                    16
        Title                     Invoice Hold Indicator Change
  Do the same for the following properties for the FZIHOLD_1_CANVAS:
    Right click on the box beside FZIHOLD_1_CANVAS to bring up the menu.
    Click on Properties... in the menu.
      Display
        Width                     84
        Height                    16
If you typed in any of the position, width, or height values, double click
on the box beside FZIHOLD_1_CANVAS in the Canvas-Views section to open up
the screen editor and adjust the column headings text to align them over
their items again for those new positions.  Close the screen editor after
you've finished adjusting the headings and realigning them.

Add the code to fill in the TOTAL and PAYEE1 items on the screen, which
will run from the FABINVH block's POST-QUERY trigger:
  Click on + beside Blocks section header (if not already expanded).
  Click on + beside FABINVH under the Blocks section header (if not already
    expanded).
  Click on Triggers under FABINVH block.
  Click on the + icon (Create) on the lefthand side to create a trigger,
    select POST-QUERY from the pull-down menu, and click on the OK button
    to create the trigger and bring up the PL/SQL Editor.
  Enter the following select statements to fill in TOTAL and PAYEE1:

begin
select nvl(sum(farinva_appr_amt),0)-nvl(sum(farinva_disc_amt),0)+
   nvl(sum(decode(nvl(va.ftvvend_collect_tax,'N'),'N',0,farinva_tax_amt)),0)+
   nvl(sum(farinva_addl_chrg_amt),0) into :FABINVH.TOTAL
   from farinva,fabinvh,ftvvend va
   where fabinvh_code = :FABINVH.FABINVH_CODE
   and farinva_invh_code = fabinvh_code
   and fabinvh_vend_pidm = va.ftvvend_pidm(+)
   and (not exists
      (select vb.ftvvend_pidm from ftvvend vb
         where vb.ftvvend_pidm = fabinvh_vend_pidm)
   or va.ftvvend_eff_date =
      (select max(vb.ftvvend_eff_date) from ftvvend vb
         where vb.ftvvend_pidm = va.ftvvend_pidm
         and trunc(vb.ftvvend_eff_date) <= trunc(sysdate)));
end;
begin
select substr(decode(va.ftvvend_entity_ind,'C',spriden_last_name,
      spriden_first_name || ' ' || spriden_mi || ' ' || spriden_last_name),
      1,30) into :FABINVH.PAYEE1
      from fabinvh,spriden,ftvvend va
      where fabinvh_code = :FABINVH.FABINVH_CODE
      and spriden_pidm = fabinvh_vend_pidm
      and spriden_change_ind is null
      and va.ftvvend_pidm = spriden_pidm
      and va.ftvvend_eff_date =
         (select max(vb.ftvvend_eff_date) from ftvvend vb
            where vb.ftvvend_pidm = va.ftvvend_pidm
            and trunc(vb.ftvvend_eff_date) <= trunc(sysdate));
exception
   when no_data_found
   then
      :FABINVH.PAYEE1 := 'NO VENDOR NAME FOUND' ;
end;

  Click on the rightmost (or lower) X in the PL/SQL Editor title line
    to close the PL/SQL editor window.

Update the triggers for FZIHOLD:
  Click on + beside Triggers section header.
  For each of the following triggers to add code to:
    Double click on the box beside the indicated trigger name to bring up
      the PL/SQL editor for that trigger.
    Add or update the code as shown.
    Click on the rightmost (or lower) X in the PL/SQL Editor title line
      to close the PL/SQL editor window (or, you could just pick the next
      trigger to edit from the PL/SQL editor window's Name pull-down menu
      above the code pane).
  Triggers to update:
    Trigger WHEN-NEW-BLOCK-INSTANCE:
      Add this trigger by clicking on the Triggers section header and,
        then, clicking on the + icon (Create) on the lefthand side of
        the screen, selecting WHEN-NEW-BLOCK-INSTANCE from the list of
        trigger types, and clicking on the OK button.
      Add the following code:
        EXECUTE_QUERY;
    Trigger LOAD_CURRENT_RELEASE:
      Replace release number with 2.1.11, as in:
        BEGIN
          :CURRENT_RELEASE := '2.1.11';
        END;
    Trigger PRE-FORM:
      Comment out CHECK_SET line (by putting two dashes in front of it):
        --  G$_GUAMENU_CHECK_SET('');
    Trigger SAVE_KEYS:
      Replace current code with:
        null;
    Trigger GLOBAL_COPY:
      Replace current code with:
        null;
    Trigger ENABLE_KEYS:
      Replace current code with:
        null;
    Trigger DISABLE_KEYS:
      Remove this trigger by clicking on it under the Triggers section
      header (you must be out of the PL/SQL Editor to do this) and, then,
      clicking on the X icon (Delete) on the lefthand side of the screen
      (or, pressing the Delete key), answering Yes to the delete
      confirmation message (or, you could have also just replaced its
      code with null; like what was done for the ENABLE_KEYS trigger).
    Trigger PRE-UPDATE:
      I removed this trigger as well, since I didn't want the Activity
      Date in FABINVH to be updated when the hold indicator was released.

All the editing has been done now for the new form.  Save and generate the
form:
  Click on FZIHOLD under the Forms section header.
  Click on File | Save to save the module.
  Click on File | Administration | Generate to generate the module's .fmx
    file.
If any errors were encountered during the generation, an error message box
would be displayed showing the error and where it occurred.  Go back and
fix any errors, save the module, and do the generate again until all of
the errors are cleared up.

Exit the Forms Designer, without saving after the generate (so that no
generated pseudocode is placed into the final .fmb):
  Click on File | Exit to exit the Designer, answering No to the save
    changes message.

Copy the fzihold.fmx generated form to your winfmx directory with all of
your other Banner generated forms, if you didn't create it and generate
it in that winfmx directory in the first place.

Finally, add the form to the Banner security system.  After bringing up the
Banner security form (these instructions are for Banner 2.1.x screens):
  1) Add the form to the list of Banner objects:
    Click on the Object Maintenance button.
    Click on the Insert button.
    Add the following information for FZIHOLD (in our case, giving the current
      Finance version number, F sys code, and a default role of BAN_DEFAULT_M
      for forms that modify the tables, or BAN_DEFAULT_Q for forms that only
      query tables):
        FZIHOLD   2.1.11   F   BAN_DEFAULT_M
    Click on the Save button.
  2) Add the form to the classes that will have access to it (if any):
    Click on the Class Maintenance button.
    Click on the Class Code of the class to add the form to.
    Click on the Class Objects button.
    Click on the Insert button
    Add the following information for FZIHOLD:
      FZIHOLD   BAN_DEFAULT_M
    Click on the Save button.
    Click on the Close button.
    Click on the Class Code for the class just updated.
    Click on the Sync Users button.
    Click on the next Class Code to be updated, and repeat the above process
      as needed to add all classes for that form.
    Click on the Close button after adding all classes for that form.
  3) Add the form to the individual users that will have access to it, but
  not through the classes (if any):  
    Click on the User Maintenance button.
    Enter the User ID of the person that will be using the form.
    Click on the Modify button.
    Click on the Insert button.
    Add the following information for FZIHOLD:
      FZIHOLD   BAN_DEFAULT_M
    Click on the Save button.
    Click on the Close button.
    Enter the User ID of the next person that will be using the form, and
      repeat the above process as needed to add all users for that form.
    Click on the Close button after adding all users for that form.
  4) Click on the Exit button to exit the Banner security form.
For Banner 3.x, you will also have to add the new form to the guaobjs screen
in Banner itself.

Your form is now ready to be used through Banner 3.

Banner 4 Version

The screen layout for the Banner 4 version of FZIHOLD is shown below, which is a snapshot of the Forms Designer's screen layout editor.  Note that there are no Rollback, Save, or Exit buttons.  These are replaced by the standard set of icons automatically placed along the top of all Banner 4 screens.   Also note that the screen coordinates are given in pixels for Banner 4, instead of in characters.

forms124.jpg (85481 bytes)

The steps for creating FZIHOLD using the gtvobjt.fmb form as the skeleton model are shown below.

Copy gtvobjt.fmb to fzihold.fmb (may have to FTP it from the Oracle server
  from $BANNER_HOME/general/forms/gtvobjt.fmb), probably in the winfmx
  forms directory on your Windows PC client network.
Bring up the Forms Designer (f45des32.exe), in the orawin\bin directory
  on your Windows PC).
Click on File | Connect (item in the menu line across the top of the Forms
  Designer's Object Navigator screen) and log in as user baninst1 (our
  Forms Designer tends to crash if we don't connect first).
Click on File | Open (or, click on the folder icon (Open) at the top of
  the column of icons on the lefthand side of the screen), position to the
  forms directory (winfmx) using the Drives pull-down menu and Folders
  tree in the Open screen, select Forms (*.fmb) from the "List files of
  type" pull-down menu, and select (double click on) fzihold.fmb to bring
  up FZIHOLD in the Forms Designer.

Rename GTVOBJT module name to FZIHOLD:
  Double click on the box beside (to the immediate left of) GTVOBJT under
    the Forms section header.
  Type in FZIHOLD into the Name property value box, and press Enter (the
    property value box extends all the way across the top of the property
    window above the list of properties; the first property in the list of
    properties (Name) should already be selected).
  Click on the rightmost X in the Properties title line to close the
    property window.

Rename GTVOBJT canvas name to FZIHOLD:
  Click on + beside the Canvas-Views section header.
  Right click on the box beside GTVOBJT_1_CANVAS to bring up the menu.
  Click on Properties... in the menu.  (Or, could have double clicked
    on the box.)
  Highlight (select) GTVOBJT in the Name property value, type in FZIHOLD
    over it, and press Enter, making it FZIHOLD_1_CANVAS.
  Click on the rightmost X in the Properties title line to close the
    property window.

Rename GTVOBJT buttons to FZIHOLD:
  Click on + beside the Blocks section header.
  Click on + beside BUTTON_CONTROL_BLOCK under the Blocks section header.
  Click on + beside Items under BUTTON_CONTROL_BLOCK.
  (Or, instead of above three, you could just type GU into Find box.)
  Rename GTVOBJT_1_EXITVALUE_BTN to FZIHOLD_1_EXITVALUE_BTN:
    Double click on the box (button) beside GTVOBJT_1_EXITVALUE_BTN.
    Highlight (select) GTVOBJT in the Name property value, type in FZIHOLD
      over it, and press Enter, making it FZIHOLD_1_EXITVALUE_BTN.
    Click on the rightmost X in the Properties title line to close the
      property window.

Remove GTVOBJT item (which contains the fields displayed on the original
GTVOBJT screen; but, see the notes at the end when developing your forms):
  Click on the GTVOBJT text (under Blocks section header).
  Click on the X icon (Delete) on the lefthand side of the screen (or,
    press the Delete key), answering Yes to the delete confirmation
    message to delete that item.

Create FABINVH block to hold 10 FABINVH records at a time for the screen:
  Click on the Blocks section header.
  Click on the + icon (Create) on the lefthand side to create an item and
    bring up the New Block Options window.
  Type in FIMSMGR.FABINVH into the Base Table field (which also changes
    the Block Name field when you click into it - you could change that
    field value to name this block something other than FABINVH, such as
    FZIHOLD_BLOCK or back to the original KEY_BLOCK).
  Click on the Items tab in the New Block Options window.
  Click on the Select Columns button to bring in all columns in the
    FABINVH table.
  Click on each field in the Select Columns list (or, arrow down; make
    sure that Caps Lock is off before using the arrow or Enter keys),
    starting with FABINVH_POHD_CODE, and press Enter (or, click on the
    Include checkbox to uncheck it) to exclude that field (puts a "-"
    beside that field name in place of the +) for all fields except for:
      FABINVH_CODE, FABINVH_TRANS_DATE, FABINVH_HOLD_IND,
        FABINVH_CANCEL_IND
  Click on FABINVH_HOLD_IND in the Select Columns list and select
    Check Box in the Type pull-down menu to the right.
  Click on FABINVH_CANCEL_IND in the Select Columns list and select
    Check Box in the Type pull-down menu to the right.
  Click on the Layout tab in the New Block Options window.
  Enter 10 into Records.
  Click on the Scrollbar option to check it.
  Click on the OK button at the bottom of the New Block Options window.

Add PAYEE1 and TOTAL items to FABINVH block (their values will be derived
in a POST-QUERY trigger):
  Click on Items under FABINVH in the Blocks section.
  Click on the + icon (Create) on the lefthand side to create a new item
    (probably initially called ITEM1).
  Double click on abc box beside ITEM1 to bring up the property window.
  Highlight (select) ITEM1 in Name property value and type in PAYEE1 over
    it, and press Enter.
  Click on the Canvas property in the Display section, click on the arrow
    on the right end of the property value box, and select FZIHOLD_1_CANVAS
    (or, you could just double click on the Canvas property or press Enter
    to cycle around to that FZIHOLD_1_CANVAS value).
  Click on the rightmost X in the Properties title line to close the
    property window.
Do the same for TOTAL:
  Click on Items under FABINVH in the Blocks section.
  Click on the + icon (Create) on the lefthand side to create a new item
    (probably initially called ITEM2).
  Double click on abc box beside ITEM2 to bring up the property window.
  Highlight (select) ITEM2 in Name property value and type in TOTAL over
    it, and press Enter.
  Click on the Canvas property in the Display section, click on the arrow
    on the right end of the property value box, and select FZIHOLD_1_CANVAS
    (or, you could just double click on the Canvas property or press Enter
    to cycle around to that FZIHOLD_1_CANVAS value).
  Click on the rightmost X in the Properties title line to close the
    property window.

Arrange the items in the FZIHOLD_1_CANVAS so that they are lined up left
to right in the following order:
  FABINVH_CODE, PAYEE1, FABINVH_TRANS_DATE, TOTAL, FABINVH_HOLD_IND,
    FABINVH_CANCEL_IND, and the vertical scroll bar,
as shown at the top of this web page (PAYEE1 and TOTAL will be on top of
each other in the upper left corner, so, you'll have to move one to see
the other; the FABINVH fields will be toward the bottom of the form, so
you will have to scroll down to them):
  Click on + beside Canvas-Views section header (if not already expanded).
  Double click on box beside FZIHOLD_1_CANVAS to open up the screen editor.
  Click on and drag each 10-row item to its spot on the canvas, and, then,
    enlarge it or shrink it horizontally as needed by clicking on the square
    handle in the middle of the left or right edges of the item and dragging
    the handle left or right to fit (you can see the name of the item by
    double clicking on it to bring up it's property box; you'll have to
    enlarge the PAYEE1 text item and shrink the IND checkbox items).  (Below,
    I give you the actual coordinates I ended up with for the table's items.)
  Click on each item, click on Format | Font, select Arial, Regular, 8, and
    press the OK button, to set the font for that item.

Create headings above the items in the screen editor:
  Click on and delete (press the Delete key) each of the text headers from
    the added items and block and the leftover ID and Name headers.
  Click on Format | Font, select Arial, Regular, 8, and press the OK button,
    to set the font for all subsequent headings.
  Click on Format | Alignment | Center to center all subsequent headings.
  Click on the Line Color icon (2nd icon below the huge T near the lower
    left corner) and select No Line below the color grid to not show a
    box around subsequent headings.
  Double click on the Text icon (T in the middle of the lefthand side of
    the screen, not the huge T near the lower left corner) to pin it for
    several text header additions.
  Click above the FABINVH_CODE item, and type in Invh<return>Code (<return>
    is the Enter key) to create the invoice code heading (don't worry about
    alignment just yet).
  Create headings for Payee, Trans<return>Date, Total, Cancel<return>Ind,
    and Hold<return>Ind as described above, clicking twice on the canvas
    before typing.
  Click on the diagonal arrow icon (Select) (topmost icon on left side)
    so that your cursor turns into an arrow instead of a + (make sure you
    don't have a text item currently being edited by clicking on the canvas
    once to close the current item; otherwise, the pinned Text icon will
    stay selected).
  Click on and drag each of the headings to align them above their items
    as close as you can.
  To align the tops of the headings, select all headings by holding down
    the left mouse button and dragging a selection box completely around
    all of the headings (but nothing else), then, click on Arrange | Align
    Objects, select Align Top in the Vertically box, and click on the OK
    button.  You may also have to click on View | Grid Snap to uncheck that
    option and allow you free movement of those selected items, instead of
    snapping to grid.

Finally, click on the lower right corner of the canvas area (the clear part)
to show its square handle, and drag the lower right corner up to just under
the row of buttons and just right of the vertical scroll bar so that it just
fits around the items on the canvas; then, click on the rightmost (or lower)
X in the screen editor title line to close the screen editor window.

Modify properties of FZIHOLD screen items:
  Click on + beside Blocks section header (if not already expanded).
  Click on + beside FABINVH in the Blocks section (if not already expanded).
  Click on + beside Items section header under FABINVH (if not already
    expanded).
  Double click on abc box beside TOTAL under Items section header to open
    up its property window.
  Click on the following properties and enter the given values for them
    (the X Position, Y Position, Width, and Height are what my positions
    for the item turned out to be, which you may or may not want to change,
    but, if you do, you'll want to go back into the FZIHOLD_1_CANVAS and
    readjust the headings on your screen after finishing these property
    changes; some of these property values are selected from the property
    value box pull-down menu using the arrow on the right end of the value
    box, or, you can double click or press Enter on them to cycle through
    their values):
      Display
        X Position                317
        Y Position                37
        Width                     60
      Data
        Data Type                 Number
        Maximum Length            14
        Format Mask               $9,999,990.99
      Navigation
        Enabled                   False
        Navigable                 False
      Database
        Base Table Item           False
        Insert Allowed            False
        Query Allowed             False
        Update Allowed            False
      Functional
        Alignment                 Right
  Click on the rightmost X in the Properties title line to close the
    property window.
  Do the same for the following properties for the PAYEE1 item:
      Display
        X Position                66
        Y Position                37
        Width                     187
      Navigation
        Enabled                   False
        Navigable                 False
      Database
        Base Table Item           False
        Insert Allowed            False
        Query Allowed             False
        Update Allowed            False
      Functional
        Alignment                 Left
  Do the same for the following properties for the FABINVH_CODE item:
      Display
        X Position                13
        Y Position                37
        Width                     53
      Database
        Query Only                True
        Primary Key               True
        Insert Allowed            False
        Update Allowed            False
  Do the same for the following properties for the FABINVH_TRANS_DATE item:
      Display
        X Position                254
        Y Position                37
        Width                     64
      Database
        Query Only                True
        Insert Allowed            False
        Update Allowed            False
  Do the same for the following properties for the FABINVH_HOLD_IND item:
      Display
        X Position                414
        Y Position                37
        Width                     10
      Database
        Insert Allowed            False
      Functional
        Label                     <delete it to blank it out>
        Check Box Other Values    Unchecked
  Do the same for the following properties for the FABINVH_CANCEL_IND item:
      Display
        X Position                389
        Y Position                37
        Width                     10
      Database
        Query Only                True
        Insert Allowed            False
        Update Allowed            False
      Functional
        Label                     <delete it to blank it out>
        Check Box Other Values    Unchecked
      Miscellaneous
        Auto Hint                 True
  Do the same for the following properties for the FABINVH block:
      Display
        Scroll Bar X Position     474
        Scroll Bar Y Position     37
      Database
        Delete Allowed            False
        Insert Allowed            False
        WHERE Clause              fabinvh_open_paid_ind = 'O'
        ORDER BY Clause           fabinvh_code
        Records Buffered          20
        Update Changed Columns    True
      Miscellaneous
        In Menu                   False
        Block Description         <delete it to blank it out>
  Do the same for the following properties for the MAIN_WINDOW, after
  clicking on + beside Windows section header.
      Display
        Width                     460
        Height                    200
        Title                     Invoice Hold Indicator Change
  Do the same for the following properties for the FZIHOLD_1_CANVAS:
    Right click on the box beside FZIHOLD_1_CANVAS to bring up the menu.
    Click on Properties... in the menu.
      Display
        Width                     460
        Height                    200
If you typed in any of the position, width, or height values, double click
on the box beside FZIHOLD_1_CANVAS in the Canvas-Views section to open up
the screen editor and adjust the column headings text to align them over
their items again for those new positions.  Close the screen editor after
you've finished adjusting the headings and realigning them.

Add the code to fill in the TOTAL and PAYEE1 items on the screen, which
will run from the FABINVH block's POST-QUERY trigger:
  Click on + beside Blocks section header (if not already expanded).
  Click on + beside FABINVH under the Blocks section header (if not already
    expanded).
  Click on Triggers under FABINVH block.
  Click on the + icon (Create) on the lefthand side to create a trigger,
    select POST-QUERY from the pull-down menu, and click on the OK button
    to create the trigger and bring up the PL/SQL Editor.
  Enter the following select statements to fill in TOTAL and PAYEE1:

begin
select nvl(sum(farinva_appr_amt),0)-nvl(sum(farinva_disc_amt),0)+
   nvl(sum(decode(nvl(va.ftvvend_collect_tax,'N'),'N',0,farinva_tax_amt)),0)+
   nvl(sum(farinva_addl_chrg_amt),0) into :FABINVH.TOTAL
   from farinva,fabinvh,ftvvend va
   where fabinvh_code = :FABINVH.FABINVH_CODE
   and farinva_invh_code = fabinvh_code
   and fabinvh_vend_pidm = va.ftvvend_pidm(+)
   and (not exists
      (select vb.ftvvend_pidm from ftvvend vb
         where vb.ftvvend_pidm = fabinvh_vend_pidm)
   or va.ftvvend_eff_date =
      (select max(vb.ftvvend_eff_date) from ftvvend vb
         where vb.ftvvend_pidm = va.ftvvend_pidm
         and trunc(vb.ftvvend_eff_date) <= trunc(sysdate)));
end;
begin
select substr(decode(va.ftvvend_entity_ind,'C',spriden_last_name,
      spriden_first_name || ' ' || spriden_mi || ' ' || spriden_last_name),
      1,30) into :FABINVH.PAYEE1
      from fabinvh,spriden,ftvvend va
      where fabinvh_code = :FABINVH.FABINVH_CODE
      and spriden_pidm = fabinvh_vend_pidm
      and spriden_change_ind is null
      and va.ftvvend_pidm = spriden_pidm
      and va.ftvvend_eff_date =
         (select max(vb.ftvvend_eff_date) from ftvvend vb
            where vb.ftvvend_pidm = va.ftvvend_pidm
            and trunc(vb.ftvvend_eff_date) <= trunc(sysdate));
exception
   when no_data_found
   then
      :FABINVH.PAYEE1 := 'NO VENDOR NAME FOUND' ;
end;

  Click on the rightmost (or lower) X in the PL/SQL Editor title line
    to close the PL/SQL editor window.

Update the triggers for FZIHOLD:
  Click on + beside Triggers section header.
  For each of the following triggers to add code to:
    Double click on the box beside the indicated trigger name to bring up
      the PL/SQL editor for that trigger.
    Add or update the code as shown.
    Click on the rightmost (or lower) X in the PL/SQL Editor title line
      to close the PL/SQL editor window (or, you could just pick the next
      trigger to edit from the PL/SQL editor window's Name pull-down menu
      above the code pane).
  Triggers to update:
    Trigger WHEN-NEW-BLOCK-INSTANCE:
      Add this trigger by clicking on the Triggers section header and,
        then, clicking on the + icon (Create) on the lefthand side of
        the screen, selecting WHEN-NEW-BLOCK-INSTANCE from the list of
        trigger types, and clicking on the OK button.
      Add the following code:
        EXECUTE_QUERY;
    Trigger LOAD_CURRENT_RELEASE:
      Replace release number with 4.0, as in:
        BEGIN
          :CURRENT_RELEASE := '4.0';
        END;
    Trigger PRE-UPDATE:
      I removed this trigger, since I didn't want the Activity Date in
      FABINVH to be updated when the hold indicator was released.  To
      remove it, click on it and press the Delete key (or X icon).

All the editing has been done now for the new form.  Save and generate the
form:
  Click on FZIHOLD under the Forms section header.
  Click on File | Save to save the module.
  Click on File | Administration | Generate to generate the module's .fmx
    file.
If any errors were encountered during the generation, an error message box
would be displayed showing the error and where it occurred.  Go back and
fix any errors, save the module, and do the generate again until all of
the errors are cleared up.

Exit the Forms Designer, without saving after the generate (so that no
generated pseudocode is placed into the final .fmb):
  Click on File | Exit to exit the Designer, answering No to the save
    changes message.

Copy the fzihold.fmx to winfmx, add it to Banner security, and add it to
the guaobjs screen in Banner 4, as described for Banner 3.x.

Your form is now ready to be used through Banner 4.

Further Information on Forms Designer:

Allowing For Deletes

To allow for deletes from the base table, just set the Delete Allowed property in the Database section of the base table's block (such as FABINVH above) to True.  This enables the Record | Remove action in the form's menu in Banner.  You could also add a Delete button with the following, instead of having to go through the menu to remove the currently selected record (this example is different from FZIHOLD):

  Click on + beside Blocks section header (if not already expanded).
  Click on + beside BUTTON_CONTROL_BLOCK in the Blocks section (if not
    already expanded).
  Click on Items under BUTTON_CONTROL_BLOCK in the Blocks section.
  Click on the + icon (Create) on the lefthand side to create a new item
    (maybe initially called ITEM3).
  Double click on abc box beside ITEM3 to bring up the property window.
  Highlight (select) ITEM3 in Name property value and type in the button
    name (such as PZPRIOR_1_DELETE_BTN) over it, and press Enter.
  Click on the Item Type property in the Type section, click on the arrow
    on the right end of the property value box, and select Button.
  Click on the Canvas property in the Display section, click on the arrow
    on the right end of the property value box, and select PZPRIOR_1_CANVAS
    (or, you could just double click on the Canvas property or press Enter
    to cycle around to that canvas value).
  Double click on the Navigable property in the Navigation section to set
    it to False.
  Double click on the Mouse Navigate property in the Navigation section
    to set it to False.
  Click on the Label property in the Functional section, type in Delete,
    and press Enter.
  Click on the rightmost X in the Properties title line to close the
    property window.
  Click on + beside PZPRIOR_1_DELETE_BTN item.
  Click on Triggers under PZPRIOR_1_DELETE_BTN item.
  Click on the + icon (Create) on the lefthand side to create a trigger,
    select WHEN-BUTTON-PRESSED from the pull-down-menu, and click on the
    OK button to create the trigger and bring up the PL/SQL Editor.
  Enter the following function to perform the deletion:
    do_key('Delete_record');
  Click on the rightmost (or lower) X in the PL/SQL Editor title line
    to close the PL/SQL editor window.

Allowing For Inserts

To allow for inserts into the base table, you will have to set the Insert Allowed property in the Database section of the base table's block (such as FABINVH above) to True, along with the properties of the base table items in the form, as shown below ("With Inserts" in Property Settings For Screen Items).  This enables the Record | Insert action in the form's menu in Banner.   You could also add an Insert button, similar to the Delete button above, with the following in the WHEN-BUTTON-PRESSED trigger:

    do_key('Create_record');

instead of having to go through the menu to add a new record to fill in and save.

You will also need to remove the PRE-INSERT trigger in the form level (top level) Triggers section if the record you are adding does not contain an ACTIVITY_DATE field.

If you have derived fields on your screen (such as PAYEE1 above), the insert will have to fill in those fields as well.  Since the base table block probably has a POST-QUERY trigger to fill in the derived items, you could just call that POST-QUERY trigger by adding a POST-CHANGE trigger on the base table item (such as an ID or SSN item) that determines that derived field's lookup.  The POST-CHANGE trigger would, then, contain just:

    execute_trigger('POST-QUERY');

which would go back to the block level POST-QUERY trigger and execute it when that base table item was changed (during the insert, in this case).

Property Settings For Screen Items

Below is a summary of the property settings (except for positioning and formatting) for the screen items, depending on whether those items are base table items or derived items (such as PAYEE1), and if those base table items are query-only or can be updated, and if new base table item records can be inserted or no inserts are allowed.

Derived Items, All Cases:

    Navigation
      Enabled                   False
      Navigable                 False
    Database
      Base Table Item           False
      Query Only                False
      Primary Key               False
      Insert Allowed            False
      Query Allowed             False
      Update Allowed            False

Query-Only Table Items, No Inserts:

    Navigation
      Enabled                   True
      Navigable                 True
    Database
      Base Table Item           True
      Query Only                True
      Primary Key               False (True if primary key)
      Insert Allowed            False
      Query Allowed             True
      Update Allowed            False

Updatable Table Items, No Inserts:

    Navigation
      Enabled                   True
      Navigable                 True
    Database
      Base Table Item           True
      Query Only                False
      Primary Key               False (True if primary key)
      Insert Allowed            False
      Query Allowed             True
      Update Allowed            True

Query-Only Table Items, With Inserts:

    Navigation
      Enabled                   True
      Navigable                 True
    Database
      Base Table Item           True
      Query Only                False
      Primary Key               False (True if primary key)
      Insert Allowed            True
      Query Allowed             True
      Update Allowed            False

Updatable Table Items, With Inserts:

    Navigation
      Enabled                   True
      Navigable                 True
    Database
      Base Table Item           True
      Query Only                False
      Primary Key               False (True if primary key)
      Insert Allowed            True
      Query Allowed             True
      Update Allowed            True

Adding a Check Box

To add a check box to a form, for example, to set constraints in the base table's WHERE clause, you will need to add the check box to the BUTTON_CONTROL_BLOCK Items list, set it's properties, add a WHEN-CHECKBOX-CHANGED trigger to it, put it's initial value in the WHEN-NEW-BLOCK-INSTANCE trigger (assuming it isn't a table field), and put it's condition in the base table's block.  In this example (a form called GZIRSQL, which is different from the FZIHOLD form above), I'm adding a Scripts Only check box to only show records where the "sqldoc" base table's "type" field is "script" whenever that check box is checked (otherwise, showing all records if it is not checked), and doing a re-query when that check box is changed.  (To add a button, you would use the WHEN-BUTTON-PRESSED trigger instead of the WHEN-CHECKBOX-CHANGED trigger.)

  Click on + beside Blocks section header (if not already expanded).
  Click on + beside BUTTON_CONTROL_BLOCK in the Blocks section (if not
    already expanded).
  Click on Items under BUTTON_CONTROL_BLOCK in the Blocks section.
  Click on the + icon (Create) on the lefthand side to create a new item
    (maybe initially called ITEM3).
  Double click on abc box beside ITEM3 to bring up the property window.
  Highlight (select) ITEM3 in Name property value and type in the check
    box name (GZIRSQL_1_SCRIPTS) over it, and press Enter.
  Click on the Item Type property in the Type section, click on the arrow
    on the right end of the property value box, and select Check Box.
  Click on the Canvas property in the Display section, click on the arrow
    on the right end of the property value box, and select GZIRSQL_1_CANVAS
    (or, you could just double click on the Canvas property or press Enter
    to cycle around to that canvas value).
  Set the following properties as well:
    Display
      Width                     14
      Font Name                 MS Sans Serif
      Font Size                 8
      Font Weight               Demilight
    Data
      Maximum Length            1
      Default Value             Y
    Navigation
      Navigable                 False
      Mouse Navigate            False
    Functional
      Label                     Scripts Only
      Checked Value             Y
      Unchecked Value           N
  Click on the rightmost X in the Properties title line to close the
    property window.
  Click on + beside GZIRSQL_1_SCRIPTS item.
  Click on Triggers under GZIRSQL_1_SCRIPTS item.
  Click on the + icon (Create) on the lefthand side to create a trigger,
    select WHEN-CHECKBOX-CHANGED from the pull-down-menu, and click on
    the OK button to create the trigger and bring up the PL/SQL Editor.
  Enter the following function to perform the re-query:
    begin
      go_block('SQLDOC');
      execute_query;
    end;
  Click on the rightmost (or lower) X in the PL/SQL Editor title line
    to close the PL/SQL editor window.
  Click on + beside Triggers section header under GZIRSQL form name (if not
    already expanded).
  Double click on the box beside WHEN-NEW-BLOCK-INSTANCE to bring up the
    PL/SQL Editor.
  Change the code to the following:
    :GZIRSQL_1_SCRIPTS := 'Y';
    EXECUTE_QUERY;
  Click on the rightmost (or lower) X in the PL/SQL Editor title line
    to close the PL/SQL editor window.
  Double click on the box beside the SQLDOC base table block in the Blocks
    section to open up its property window.
  Click on the WHERE Clause property in the Database section, and enter the
    following clause:
    :gzirsql_1_scripts = 'N' or type = 'script'
  Click on the rightmost (or lower) X in the PL/SQL Editor title line
    to close the PL/SQL editor window.
  Click on + beside Canvas-Views section header (if not already expanded).
  Double click on box besize GZIRSQL_1_CANVAS to open up the screen editor.
  Click on and drag the check box to its appropriate spot on the canvas and
    make any other adjustments needed to the form.
  Click on the rightmost (or lower) X in the screen editor title line to
    close the screen editor window.
  Save and generate the updated form.

Calling One Form From Another

To call a second form from a primary form, using data from the primary form to bring up a matching record in the second form, you can add a Show or Edit button to the primary form, which saves the value to be matched into a global variable and calls the second form, which has a pre-query trigger to set up the match for the second form.  In this example, my form GZIRSQL is calling my form GZMRSQL to bring up the same script name that is currently selected in GZIRSQL.  In addition, after GZMRSQL is brought up with that script, I'm turning off the match criteria so that I can do additional queries in that form without having the script name match tacked on.   If GZMRSQL is brought up directly from Banner, the script search criteria isn't set, so a normal full query is performed when it is first brought up (the execute_query in the when-new-block-instance trigger) (thanks to Mike Bradley and Brian Hadizadeh for help with the query part).

In the primary form (GZIRSQL):
  Click on + beside Blocks section header (if not already expanded).
  Click on + beside BUTTON_CONTROL_BLOCK in the Blocks section (if not
    already expanded).
  Click on Items under BUTTON_CONTROL_BLOCK in the Blocks section.
  Click on the + icon (Create) on the lefthand side to create a new item
    (maybe initially called ITEM3).
  Double click on abc box beside ITEM3 to bring up the property window.
  Highlight (select) ITEM3 in Name property value and type in the button
    name (GZIRSQL_1_SHOW_BTN) over it, and press Enter.
  Click on the Item Type property in the Type section, click on the arrow
    on the right end of the property value box, and select Button.
  Click on the Canvas property in the Display section, click on the arrow
    on the right end of the property value box, and select GZIRSQL_1_CANVAS
    (or, you could just double click on the Canvas property or press Enter
    to cycle around to that canvas value).
  Set the following properties as well:
    Display
      Font Name                 MS Sans Serif
      Font Size                 8
      Font Weight               Demilight
    Navigation
      Navigable                 False
      Mouse Navigate            False
    Functional
      Label                     Show
    Miscellaneous
      Hint                      Show currently-selected script.
      Auto Hint                 True
  Click on the rightmost X in the Properties title line to close the
    property window.
  Click on + beside GZIRSQL_1_SHOW_BTN item.
  Click on Triggers under GZIRSQL_1_SHOW_BTN item.
  Click on the + icon (Create) on the lefthand side to create a trigger,
    select WHEN-BUTTON-PRESSED from the pull-down-menu, and click on
    the OK button to create the trigger and bring up the PL/SQL Editor.
  Enter the following function to perform the query-only form call (for
    an Edit button to allow updates while in that second form, you would
    use '' instead of 'QUERY' in the form call parameters):
    :global.value := :script;
    :global.form_was_called := 'Y';
    g$_secured_form_call(:global.current_user,'GZMRSQL','QUERY');
    :global.value := '';
    :global.form_was_called := '';
  Click on the rightmost (or lower) X in the PL/SQL Editor title line
    to close the PL/SQL editor window.
  Click on + beside Canvas-Views section header (if not already expanded).
  Double click on box besize GZIRSQL_1_CANVAS to open up the screen editor.
  Click on and drag the button to its appropriate spot on the canvas and
    make any other adjustments needed to the form.
  Click on the rightmost (or lower) X in the screen editor title line to
    close the screen editor window.
  Save and generate the updated form.
In the second form (GZMRSQL):
  Click on Triggers section header.
  Click on the + icon (Create) on the lefthand side to create a trigger,
    select PRE-QUERY from the pull-down-menu, and click on the OK button
    to create the trigger and bring up the PL/SQL Editor.
  Enter the following function to set the search criteria:
    if :global.form_was_called = 'Y' then
       :sqldoc.script := :global.value;
    end if;
  Click on the rightmost (or lower) X in the PL/SQL Editor title line
    to close the PL/SQL editor window.
  Click on Triggers section header.
  Click on the + icon (Create) on the lefthand side to create a trigger,
    select POST-QUERY from the pull-down-menu, and click on the OK button
    to create the trigger and bring up the PL/SQL Editor.
  Enter the following function to clear the search criteria:
    if :global.form_was_called = 'Y' then
       :global.form_was_called := '';
    end if;
  Click on the rightmost (or lower) X in the PL/SQL Editor title line
    to close the PL/SQL editor window.
  Save and generate the updated form.

Forms Development Tips and Tricks

I received the following information from Ken Komoto about KEY_BLOCK and the trigger changes that are done in this presentation, which you will want to keep in mind when you develop your own custom forms, and, possibly, modify my procedure appropriately, such as building onto KEY_BLOCK itself instead of deleting it and creating your own block.  I've updated some of my steps given above involving these items and triggers to accomodate this new information.  (Thanks, Ken!)

CHECK_KEYS makes sure that all of the required keyblock items are present.
KEY_BLOCK has a lot of fields that are used by the other triggers that can do stuff for you.
The GLOBAL_COPY trigger checks for global.keyblock_pidm, _term_code, _crn, etc., and
	populates the corresponding keyblock fields for you.  That's why, if you go from form
	to form, the student id, term code, etc., follow you around.
The SAVE_KEYS trigger takes the current key_block items and stuffs them back into the
	global.* items.
The ENABLE_KEYS trigger allows you to turn off all the buttons on the form if you are in the
	key block. 
The DISABLE_KEYS trigger is the converse - once you exit the key block, the key block
	fields and buttons are turned off and the buttons below are turned on.
G$_GUAMENU_CHECK_SET is the piece that checks to see if this form was called from
	another form or from GUAMENU.  If from another form, it will enable the SELECT button
	(if it exists).
The WHEN-NEW-BLOCK-INSTANCE trigger can be setup to take care of the execute query.
	You should normally leave the WHEN-NEW-FORM-INSTANCE trigger alone.

Lydia Verhoef notes that when defining new items on your canvas, you can utilize the Visual Attributes already loaded in guaskel to set the font type and size of fields, such as setting the Visual Attribute Name property in the Display section to G$_NVA_TEXT_ITEM when you create a new text field.  Other attributes for the other object types are available as well.

Thanks to Lee Anne Hoppe and Marcia Prater for sending me the Banner forms naming convention requirements.

Add Your Forms Development Knowledge To This Page

Since SCT won't help us with our own custom forms development, we have to help each other, so, please send your forms development tips and tricks to me, and I'll try to publish them here (but, please, no .fmb's!  I'm pushing my space limits as it is!).  Who's next after Ken to send your tips and tricks in?

This Page was Last Updated on 06/15/06

You Are Visitor Number

Hit Counter

Link to CES Home PageBack To CES Home Page

Link to Steve Rea's Oracle PageBack To Steve Rea's Oracle Page

Back to top of this pageBack To Top


© 2006
University of Arkansas
Division of Agriculture
All rights reserved.
Last Date Modified 10/27/2008
Webmaster

University of Arkansas • Division of Agriculture
Cooperative Extension Service
2301 South University Avenue
Little Rock, Arkansas 72204 • USA
Phone (501) 671-2000 • Fax (501) 671-2209
 

MissionDisclaimerEEO
PrivacyFOI