Adding a Button To Open Another Form

From NeoWiki

Revision as of 01:56, 4 October 2007 by Lorinda (Talk | contribs)
Jump to: navigation, search
This article is part of the To Base and Back Again tutorial series.

If you attempt to add a new field trip involving a location not already in the Locations table, you will encounter an error message. New locations must be added before the field trip data is entered. Because the Field Trips data entry form will be used most often, and because it is likely that users will forget to enter new locations first, we can make the user's experience easier by adding a button to the Field Trips Data Entry form that will open the Locations Data Entry form. This article explains how to do that.

Create The Necessary Macros

Note: The macros below were found in This thread of the oooforums.org Base forum. The only changes involve changing the form names.

  1. Under the Tools menu, choose Macros, then Organize Macros and finally NeoOffice Basic
  2. Click the Organizer button
  3. In the NeoOffice Basic Macro Organizer window, click on the Libraries tab
  4. Click the New button
  5. Give the new library a name. I chose "DatabaseMacros" (without the quotes)
  6. Click OK
  7. Click Close in the NeoOffice Basic Macro Organizer
  8. In the NeoOffice Basic Macros window, click on My Macros
  9. Now click on the flippy triangle next to the folder icon with the name you gave your library e.g. DatabaseMacros
  10. When the triangle "opens" the library, you will see Module1 Click on it
  11. In the Existing Macros in Module1 section, you will see the word "Main"; select it
  12. Click on the Edit button
  13. A new window will open. You will see the following lines:
    Sub Main
    End Sub
  14. Click in the blank space after the "End Sub" line
  15. Enter the following code:
REM Generic macros needed to open any form
function OpenForm( formContainer as variant, oConnection as variant, sFormName as string) as variant
Dim aProp(1) As New com.sun.star.beans.PropertyValue
aProp(0).Name = "ActiveConnection"
aProp(0).Value = oConnection
aProp(1).Name = "OpenMode"
aProp(1).Value = "open"
OpenForm = formContainer.loadComponentFromURL(sFormName,"_blank",0,aProp())
end function

function getFormsTC() as variant
getFormsTC = thisComponent.Parent.getFormDocuments
end function

function getConnectionTC() as variant
getConnectionTC = thisComponent.Drawpage.Forms(0).ActiveConnection
end function


REM Macro to open specific form called 'Locations Data Entry'. One is needed for each form you wish to open from another form.

sub OpenForm_Locations_Data_Entry( oev as variant )
sFormName = "Locations Data Entry"
OpenForm( getFormsTC, getConnectionTC, sFormName )
end sub

--> Note: code under REM Generic macros needed to open any form only needs to be entered once in the Module. If you add buttons to open other forms later, all you need to do is copy the code under REM Macro to open specific form and change the names in the first two lines to reflect the form you want opened. In the first line (that begins sub OpenForm_), you cannot use spaces in naming the macro; you must use underscores instead.

  1. Click on the Save button on the toolbar (it looks like a external "floppy" drive)
  2. Close the My Macros & Dialogs window by clicking on the red circle in the upper left hand corner.
Personal tools