You can only import STAX functions from a STAX xml file using the <import> 
or <function-import> element.  But you can create a function (e.g. 
<function name="'readConfig'"> that contains this <script> element and 
then import this function and call it.

--------------------------------------------------------------
Sharon Lucas
IBM Austin,   luc...@us.ibm.com
(512) 286-7313 or Tieline 363-7313




From:   Prasant Biswal <prasantkubis...@gmail.com>
To:     Sharon Lucas/Austin/IBM@IBMUS, 
Cc:     staf-users@lists.sourceforge.net
Date:   08/05/2011 11:03 AM
Subject:        Re: Fw: [staf-users] How to call function with different 
arguments



Can it be possible to call  (import) the below python script from another 
.xml file  instead of defining in the xml file using.


On Fri, Aug 5, 2011 at 1:27 AM, Sharon Lucas <luc...@us.ibm.com> wrote:
And you can obtain values for the arguments (e.g. logName, remoeAddr, 
remoteName, localFiles) from a config file instead of hard-coding them. 

If the config file resides on the STAX service machine (the "local" 
machine), you can use Python APIs to read the file.  For example, you 
could replace the <script> element that hardcodes logName, remoteAddr, 
remoteName, and localFiles with something like the following depending on 
the format of your config file that contained these values: 

  <script> 
    import re 

    # Set to wherever your config file is located 
    myConfigFile = 'C:\\testa\\test.cfg' 

    # Read the config file and assign each line in the file to a lines 
list 
    file = open(myConfigFile, 'r') 
    lines = file.readlines() 
    file.close() 

    # Process depending on the format of your config file. 
    # For example, if it contained lines like: 
    #   logName = C:\testa\abc_abc.txt 
    #   remoteAddr = 0A5CAB0999C123D 
    #   remoteName = ABCD123 
    #   localFiles = C:\test2\T_Log.txt 

    for line in lines: 
      if line.find('=') != -1: 
        [key, value] = line.split('=', 2) 
        key = key.strip() 
        if key == 'logName': 
          logName = value.strip() 
        elif key == 'remoteAddr': 
          remoteAddr = value.strip() 
        elif key == 'remoteName': 
          remoteName = value.strip() 
        elif key == 'localFiles': 
          localFiles = value.strip() 
  </script> 

--------------------------------------------------------------
Sharon Lucas
IBM Austin,   luc...@us.ibm.com
(512) 286-7313 or Tieline 363-7313

----- Forwarded by Sharon Lucas/Austin/IBM on 08/04/2011 02:17 PM ----- 

From:        Sharon Lucas/Austin/IBM 
To:        Prasant Biswal <prasantkubis...@gmail.com> 
Date:        08/04/2011 02:14 PM 
Subject:        Re: [staf-users] How to call function with different 
arguments 


I made some modifications to your STAX xml so that it will run the 
following command: 

C:\test\Run.exe -AutoRun -Log=C:\testa\abc_abc.txt -Overwrite=false 
-Command=SendFiles -RemoteAddr=0A5CAB09999C123D -RemoteName=ABCD123 
-Timeout=0sec -LocalFiles=C:\test2\T_Log.txt -CustomTest=false 
-PassExit=false -FileOnPass=false -FailExit=false -FileOnFail=false 
-AutoRunOnExit 


Of course since I don't have your C:\test\Run.exe I could run the 
<process>.  Here's the STAX job I successfully ran (except with the 
<process> commented out). 

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<!DOCTYPE stax SYSTEM "stax.dtd"> 

<stax> 
  <defaultcall function="main"/>

 <script> 
   # Python requires a \ to be escaped with a \ (e.g. \\) or you can use a 
