FDMEE provides a set of API functions which return a ResultSet object (getLocationDetails, getBatchDetails, getCategoryList, etc.). These functions are executing a SQL query in the FDMEE database behind the scenes.
Besides, FDMEE API function executeQuery can be used to execute our own SQL queries in the FDMEE database.
The following snippet shows how to loop a ResultSet object, get column values returned, and log details into the FDMEE process log. In my example. I've used a simple query to get internal id of Point-of-View components (Location, Category and Period) for current process id (load id)
How does it work?
Let's have a look!
Besides, FDMEE API function executeQuery can be used to execute our own SQL queries in the FDMEE database.
The following snippet shows how to loop a ResultSet object, get column values returned, and log details into the FDMEE process log. In my example. I've used a simple query to get internal id of Point-of-View components (Location, Category and Period) for current process id (load id)
How does it work?
Let's have a look!
Looping a ResultSet object returned by FDMEE API Function
'''
Snippet: Loop records in ResultSet object (executeQuery)
Author: Francisco Amores
Date: 12/06/2016
Blog: http://fishingwithfdmee.blogspot.com
Notes: This snippet can be pasted in any event/custom script.
Function executeQuery executes SQL queries in the
FDMEE database
Instructions: Set log level (global or application settings) to 5
Hints: Use this snippet to execute a SQL query with API
function executeQuery and loop all records in the
ResultSet object returned by API.
This snippet can be also used with other API functions
returning ResultSet objects
Example: Get distinct keys for POV components
FDMEE Version: 11.1.2.3 and later
----------------------------------------------------------------------
Change:
Author:
Date:
'''
# Import section
importjava.sql.SQLExceptionasSQLException
importos# Optional
# SQL Query (Example -> get distinct partitionkey, catkey, and periodkey for specific load id)
sqlQuery="""
SELECT
DISTINCT PARTITIONKEY,
CATKEY,
PERIODKEY
FROM TDATASEG
WHERE LOADID = ?"""
# List of parameters
# Emtpy list ([]) if no parameters (?) are required -> params = []
loadId=fdmContext["LOADID"]
params=[loadId]
# Debug query
fdmAPI.logDebug("SQL Query (params):%s %s (%s)"%(os.linesep,sqlQuery,params))
try:
# Execute query (returns ResultSet)
# You can also use any API function returning a ResultSet
rs=fdmAPI.executeQuery(sqlQuery,params)
# Loop records if resulset has data
ifrs.isBeforeFirst():
whilers.next():
# Get column values
partKey=rs.getString("PARTITIONKEY")
catKey=rs.getString("CATKEY")
periodKey=rs.getString("PERIODKEY")
# Write to log (Optional)
fdmAPI.logDebug("POV Keys: %s, %s, %s"%(partKey,catKey,periodKey))
# Code executed for each record
# ...
else:
# No records
fdmAPI.logDebug("No records returned!")
# Close ResultSet
fdmAPI.closeResultSet(rs)
except(SQLException,Exception),ex:
# Error message
errMsg="Exception: %s"%ex
fdmAPI.logFatal(errMsg)
# Optionally raise RunTimeError to stop the process
# raise RunTimeError(errMsg)
Code snippets for FDMEE can be downloaded from GitHub.