6 Replies Latest reply on Mar 25, 2016 9:37 AM by mjohnson

    Passing variables/parameters when running scripts




      I have built a menu that currently "runs" external scripts. I want to pass parameters to the scripts, but I'm not sure how to do that. E.g., if I have a menu item defined to "run 123.vbs", using OnAction, perhaps I want to pass the contents of a variable to that script. How would I do that?



        • 1. Re: Passing variables/parameters when running scripts

          I havn't found a way to do this from .onaction but there is an easy way to tranfer variables between scripts using scripting.globals




          Globals Property (Scripting Object)





          Returns global name/key - value pairs. Use this property  for script to script communications.


          To store a global name/key - value pair:

               Scripting.Globals("MyGlobalName") = "MyGlobalValue"

          To read from a global name/key -value pair:

               MsgBox Scripting.Globals("MyGlobalName")

               ' Returns “MyGlobalValue”

          To store a global object:

               Set Scripting.Globals.Data(“MyGlobalObjName”) = myObj

          To output the global object's name:

               MsgBox Scripting.Globals("MyGlobalObjName").Name

               ' Returns the value of myObj.Name


          To iterate the keys:

               For Each key In Scripting.Globals.Keys

                   MsgBox key & "=" & Scripting.Globals(key)


          • 2. Re: Passing variables/parameters when running scripts

            Use the ScriptHelper object in the called .vbs script.


            Example menu line with arguments:



            btn1.OnAction = "run called_script.vbs argument1 argument2"


            Then in the called_script.vbs file do this:


            Taken from the PCB Automation Reference document


            Set ScriptArgs = ScriptHelper.Arguments

            ' The first argument is the third item in the collection

            arg1 = ScriptArgs.Item(3)

            arg2 = ScriptArgs.Item(4)

            MsgBox arg1

            MsgBox arg2



            - Alex



            1 of 1 people found this helpful
            • 3. Re: Passing variables/parameters when running scripts

              So, when I try to do a test (run test.vbs 1 from the Command Line toolbar) in DxD in Linux, I get the following error:


              "Object required: 'ScriptHelper'"




              Set args = ScriptHelper.Arguments


              Is there something I need to do to initialize ScriptHelper to begin with?

              • 4. Re: Passing variables/parameters when running scripts

                Still looking for a solution concerning DxD/xDx and ScriptHelper, years later.

                • 5. Re: Passing variables/parameters when running scripts

                  The long way around is to write the parameters to a text file, then read them with the external script once it is open.  You can have the external script delete the file after it's done, if needed. 


                  I do something like this to identify the selected part in DxDatabook to a vb.net application, as the part selection method that fires from DxDatabook cannot pass a value to my running app.  Some operating system delay checks are necessary to ensure the file writes properly.  In my case, since the app cannot know when the file will be written, I use a timer to periodically look at the file and see if it has changed. 


                  This sounds like a lot of overhead but the file operations are very fast and the user cannot even tell they are happening. In my app it appears to happen real time. In your case, by the time the menu item is executed and the resulting window appears, they could be done and visible to the user as if they were passed directly.


                  One big benefit of this method is that there are no limits to what you can pass, as long as it can be represented in alphanumeric form, and you don't have to mess around with complicated OS API calls and the difficulty of setting and retrieving values from them. 


                  Another long way around is to use the Windows registry to store the values. Pretty fast and no worries about leaving files hanging around.  I would say you have to be careful to not clutter up the registry, so do some planning ahead of time, but the registry is already phenomenally cluttered up, so if you add a few keys it will be like a drop of water in a swimming pool.

                  • 6. Re: Passing variables/parameters when running scripts

                    Ok, thanks for the help. Between this and Global Variables, I'll have to make it work!