/  
   logName = 'C:\\testa\\abc_abc.txt'
   remoteAddr = '0A5CAB09999C123D'
   remoteName = 'ABCD123'
   localFiles = 'C:\\test2\\T_Log.txt'
 </script> 

 <function name="main">
   <sequence>
     <!-- <import machine="ImportMachine" file="ImportFile1"/> --> 
     <call function="'UIAutomation'">[logName, remoteAddr, remoteName, 
localFiles]</call>
   </sequence>
 </function>
  <function name="UIAutomation"> 
    <function-list-args> 
      <function-required-arg name="logName"/> 
      <function-required-arg name="remoteAddr"/> 
      <function-required-arg name="remoteName"/> 
      <function-required-arg name="localFiles"/> 
    </function-list-args> 
  
    <sequence> 

      <script> 
        # I split up the assignment of the command and its parameters into 
multiple lines 
        # for easier readability 
        parms = '-AutoRun -Log=%s -Overwrite=false -Command=SendFiles 
-RemoteAddr=%s ' % (logName, remoteAddr) 
        parms = '%s -RemoteName=%s -Timeout=0sec -LocalFiles=%s' % (parms, 
remoteName, localFiles) 
        parms = '%s -CustomTest=false -PassExit=false -FileOnPass=false' % 
(parms) 
        parms = '%s -FailExit=false -FileOnFail=false -AutoRunOnExit' % 
(parms) 

        # Need to use forward slashes instead of backward slashes (or else 
escape by specifying \\) 
        command = 'C:/test/Run.exe %s' % (parms) 
      </script> 

      <!-- Logging your command is helpful when you are debugging --> 
      <log message="1">command</log> 

      <process> 
        <location>'local'</location> 
        <command mode="'shell'">command</command> 
        <stderr mode="'stdout'"/> 
        <returnstdout/> 
      </process> 
      
      <log message="1">'Process RC: %s, STAFResult: %s, STAXResult: %s' % 
(RC, STAFResult, STAXResult)</log> 

   </sequence>
 </function>

</stax>

--------------------------------------------------------------
Sharon Lucas
IBM Austin,   luc...@us.ibm.com
(512) 286-7313 or Tieline 363-7313




From:        Prasant Biswal <prasantkubis...@gmail.com> 
To:        Sharon Lucas/Austin/IBM@IBMUS 
Date:        08/04/2011 01:15 PM 
Subject:        Re: [staf-users] How to call function with different 
arguments 



Hi Sharon,
Thanks for the help, i tried to pass the 4 arguments  (argA, 
argB,argC,argD) with values and got lots of  error , can ypu please look 
at the script once:
 it is showing error while parsing "argC" and <command> execution  . 
Script :

<function-list-args>
  

 <function-required-arg name="argA"/>
 

 <function-required-arg name="argB"/>
    
<function-required-arg name="argC"/>
    
<function-required-arg name="argD"/>
      
</function-list-args>
   
  
<sequence>

    
<process>
      
<location>'local'</location>
      
<command mode="'shell'">'C:\test\Run.exe -AutoRun -Log=%s -Overwrite=false 
-Command=SendFiles -RemoteAddr=%s -

RemoteName=%s -Timeout=0sec -LocalFiles=%s -CustomTest=false 
-PassExit=false -FileOnPass=false -FailExit=false -

FileOnFail=false -AutoRunExit'' % (argA, argB,argC,argD)</command>
   

 </process>

    
<log message="1">'Process RC: %s, STAFResult: %s, STAXResult: %s' % (RC, 
STAFResult, STAXResult)</log>

  
</sequence>

</function>

<defaultcall function="main"/>

  

<script>
   
argA = 'C:\testa\abc_abc.txt'
    
argB = '0A5CAB09999C123D'
    
argC = 'ABCD123'
    
argD = 'C:\test2\T_Log.txt'
  
</script>

  

<script> 
    
ImportMachine = 'local'
    
ImportDirectory = 'C:\STAF\services\stax\samples\Test'
    
ImportFile1 = '%s/CopyofTest.xml' % (ImportDirectory)

</script>


<function name="main">
    
<sequence>

  <!--<import machine="ImportMachine" file="ImportFile1"/>
-->      
<call function="'UIAutomation'">[argA, argB,argC,argD]</call>
        
</sequence>

</function>

Is it possible to replace the arg with variables which will be read from a 
config file?

Thanks ,
-Prasant


