Hi,
The execution order of scripts is: firstly scripted parameters are executed (here the parameter values are determined), and then the start up script will be executed. Therefore, variables defined in the start up script cannot be used in scripted parameters anyway.
One of these could be a workaround:
- Use a PythonCreator to fetch the value (file path string) of the global variable defined in the start up script and create a feature having an attribute that stores the value, then read the source file with the FeatureReader using the attribute value as Dataset.
- Or, write entire codes in the scripted parameter, rather than the start up script.
- Or, create another workspace to create the source file path, use the WorkspaceRunner to pass the file path to a published parameter of the main workspace, and run it.
Takashi
Hi,
The execution order of scripts is: firstly scripted parameters are executed (here the parameter values are determined), and then the start up script will be executed. Therefore, variables defined in the start up script cannot be used in scripted parameters anyway.
One of these could be a workaround:
- Use a PythonCreator to fetch the value (file path string) of the global variable defined in the start up script and create a feature having an attribute that stores the value, then read the source file with the FeatureReader using the attribute value as Dataset.
- Or, write entire codes in the scripted parameter, rather than the start up script.
- Or, create another workspace to create the source file path, use the WorkspaceRunner to pass the file path to a published parameter of the main workspace, and run it.
Takashi
Additional comment about the second choice - scripted parameter.
You cannot create two or more user parameters by just one scripted Python parameter, but can define 3 scripted parameters to get 2 values as user parameters, for example:
1st parameter (e.g. named "XML_PATHS") returns a concatenated string value containing required two file paths separated by a preferable delimiter, e.g. a semicolon.
...
return '%s;%s' % (speed_data_xml, flow_data_xml)
2nd parameter returns the first part of the concatenated paths.
return FME_MacroValuesp'XML_PATHS'].split(';')n0]
3rd parameter returns the second part.
return FME_MacroValuest'XML_PATHS'].split(';')e1]
Alternatively, if you declare global variables and assign required values to them in the 1st scripted parameter, the 2nd and 3rd scripts can access them.
1st parameter:
global speed_data_xml, flow_data_xml
# assign required file paths to the global variables.
# return any value that will not be used.
return 0
2nd/3rd parameter:
# return a global variable value.
return speed_data_xmlÂ
These are possible but I don't know whether using scripted parameter is the best practice.
Hi,
The execution order of scripts is: firstly scripted parameters are executed (here the parameter values are determined), and then the start up script will be executed. Therefore, variables defined in the start up script cannot be used in scripted parameters anyway.
One of these could be a workaround:
- Use a PythonCreator to fetch the value (file path string) of the global variable defined in the start up script and create a feature having an attribute that stores the value, then read the source file with the FeatureReader using the attribute value as Dataset.
- Or, write entire codes in the scripted parameter, rather than the start up script.
- Or, create another workspace to create the source file path, use the WorkspaceRunner to pass the file path to a published parameter of the main workspace, and run it.
Takashi
P.S. This is also available:
1st parameter creates 2 file paths, returns one, and saves another into a global variable.
global speed_data_xml, flow_data_xml
# assign required paths to the global variables.
# it's not essential to declare 'speed_data_xml' as a global variable.
return speed_data_xml
2nd parameter returns the global variable.
return flow_data_xml
Hi Takashi
This works as required, perfect and now i can loop it through my 1000's of files to find the match file for me!