This may bore most of you to tears so please disregard if it doesn’t interest 
you. 

What I am attempting is to be able to get values from objects on a card that is 
not the current card, or even in the current stack, like fields and states of 
buttons, without enumerating the entire path to the objects themselves. This is 
because the card is designed to be portable, that is, to be placed into any 
stack. The first time you go to the Database Setup card, all the sqlYoga 
database connections will be initialized, connections tested, and then 
connections made. It also has some database utility functions I use. I’ll share 
it with the community when I am done shaking out all the dust mites. 

Now I do have a few globals I use, and could do everything with globals if 
necessary, but that seems messy to my mind. Also, globals prevent the card from 
working properly in multiple stack environments! I might have a Database Setup 
card in several different stacks, and they all need to behave discreetly. (This 
is why Stack Local variables would be HUGE!) 

That is the back story. Now there are times when I need to get the values of 
objects on the Database Setup card of the current stack without actually going 
to the Database Setup card itself (I might be in a substack and it might be 
modal for instance) so I inserted the script of a button with all the Database 
Setup handlers into the message path, and then “send” commands to it, so that 
statements like:

put field “fDBType” into theDBType — this field resides on the Database Setup 
card

would execute in the context of the Database Setup card. This threw Object Not 
Found errors, so I thought maybe it’s because the script was inserted into the 
message path. I then tried this with another button on the Database Setup card 
whose script was NOT inserted into the message path and got the same result! 

At that point I put in this handler into the script of the Database Setup card:

on test
  put the short name of this card
end test

Whether I send or dispatch I get the current card of the current stack.

If however:

on test
  put the short name of me
end test

I now get “Database Setup” whether I use send or dispatch! Well… that IS what I 
want I suppose. That prompted this thread. If this is the expected behavior, 
then I really do not understand at all what the dictionary means by “execution 
context”. I DID however find one other difference between send and dispatch: 
You can send a command but NOT a function! Dispatch works with commands AND 
functions. 

At any rate, it’s academic. I solved the problem by putting this handler in the 
Database Setup card script:

function getConnection theDBObject
   switch theDBObject
      case "primary"
         put the hilite of button "btndbPrimary" of me into aConnection 
["enabled"]
         put (the backgroundcolor of button "btnPriConnected" of me is 
lightgreen) into aConnection ["connected"]
         put field "fPriDBType" of me into aConnection ["dbtype"]
         put field "fPriDBHost" of me into aConnection ["dbhost"]
         put field "fPriDBPort" of me into aConnection ["dbport"]
         put field "fPriDBName" of me into aConnection ["dbname"]
         put field "fpriDBUser" of me into aConnection ["dbuser"]
         put field "fPriDBPass" of me into aConnection ["dbpass"]
         break
      case "secondary"
         put the hilite of button "btndbSecondary" of me into aConnection 
["enabled"]
         put (the backgroundcolor of button "btnSecConnected" of me is 
lightgreen) into aConnection ["connected"]
         put field "fSecDBType" of me into aConnection ["dbtype"]
         put field "fSecDBHost" of me into aConnection ["dbhost"]
         put field "fSecDBPort" of me into aConnection ["dbport"]
         put field "fSecDBName" of me into aConnection ["dbname"]
         put field "fSecDBUser" of me into aConnection ["dbuser"]
         put field "fSecDBPass" of me into aConnection ["dbpass"]
         break
   end switch

   return aConnection
end getConnection

Now my database back scripts can call this function, and because the button 
containing the back scripts exists on the same card, they execute in the 
context of that card. (Whew!) 

Bob

On Feb 7, 2014, at 09:02 , Mike Bonner <bonnm...@gmail.com> wrote:

> Ah k. I understand what you're saying now.
> 
> The OP points out that "put the short name of this card" is returning the
> current card (as per the dictionary, and the behavior in the OP matches
> this.)
> If things remain the same and the message is "sent" to the card itself
> (like it was in the OP) then the handler in the card can "put the short
> name of me" and it will work because the handler is executing in the card,
> but if the message is sent to an object on a card "the short name of me"
> will return the object name not the card name. So one would have to do
> something else to get the card name. (get the long name and parse, or go up
> the "owner" tree till you get there if there are groups involved)  So I
> guess the OP example is a bit silly since if you're sending to the card
> specifically you already know what it is and if you must, can pass it as a
> parameter as part of the send.
> 
> Curious now though, is there an easy way to get the owning card name of an
> object that is sent to without parsing or tree crawling?
> 
> 
> On Fri, Feb 7, 2014 at 9:07 AM, Mark Wieder <mwie...@ahsoftware.net> wrote:
> 
>> Mike-
>> 
>> Friday, February 7, 2014, 7:08:29 AM, you wrote:
>> 
>>> Its also probable I should have typed it clearer.. use "of me" instead.
>>> "This" refers to the current card of the default stack.
>> 
>> I'm not concerned about your use of "this" or "current". But "me" is
>> the object that generated the send or dispatch message. If you want
>> the message to end up going to the card, direct it to the card, not to
>> me.
>> 
>> If me sends or dispatches a message to me, me will get the message.
>> 
>> --
>> -Mark Wieder
>> ahsoftw...@gmail.com
>> 
>> 
>> _______________________________________________
>> use-livecode mailing list
>> use-livecode@lists.runrev.com
>> Please visit this url to subscribe, unsubscribe and manage your
>> subscription preferences:
>> http://lists.runrev.com/mailman/listinfo/use-livecode
>> 
> _______________________________________________
> use-livecode mailing list
> use-livecode@lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your subscription 
> preferences:
> http://lists.runrev.com/mailman/listinfo/use-livecode


_______________________________________________
use-livecode mailing list
use-livecode@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-livecode

Reply via email to