On Thu, Aug 4, 2011 at 9:36 PM, Sharon Lucas <luc...@us.ibm.com> wrote: 
Yes you can pass arguments to STAX functions.  It wasn't clear to me if 
you were asking how to do this when calling a function within a STAX job 
or if you were asking how to do pass arguments to a STAX job's starting 
function when submitting it for execution via a STAX EXECUTE request. 

You can pass arguments to a STAX job's starting function via the ARGS 
option on a STAX EXECUTE request.  Or, you can use the SCRIPT or 
SCRIPTFILE option on a STAX EXECUTE request to use Python code to set 
variables that can be accessed by your STAX job.  For more information on 
the options you can specify when submitting a STAX job via a STAX EXECUTE 
request see the STAX User's Guide at 
http://staf.sourceforge.net/current/STAX/staxug.html#Header_Execute. 

Or, if you are reading from your.config file within the STAX job then you 
could pass the variable values you obtain to any function when calling the 
function. 

See section "call: Call a Function" within the STAX User's Guide for more 
information on calling a function with arguments (via a list, map, single 
arg, etc) at 
http://staf.sourceforge.net/current/STAX/staxug.html#Header_Call. 

So, say you had a STAX function like the following that requires values to 
be passed for argA and argB as a list. 

<function name="startProcess"> 

  <function-list-args> 
    <function-required-arg name="argA"/> 
    <function-required-arg name="argB"/> 
    <function-optional-arg name="argD" value="'xyz'"/> 
  </function-list-args> 
    
  <sequence> 

    <process> 
      <location>'local'</location> 
      <command mode="'shell'">'Run.exe -A=%s -B=%s -C -D=%s -E' % (argA, 
argB, argD')</command> 
    </process> 

    <log message="1">'Process RC: %s, STAFResult: %s, STAXResult: %s' % 
(RC, STAFResult, STAXResult)</log> 

  </sequence> 
</function> 

Within the STAX job you could call it as follows: 

  <script> 
    argA = 'abc' 
    argB = 'bcd' 
  </script> 

  <call function="'startProcess'">[argA, argB]</call> 

Or, if this was the starting function for the STAX job you could pass 
values for argA and argB when submitting the STAX job.  For example: 

 STAF staxMachine STAX EXECUTE FILE /stax/job1.xml FUNCTION "startProcess" 
ARGS "['abc', 'bcd']" 

--------------------------------------------------------------
Sharon Lucas
IBM Austin,   luc...@us.ibm.com
(512) 286-7313 or Tieline 363-7313




From:        Prasant Biswal <prasantkubis...@gmail.com> 
To:        staf-users@lists.sourceforge.net 
Date:        08/04/2011 09:18 AM 
Subject:        [staf-users] How to call function with different arguments 




Dear Stafusers

Can you please help with below problems:
1.Can it possible to run an exe with multiple variable (some variables 
will not change and some i need to read from a config file )
For example :Suppose i need to run the Run.exe using a multiple arguments:

Run.exe -A=abc -B=bcd -C -D=xyz -E 

In this -C , -E will be kept constant (no changes) and -A and -B will be 
read from config file and pass during calling the function.

Please let me know if it is possible using STAX.

Thanks, 
Prasant
------------------------------------------------------------------------------
BlackBerry&reg; DevCon Americas, Oct. 18-20, San Francisco, CA
The must-attend event for mobile developers. Connect with experts. 
Get tools for creating Super Apps. See the latest technologies.
Sessions, hands-on labs, demos & much more. Register early & save!
http://p.sf.net/sfu/rim-blackberry-1
_______________________________________________
staf-users mailing list
staf-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/staf-users



------------------------------------------------------------------------------
BlackBerry&reg; DevCon Americas, Oct. 18-20, San Francisco, CA
The must-attend event for mobile developers. Connect with experts. 
Get tools for creating Super Apps. See the latest technologies.
Sessions, hands-on labs, demos & much more. Register early & save!
http://p.sf.net/sfu/rim-blackberry-1
_______________________________________________
staf-users mailing list
staf-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/staf-users

Reply via email to