In this section you will find useful Jython code snippets for FDMEE.
Click on any snippet to see the code.
Please, bear in mind that these scripts are just for you to play with FDMEE and should not be used in Production environments... and if you do... I do not support them :-)
Not sure which are the values you can get from fdmContext at any event script?
Simply include this snippet into your event script and see results in the FDMEE process log.
First, make it working. Then, make it Jythonic. Try to simplify your code and make it more readable.
We can also use list comprehension to build lists dynamically:
Click on any snippet to see the code.
Please, bear in mind that these scripts are just for you to play with FDMEE and should not be used in Production environments... and if you do... I do not support them :-)
fdmContext object
Object fdmContext is the dictionary FDMEE uses to store context information such as Location Name, Import Format Name, Process Id, etc. Most of the values stored in fdmContext are specific for the current process being executed. Others are global to all processes.
If you want to learn more about dictionaries in Python/Jython, please visit this tutorial.
If you want to learn more about dictionaries in Python/Jython, please visit this tutorial.
Logging all fdmContext properties (loop sorted dictionary)
Not sure which are the values you can get from fdmContext at any event script?
Simply include this snippet into your event script and see results in the FDMEE process log.
''' Snippet: Log content of fdmContext object Author: Francisco Amores Date: 11/11/2016 Blog: http://fishingwithfdmee.blogspot.com Notes: This snippet can be pasted in any event script. Content of fdmContext object will be logged in the FDMEE process log (...\outbox\logs\) Instructions: Set log level (global or application settings) to 5 Hints: Use this snippet to see different context values at any workflow step. FDMEE Version: 11.1.2.3 and later ---------------------------------------------------------------------- Change: Author: Date: ''' # initialize logLines = "" # loop all fdmContext keys (sorted) for key in sorted(fdmContext): # get key value value = fdmContext[key] # build log line (property name: property value) logLines += "%s: %s\n" % (key, value) # write line to log (Debug) if logLines: fdmAPI.logDebug("Content of fdmContext: \n%s" % logLines) else: fdmAPI.logWarn("Nothing to log from fdmContext")
Logging all fdmContext properties (list comprehension)
First, make it working. Then, make it Jythonic. Try to simplify your code and make it more readable.
We can also use list comprehension to build lists dynamically:
''' Snippet: Log content of fdmContext object Author: Francisco Amores Date: 11/11/2016 Blog: http://fishingwithfdmee.blogspot.com Notes: This snippet can be pasted in any event script. Content of fdmContext object will be logged in the FDMEE process log (...\outbox\logs\) This script uses list comprehension builder Instructions: Set log level (global or application settings) to 5 Hints: Use this snippet to see different context values at any workflow step. FDMEE Version: 11.1.2.3 and later ---------------------------------------------------------------------- Change: Author: Date: ''' # initialize logLines = "" # List comprehension # Define list with pairs "Key: Value" from sorted fdmContext list = ["%s: %s" % (key, fdmContext[key]) for key in sorted(fdmContext)] # List is then joined with "\n" character (newline) logLines = "\n".join(list) # write line to log (Debug) if logLines: fdmAPI.logDebug("Content of fdmContext: \n%s" % logLines) else: fdmAPI.logWarn("Nothing to log from fdmContext")
Code based on EPM environment
We may have some scripts which code differs from one environment to another. Maintaining different code for same script is a risky task.
What about having one single script which you can migrate into the other environments with no risks?
How can I make my code dynamic based on the EPM environment I'm working with?
Let's have a look!
What about having one single script which you can migrate into the other environments with no risks?
How can I make my code dynamic based on the EPM environment I'm working with?
Let's have a look!
Getting EPM environment based on FDMEE Server hostname
''' Snippet: Get environment running the script based on the FDMEE Server hostname Author: Francisco Amores Date: 11/11/2016 Blog: http://fishingwithfdmee.blogspot.com Notes: This snippet can be pasted in any event/custom/import script. Output will be logged in the FDMEE process log (...\outbox\logs\) This script uses socket python module Instructions: Set log level (global or application settings) to 5 To add new servers, include an entry in the dictionary. You can get hostnames by executing command "hostname" from the command line in the FDMEE server(s). Hints: Use this snippet to avoid having different script codes across environments. The right code will be executed at runtime based on the FDMEE server running the process FDMEE Version: 11.1.2.3 and later ---------------------------------------------------------------------- Change: Author: Date: ''' # import socket module import socket # Dictionaty for FDMEE Servers # These are sample servers and should be replaced by existing ones dictFDMEEServers = { "FDMEE_SERVER_DEV" : "DEV", "FDMEE_SERVER_PROD1": "PROD", "FDMEE_SERVER_PROD2": "PROD" } # get hostname hostName = socket.gethostname() # Assign envFDMEE based on FDMEE Server try: envFDMEE = dictFDMEEServers[hostName] except KeyError, err: errMsg = "FDMEE Server does %s not exist in the dictionary dictFDMEEServers" % hostName fdmAPI.showCustomMessage(errMsg) raise RuntimeError(errMsg) # Debug fdmAPI.logDebug("FDMEE Server: %s (%s)" % (hostName, envFDMEE)) # **************************************************************** # Specific Code for Development # **************************************************************** if envFDMEE == "DEV": # Debug fdmAPI.logDebug("Code for %s" % envFDMEE) # your code here # **************************************************************** # Specific Code for Production # **************************************************************** if envFDMEE == "PROD": # Debug fdmAPI.logDebug("Code for %s" % envFDMEE) # your code here # **************************************************************** # Specific Code for Environment XXX # **************************************************************** if envFDMEE == "XXX": # Debug fdmAPI.logDebug("Code for %s" % envFDMEE) # your code here # **************************************************************** # Code for all environments # **************************************************************** # your code here
No comments:
Post a Comment
Thanks for feedback!