Hi Mark,

The problem is that this is a General Message passing handler. The code I sent you was vastly simplified to demonstrate the problem, in reality it's a lot more difficult. This is how it should work:

ListenForMessage is called by lots of objects.
PutMessage sends to all Listening objects.

It is up to the object to use the data it's sent in a manner that only the Message Handler of the object can determine. For instance in the case in question the real code looks like this:

--
--  Script for ObjectY
--
on MessageName theMessageData
-- theMessageData = CustomProperty "|" RecordKey
  set itemDelimiter to "|"
  put item 1 of theMessageValue into myArrayName
  put item 2 of theMessageValue into myRecordKey
  set itemDelimiter to ","
  put customProperties[myArrayName] of this stack into myArray
  put  myArray[myRecordKey] into myDataRecord
  put item 1 of myDataRecord into me   --*************************
end MessageName

--
--  Script for ObjectZ
--
on MessageName theMessage,theMessageData
-- theMessageData = CustomProperty "|" RecordKey
  set itemDelimiter to "|"
  put item 1 of theMessageValue into myArrayName
  put item 2 of theMessageValue into myRecordKey
  set itemDelimiter to ","
  put customProperties[myArrayName] of this stack into myArray
  put  myArray[myRecordKey] into myDataRecord
  put item 5 of myDataRecord into me  --*************************
end MessageName

If the following is executed:

get PutMessage("MessageName","cpStackArray")

(It sends to ALL listening Objects, the object decides if it should do something or not and what to do if so)

The lines marked ************************ are differ in this example. In the case of the Real App, there are 15 fields like this, for instance one field is an email address. In this case the Handler checks to make sure it is a valid email address, and if not sets the text color to Red.

I am using this for all kinds of different messages with all kinds of different data being passed. Only the receiving object "knows" what to do with the data.

Thanks a Lot
All the Best
Dave

On 23 Mar 2006, at 13:56, Mark Smith wrote:

On the other hand, given the function below, it might be more efficient for the calling handler to do the work, since it already knows the the long name and has the data. I mean that if a handler is going to send a message to a control, along with some data, it can certainly perform whatever actions are required, itself.

function PutDataIntoMe theLongName,theData
  do "put theData into " & theLongName
end PutDataIntoMe


In your original example:
function PutMessage theMessageID

Looks up theMessageID in the Array built in ListenForMessages and calls (via a "send" statement) the handler with the name theMessageID at the location(s) specified in the data part of the array.

Since putMessage knows the location, and has the data, it can do the work itself, avoiding any context issues altogether.

There may be other issues I don't know about, of course, but I'm sure you see what I mean.

Mark

_______________________________________________
use-revolution mailing list
[email protected]
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution

Reply via email to