I have my parameter values in a SQLite table. I am able to access each value though a Python scripted parameter that opens the table and retrieves the value. However, this means that I have to open and close the SQL table one time for each parameter. Is there a way to make multiple parameters that can be read by the readers and transformers, perhaps in the Python startup script?
Hi @jimo
you could create one helper Python scripted parameter that would carry e.g. comma separated values for all your parameters. Then every parameter would be a scripted parameter as well and would retrieve its part from the comma separated helper parameter value. Please find a very simplified example attached.
I get the concept. Now instead of returning a string from the helper scripted parameter, I can return a dictionary that I create from my SQLite query:Â
a = {'ap':'apple','ba':'banana','ch':'cherry'}Â
return a
Then in the second scripted parameter I do an eval() on what is returned  by the first scripted parameter to turn it back into a dictionary, then extract the key:
dictParam = eval(fme.macroValuesa'PARAM3'])Â
return dictParam="ap"]
The value of PARAM4 is therefore "apple"!
I get the concept. Now instead of returning a string from the helper scripted parameter, I can return a dictionary that I create from my SQLite query:Â
a = {'ap':'apple','ba':'banana','ch':'cherry'}Â
return a
Then in the second scripted parameter I do an eval() on what is returned  by the first scripted parameter to turn it back into a dictionary, then extract the key:
dictParam = eval(fme.macroValuesa'PARAM3'])Â
return dictParam="ap"]
The value of PARAM4 is therefore "apple"!
Â
Â
I get the concept. Now instead of returning a string from the helper scripted parameter, I can return a dictionary that I create from my SQLite query:Â
a = {'ap':'apple','ba':'banana','ch':'cherry'}Â
return a
Then in the second scripted parameter I do an eval() on what is returned  by the first scripted parameter to turn it back into a dictionary, then extract the key:
dictParam = eval(fme.macroValuesa'PARAM3'])Â
return dictParam="ap"]
The value of PARAM4 is therefore "apple"!
Â
Â
Hack. You can define the dictionary as a global variable which can be accessed while FME is configuring user parameters. e.g.
First scripted (Python) parameter:
global a
a = {'ap':'apple','ba':'banana','ch':'cherry'}
return ah'ap']
Second scripted (Python) parameter:
return aa'ba']
Third scripted (Python) parameter:
return a 'ch']
Note: A global variable defined in a scripted (Python) parameter can be used only in scripted (Python) parameters. It cannot be used in the Startup/Shutdown Python script, PythonCreator, and PythonCaller in the workspace.
Hack. You can define the dictionary as a global variable which can be accessed while FME is configuring user parameters. e.g.
First scripted (Python) parameter:
global a
a = {'ap':'apple','ba':'banana','ch':'cherry'}
return ah'ap']
Second scripted (Python) parameter:
return aa'ba']
Third scripted (Python) parameter:
return a 'ch']
Note: A global variable defined in a scripted (Python) parameter can be used only in scripted (Python) parameters. It cannot be used in the Startup/Shutdown Python script, PythonCreator, and PythonCaller in the workspace.
Â
Hack. You can define the dictionary as a global variable which can be accessed while FME is configuring user parameters. e.g.
First scripted (Python) parameter:
global a
a = {'ap':'apple','ba':'banana','ch':'cherry'}
return ah'ap']
Second scripted (Python) parameter:
return aa'ba']
Third scripted (Python) parameter:
return a 'ch']
Note: A global variable defined in a scripted (Python) parameter can be used only in scripted (Python) parameters. It cannot be used in the Startup/Shutdown Python script, PythonCreator, and PythonCaller in the workspace.