Subject Save the datalinks
From Tom <IHaveNoEmail@ddress>
Date Sat, 29 Aug 2020 14:19:31 -0400
Newsgroups dbase.getting-started

Hi all,

Been fooling with this for a while and cannot get the syntax straight.
Maybe you can help.

Basic idea:

// Now: save all 4 object datalinks and then remove them so
// objects are no longer datalinked ...
form.aLinks = new array()
form.aLinks.add(form.CDATA.GETRECORDID.dataLink)
form.aLinks.add(form.CDATA.GETUSERID.dataLink)
form.aLinks.add(form.CDATA.GETGROUPNAME.dataLink)
form.aLinks.add(form.CDATA.GETSUBGROUPVALUE.dataLink)
*
form.CDATA.GETRECORDID.dataLink = null
form.CDATA.GETUSERID.dataLink = null
form.CDATA.GETGROUPNAME.dataLink = null
form.CDATA.GETSUBGROUPVALUE.dataLink = null
*
// Later: return all object datalinks so all objects are again
datalinked ...
form.CDATA.GETRECORDID.dataLink = form.aLinks[1]
form.CDATA.GETUSERID.dataLink = form.aLinks[2]
form.CDATA.GETGROUPNAME.dataLink = form.aLinks[3]
form.CDATA.GETSUBGROUPVALUE.dataLink = form.aLinks[4]
*
The above works as expected but entails a lot of typing.
*
Been trying to use Mervyn's getObject function (see below). Obtaining
form.objects array works to perfection. However, I cannot generate the
form.aLinks array as above.

Your help would be appreciated. So will Akshat I would venture to say.

Tom

function getObjects
       //The routine will start with the object
       //passed as a parameter. If no parameter
       //is passed it will start with the form
       parameters xObject
       private oRef
       local oParent
       if type('form.objects') = "U"
          form.objects = new array()
       endif
       oParent = iif( type( "xObject" ) == "O", xObject, form )
       oRef = oParent.first
       do
          // form and container
          if type( "oRef.first" ) == "O"
             class::getObjects( oRef )
          endif
          // recurse up the tree and get each parents name
          if not oRef.baseClassName == "FORM"
             o = oRef
             cName = oRef.name
             do while true
                if type("o.Parent")=="U"
                   exit
                endif
                try
                cName = o.Parent.name + "." + cName
                catch(exception e)
                endtry
                o = o.Parent
             enddo
             form.objects.add(oRef)
          endif
          // next object
          if type("oRef.before") # "U"
             oRef = oRef.before
          else
             return
          endif
       until oRef == oParent.first
       return form.objects


    function form_onOpen()
       clear
form.alinks = new array()
       ***** Alternative code which can handle containers
       class::getObjects()
       for n = 1 to form.objects.size
        if "GET" $ form.objects[n].name
        form.alinks.add( ??? ) // how do I obtain the datalink value ???
        endif
***         if form.objects[n].classname = 'PUSHBUTTON'
***            form.objects[n].onClick := class::Pushbutton_onClick
***         endif
       next
       return