Question: How can I call a script in a different suite and return a value from that other suite back to the main runner.script and use it as a parameter while calling a script in a third suite from the primary bat.suite?
The issue seems to be that I don’t know how to bring back from the second script and access the value in the main runner script.
I have three suites: my bat.suite, lib.suite and reference.suite
In the three suites I use these three scripts. I open the suites and have access to the scripts.
There are three scripts I run.
utils.script - lib.suite
tools.script. - reference.suite
In bat.Runner.script I call lib.utils.sendReceive with a parameter myTimeOut
Then lib.utils.sendReceive records how long outlook takes for a send/receive and puts that info into a property called sndRcvTime
Goal: In my bat.Runner Script I want to call reference.tools.email and pass it sndRcvTime (from lib.utils.sendReceive) and also pass reference.tools.email some other properties which are in the bat.runner.script
A quick question: Are these entire scripts you are calling, or handlers/functions you’re calling from within specific scripts? I don’t think there’s a difference (SenseTalkDoug will correct me if I’m wrong), so hopefully this (untested) solution will work. First, add a return statement to each of the scripts you call:
//other script stuff...
This will ensure that “the result” has the right value.
Next, modify how you call your other script:
lib.utils.sendReceive param,param, param
put the result into someVar
Now you should be able to pass that on as a parameter.
As an aside question to Doug or Matt or Ellissin, could that be shortened onto one line?
email (the result of myScript param), someOtherParameter
Sure. To simplify it a bit and avoid having to use “the result” function to access the value, just call the other script as a function, something like this:
put utils.sendReceive() into someVar
Note that to be able to easily call a script in another suite, you should insert that suite into either the initialSuites (checked before the current suite) or the finalSuites (checked after the current suite – this is more often what you want).
So for what manradion asked for (and doing both calls on the same line), it might be done like this (in the runner script in the bat suite):
insert "/path/to/lib.suite" into the finalSuites
insert "/path/to/reference.suite" into the finalSuites
tools.email utils.sendReceive(myTimeout), anotherParam
I’m new, I’m thinking that these are handlers/functions inside scripts:
run lib.utils.sendReceive myTimeOut
to sendReceive myTimeOut
put the time into startTime
WaitFor myTimeOut (“Send and Receive Complete”)
put the time - startTime into SndRcvTime
Looks like we both posted at once…
You’re getting close. As Allen mentioned, you need to return a value from the sendReceive handler in the utils script, so add this line right before the “end sendReceive” line:
Then call it as I showed in my last post.
BTW, your script uses OpenSuite, which is fine. However, I generally suggest inserting suites into the finalSuites instead, which is a newer, more flexible mechanism that was added in order to overcome some limitations that were present in the older OpenSuite/CloseSuite commands.
It is actually messier.
calls lib.utils.initialSndRcv myTimeOut
Calls lib.utils.sendRevieve myTimeOut
and lib.utils.sendReceive myTimeOut
What is preferred method to bring lib.utils.sendReveive value sndRcvTime back to bat.runner.script?
Well, it’s just one more step in that case:
(* utils.script *)
to initalSndRcv aTimeOut
-- do stuff here
put sendReceive(aTimeOut) into sendReceiveTime
-- do more stuff, maybe
to sendRecieve aTimeOut
-- do whatever processing here
and then call initialSndRcv from your bat.script:
put initialSndRcv(myTimeOut) into someVar
Does that make it more clear?
Groovy, it all comes together