SlideShare a Scribd company logo
Jython Scripting in FDMEE
It's Not That Scary
Tony Scalese
Edgewater Ranzal
Focus
Services
People
Methodology
Customers
Partnership
15 Years
700+ clients
1000+ projects
About Edgewater Ranzal
We offer a full spectrum of EPM/BI Services
Dashboards & Scorecards, Financial
Analytics & Reporting, Operational Analytics,
What-if Analysis, Query & Reporting, Visual
Exploration
Financial performance, Legal,
Segment & Mgmt Reporting, Financial
Close
HFM Optimization, Performance Lab
SOX Compliance Support
Strategic Finance, Planning,
Budgeting, Forecasting, Workforce
Planning, Capital Planning, Project
Financial Planning
Data Integration, Financial Data
Management, Data Warehousing,
Master Data Management &DRM,
ETL Services, Automation
Project/Program Mgmt, EPM
Road Maps, Application
Reviews, Business
Requirements, Process
Change, Documentation
Installation, Upgrades,
Migration, System
Monitoring, Backup and
Recovery, Disaster
Recovery, Load Testing,
Hardware Sizing, Exalytics
Benchmarking
Consolidation
Business
Intelligence
Enterprise
Planning
Infrastructure
Training &
Support Services
Project
Management
Data
Services
Costing &
Profitability
Mgmt
Support Services – Infrastructure &
Application Support Contracts
Key Teach Course Delivery: Planning, Essbase,
Financial Reporting, Smart View, HPCM, HFM,
FDM, DRM, OBIEE
Custom Training Delivery: Process & Reporting
HPCM Standard & Detailed
Models, Waterfall Allocations,
Activity Based Costing,
Customer, Product & LOB
Profitability
 Jython Overview
 Configuring Eclipse
 FDMEE Scripting Configuration
Agenda
 Why Jython and not
VBScript?
● Jython is the strategic direction
of Oracle development
● Jython is platform independent
● The API supporting Jython
scripting will continue to be
enhanced
● Jython error handling is more
elegant and robust
Let’s Get It Out of the Way
 Python programming language written in JAVA
 Syntax is more sensitive than VBScript
 Variable data type is critical; declaration is
implicit
 Comment characters: # or ‘’’<comment block>’’’
 import statement allows easy reuse of code
 Far more robust error handling
 Familiarize yourself with camelCase
 Not that different than VBScript
Jython Basics
 Import JAVA classes
import java.sql as sql
 Utilize Try...Except
try:
Code to execute
except:
Error handling
Script Format
 Sys, Traceback: Can be used to get detailed
error information including line in script
producing error
 Java.sql: Used to interact with remote
databases
 Smtplib: Used for email generation
Commonly Used JAVA Classes
Method Functionality
count(Substring,[Start],[End]) Number of times substring occurs
endswith(Suffix,[Start],[End]) Boolean result; does string end with suffix
find(substring,[Start],[End]) Returns position where substring is found
isdigit() Boolean result; is string all numbers
isspace() Boolean result; is string all spaces
lower() Puts still in all lower case, similar to lcase
replace(old,new,[count]) Replaces text in string
split([separator],[max split]) Returns a list, string is divided by separator
startswith(prefix,[Start],[End]) Boolean result; does string start with prefix
strip([characters]) Removes specified character(s) from string
upper() Puts still in all upper case, similar to ucase
zfill(width) Returns numeric string filled left with zeros
Jython String Manipulation
Jython VBScript
If Then if x == 100:
elif x == 200:
else:
If x = 100 then
Elseif x = 200 then
Else
End if
Case No native statement;
utilize dictionary or If
Then statements
Select Case x
Case 100
Case 200
Case Else
End Select
Jython Statements
Jython VBScript
Do Loop while x<100:
Do something
x += 1
Do while x < 100
Do something
x = x+1
Loop
For Loop for x in range(100):
Do something
For x = 0 to 100
Do something
Next
Jython Iteration
Jython VBScript
List lListName = [‘Elem1’,’Elem2’,’Elem3’]
for elem in lListName:
print elem
aArrayName =
Array(“Elem1”,”Elem2”,”Elem3”)
For each strElem in aArrayName
msgbox strElem
Next
Dictionary dictName = {}
dictName[‘Tony Scalese’] = 36
dictName[‘Opal Alapat’] = 39
for sKey,sItem in dictName.iteritems():
print sKey + ‘’s age is ‘ + str(sItem)
Set dictName =
CreateObject(“Scripting.Dictionary”)
dictName.Add “Tony Scalese”, 36
dictName.Add “Opal Alapat”, 39
For each strKey in dictName.Keys
msgbox strKey & “’s age is “ &
dictName.Item(strKey)
Next
Jython Mapping Data Type
 Jython Overview
 Configuring Eclipse
 FDMEE Scripting Configuration
Agenda
 If a JRE is not installed, be sure to install the 64
bit JRE (install using defaults)
● http://www.oracle.com/technetwork/java/javase/dow
nloads/jre7-downloads-1880261.html
JAVA Runtime Environment (JRE)
 Download Jython 2.5.1 from
http://www.jython.org/downloads.html
● Do not use a more up to date version!
Jython Download
 Select English  Next
 Accept the EULA  Next
 Select Standard  Next
 Leave the default C:Jython2.5.1 directory  Next
 May be prompted that the directory is created, click
OK and Next again
 Leave Current as JAVA home directory  Next
 Click Next on the Summary tab, install will begin
 Click Next on the ReadMe and then Finish
Jython Install
 Confirm the C:jython2.5.1 directory exists
 Confirm jython.jar file exists
Jython Install Confirmation
 Download Eclipse Standard from
http://www.eclipse.org/downloads/
Download Eclipse
 Extract the download to the C: directory
 Open the C:Eclipse folder and launch
eclipse.exe
Extract Eclipse
 Specify a default workspace
Workspace
 Expand General 
Editors and click Text
Editors
 Change the options:
● Display tab width: 2
● Insert spaces for tabs:
Checked
● Show Print Margin:
Checked
● Show Line Numbers:
Checked
Configure Eclipse General Options
 Select Windows  Preferences
 Expand Install/Update
 Click Available Software Sites
 Click Add
 Name: PyDev
 Location: http://pydev.org/updates/
 Click OK
Install PyDev
PyDev Install
 Select Help  Install New Software
 Click PyDev from the Work With drop down
 Check PyDev
 Click Next
 Click Next
 Accept the EULA and click Finish
PyDev Install
 Put a check next to the
certificate
 Click OK
 Click Yes to restart Eclipse
after the install
PyDev Install
 Windows  Preferences
 Expand PyDev and click Editor
 Change tab length to 2
Set PyDev Options
 Interpreter – Jython
 Click New
● Interpreter Name: Jython2.5.1
● Browse and select Jython.jar from C: drive
 Click OK
Set PyDev Interpreter
 When prompted, leave defaults and click OK
Set PyDev Interpreter
 Close the Welcome Screen
 Right click the Package Explorer
 New  Project
Creating a Project
 Expand PyDev and select PyDev Project
 Click Next
Creating a Project
 Name the Project
 Change the project type to Jython
 Click Finish
 Click Yes when prompted
Creating a Project
 Right click the Project
 Select New  Folder
● Name the folder src
● Repeat and create as lib
Organize Code
 Right click lib folder and select Import
 Expand General and select File System
Import JAR Files
 From Directory: lib directory of FDM
● %hyperion_home%ProductsFinancialDataQualityli
b
 Check the aif-apis.jar
 Click Finish
Import FDMEE JAR
 Right click the project (ER_FDMEE)
 Select Properties
 Click PyDev – PYTHONPATH
 Click Add jar/zip/egg
 Expand the project and click the lib folder
Update Python Path
 Add new PyDev module
● Right click src folder
● New  PyDev module
Creating Modules
 Specify a name
 Click Finish
 When prompted for a template, select Module
main and click OK
Creating Modules
 Add print “hello”
 Run the script
● Run as Jython Run
 hello shows in the
console window when
successful
Testing Module
 Add the following text to the module:
● import com.hyperion.aif.scripting.API as API
 Save the module
 Type API(). on a new line.
 A list of available methods will display
Testing FDMEE API Usage
 Jython Overview
 Configuring Eclipse
 FDMEE Scripting Configuration
Agenda
 The equivalent of Import – Data Pump scripts in FDM
Classic
 Import Integration scripts have been replaced by the
Open Interface adaptor and the BefImport event script
 Import scripts are used to manipulate data during the
import process
 Execute during an import process when assigned to the
import format used by the location and data load rule
 Every line in the data file is evaluated
 Avoid the temptation to overuse import scripts
● Parsing strings that cannot be parsed by an import format
● Temporary variables storing header information
● Mapping data should be done in maps, not import scripts
Import Scripts
 Define the script name
● def ScriptName (strfield,strrecord):
 Write script actions
● aField = split(strrecord,”-”)
● sCostCenter = aField[1]
 Return result to function
● return sCostCenter
Import Script Syntax
Notice the
colon at the
end
def EBS_CostCenter(strField, strRecord):
sCC = strField
if strField.count(“.”) > 0:
aSegments = strField.split(‘.’)
sCC = aSegments[2]
return sCC
Sample Import Script
Notice the
colon at the
end
 No longer limited to 5
 Declare a variable before the function
 Designate the variable as global
strDept = “”
def Nvision_Entity(strfield,strrecord):
if strrecord[1:5] == “Dept:”:
global strDept
strDept = strrecord[6:9]
return strfield
Temporary Variables (RES.pVarTempx)
 Simply return temporary variable in “assign”
script
def Nvision_C1(strfield,strrecord):
return strDept
Using Temporary Variables
 Similar in concept to varValues
 Be careful of overuse due to performance
impacts
 Enter #SCRIPT to activate script section of
maps
 fdmRow.getString(“FieldName”)
 fdmResult = “Mapped_Result”
Mapping Scripts
 Execute during defined events within the
application
 Fewer than FDM Classic, notably StartUp,
POVChanged
 Scope needs to be well defined to ensure
process only executes when needed
 No need to declare function
● def BefImport():  Not needed
Event Scripts
Event Description FDM Classic Equivalent
Import Executes any time the import
process is executed
ImportAction, FileImport
Calculate Before & After Logic groups and
maps processing
Calculate
ProcLogicGrp When logic groups are assigned ProcLogicGroup
ProcMap Executes ONCE during mapping
application
ProcMap
Validate Validate workflow step Validate
ExportToDat Export workflow step ExportToDat
Load Export workflow step Load
Consolidate Export workflow step Consolidate
Check Check workflow step Check
Events – Before and After
 Custom scripts are used to extend the functionality
of FDMEE
 Custom script are organized in groups
● Scripts can be assigned to multiple groups
 Custom scripts are registered
● Similar to Menu Maker specifying a caption
● Parameters can be added to make a script more dynamic
 Custom scripts can executed from web UI
 No need to declare function
● def ER_OutputData():  Not needed
Custom Scripts
 Create a group
● Logical grouping that a user can select
● By Region: North America, EMEA, Asia Pacific
● By Purpose: Data Exports, Budget, Actuals
 Register script to group
● Add parameters if applicable
Custom Script Registration
 Select Group
 Select Script & click Execute
● Specify parameters if applicable
 Select Execution Mode and click OK
Executing Custom Scripts
 Used to test code without actually impacting the
data in FDMEE
 4 sections:
1. Initialize dev mode
2. Populate context
3. Custom code
4. Clean-up actions
 Once code is tested, sections 1, 2 & 4 can be
removed, handled natively by the application
Development Mode
Commonly Used Occasionally Used Rarely Used
APPID
CATKEY
CATNAME
CHKSTATUS
EXPSTATUS
IMPSTATUS
INBOXDIR
LOADID
LOCKEY
LOCNAME
OUTBOXDIR
PERIODNAME
PERIODKEY
PROCESSSTATUS
SCRIPTSDIR
VALSTATUS
EXPORTFLAG
EXPORTMODE
FILEDIR
FILENAME
IMPORTFLAG
IMPORTFORMAT
IMPORTMODE
MULTIPERIODLOAD
RULEID
RULENAME
SOURCENAME
SOURCETYPE
TARGETAPPDB
TARGETAPPNAME
BATCHSCRIPTDIR
EPMORACLEHOME
EPMORACLEINSTANCEHOME
FDM Context
 Each execution includes a collection of information
import java.math.BigDecimal as BigDecimal
import java.sql as sql
import com.hyperion.aif.scripting.API as API
fdmAPI = API()
conn =
sql.DriverManager.getConnection("jdbc:oracle:thin:@server:port:SID",
"user", "password");
conn.setAutoCommit(False)
fdmAPI.initializeDevMode(conn);
print “Connected”
Initialize Development Mode
fdmContext = fdmAPI.initContext(BigDecimal(LoadID))
print “Location Name: “ + fdmContext[“LOCNAME”]
Populate Context
 fdmAPI.closeConnection();
Clean-up Action
 getPOVLocation(LoadID), Category, StartPeriod,
EndPeriod: Returns key, not text
 executeDML(query,param_list)
 getCustomScriptParameterValue(loadID,param):
Load ID is optional
 executeQuery(query,parameters): Returns recordset
 showCustomFile(FilePath): Display file
 showCustomMessage(message)
 logFatal(message), Error, Warn, Info, Debug
Useful FDM APIs
 The BefImport event script is used in
conjunction with the Open Interface adaptor to
import data from relational source
 This approach replaces import integration
scripts from FDM Classic
 Check out Mike Casey’s presentation - Using
the Open Interface Adapter in FDM Enterprise
Edition 11.1.2.3 - on 6/25 from 2-3 for a deep
dive into the setup
Integrating Data from Relational Sources
import java.text.SimpleDateFormat as SimpleDateFormat
import java.sql as sql
strPOVPer = fdmContext["PERIODKEY"]
strYear = SimpleDateFormat("yyyy").format(strPOVPer)
lngMonth = SimpleDateFormat("MM").format(strPOVPer)
strMonth = SimpleDateFormat("MMM").format(strPOVPer)
batchName = "MatchDataLoadRuleParam"
BefImport Script Sample - Setup
insertStmt = """
INSERT INTO AIF_OPEN_INTERFACE (
BATCH_NAME
,YEAR
,PERIOD
,PERIOD_NUM
,CURRENCY
,COL01
,COL02
,AMOUNT
) VALUES (
?
,?
,?
,?
,?
,?
,?
)
"""
BefImport Script Sample – Build Query
#Connect to source DB
sourceConn =
sql.DriverManager.getConnection("jdbc:oracle:thin:@Serv
er:Port:SID","User","Password");
#Build SELECT statement to get data to insert
selectStmt = "Select * from table n"
selectStmt = selectStmt + "Where 1=1 n"
#Run the query to get the data
stmt = sourceConn.prepareStatement(selectStmt)
RS = stmt.executeQuery()
BefImport Script Sample – Run Query
#Loop through the data and import it into the Open
Interface table
while(RS.next()):
params = [ batchName, strYear,strMonth,lngMonth,
"USD", RS.getString("Account"), RS.getString("Entity"),
RS.getBigDecimal("Amount") ]
fdmAPI.executeDML(insertStmt, params, False)
fdmAPI.commitTransaction()
#Close the connection
RS.close()
sourceConn.close()
BefImport Script Sample – Import Data
Questions

More Related Content

PPTX
FDMEE Can Do That?
PDF
Become Jythonic in FDMEE (KSCOPE15)
PDF
Finit solutions - Automating Data Loads with FDMEE
PDF
Best Practices in HFM Application Design
PPT
HFM-Implementation
PDF
FDMEE Taking Source Filters to the Next Level
PDF
Security and Auditing in HFM
DOCX
Calculation commands in essbase
FDMEE Can Do That?
Become Jythonic in FDMEE (KSCOPE15)
Finit solutions - Automating Data Loads with FDMEE
Best Practices in HFM Application Design
HFM-Implementation
FDMEE Taking Source Filters to the Next Level
Security and Auditing in HFM
Calculation commands in essbase

What's hot (20)

PDF
Basics of fdmee
PPTX
It's Time to Reassess Your FDM Mappings
PPT
Hfm rule custom consolidation
PDF
Introduction to Oracle Fusion BIP Reporting
PDF
FDMEE versus Cloud Data Management - The Real Story
PDF
FDMEE script examples
PPTX
Application Integration: EPM, ERP, Cloud and On-Premise – All options explained
PPTX
Dimensionality & Dimensions of Hyperion Planning
PDF
HFM Business Rule Writing Tips and Techniques
DOCX
Data medium exchange
PDF
Understanding HFM System Tables
PPTX
Oracle Planning and Budgeting Cloud Service
PPTX
Oracle BI publisher intro
PDF
FDMEE script examples
PPT
Oracle EPM/BI Overview
PDF
Data-Driven Rules in HFM
PDF
Oracle fccs creating new application
PDF
Hyperion Planning Overview
DOC
Hyperion Implementation Questionaries
PDF
Enterprise Planning and Budgeting Cloud EPBCS Factsheet
Basics of fdmee
It's Time to Reassess Your FDM Mappings
Hfm rule custom consolidation
Introduction to Oracle Fusion BIP Reporting
FDMEE versus Cloud Data Management - The Real Story
FDMEE script examples
Application Integration: EPM, ERP, Cloud and On-Premise – All options explained
Dimensionality & Dimensions of Hyperion Planning
HFM Business Rule Writing Tips and Techniques
Data medium exchange
Understanding HFM System Tables
Oracle Planning and Budgeting Cloud Service
Oracle BI publisher intro
FDMEE script examples
Oracle EPM/BI Overview
Data-Driven Rules in HFM
Oracle fccs creating new application
Hyperion Planning Overview
Hyperion Implementation Questionaries
Enterprise Planning and Budgeting Cloud EPBCS Factsheet
Ad

Viewers also liked (20)

PPT
FDMEE Tutorial - Part 1
PPTX
Migration Approaches for FDMEE
PPTX
KScope14 FDMEE Multiproduct
PPTX
What Would Happen If I...? FDMEE Edition
PPTX
Cycling Off FDM Classic on Steroids and Taking a Dose of FDMEE HGH
DOCX
Configuring FDMEE 11.1.2.4 & Sample File Load (HFM).
PDF
Trigger maxl from fdmee
PDF
FDMEE Workhacks
PPT
FDMEE Tutorial - Part 1
PDF
Taking Your FDM Application to the Next Level with Advanced Scripting
PPTX
Loading Smartlists into PBCS using FDMEE
PDF
Jython: Integrating Python and Java
PDF
How to install EPMA Clients
PDF
FDM to FDMEE migration utility
PPTX
Hfm demo (1)
PPTX
Terumo Medical Integrated Business Analytics at its Best
PPTX
FDMEE 11.1.2.4.200 Partner Meeting - May 2016
PDF
Automating and Accelerating Application Deployments to IBM WebSphere without ...
PDF
Hyperion Financial Management Application Design for Performance
PPTX
Getting the Most out of EPMA: HFM Managing Metadata with EPMA
FDMEE Tutorial - Part 1
Migration Approaches for FDMEE
KScope14 FDMEE Multiproduct
What Would Happen If I...? FDMEE Edition
Cycling Off FDM Classic on Steroids and Taking a Dose of FDMEE HGH
Configuring FDMEE 11.1.2.4 & Sample File Load (HFM).
Trigger maxl from fdmee
FDMEE Workhacks
FDMEE Tutorial - Part 1
Taking Your FDM Application to the Next Level with Advanced Scripting
Loading Smartlists into PBCS using FDMEE
Jython: Integrating Python and Java
How to install EPMA Clients
FDM to FDMEE migration utility
Hfm demo (1)
Terumo Medical Integrated Business Analytics at its Best
FDMEE 11.1.2.4.200 Partner Meeting - May 2016
Automating and Accelerating Application Deployments to IBM WebSphere without ...
Hyperion Financial Management Application Design for Performance
Getting the Most out of EPMA: HFM Managing Metadata with EPMA
Ad

Similar to KScope14 Jython Scripting (20)

PPTX
CCT (Check and Calculate Transfer)
PPTX
Presentation CCT
PPTX
CCT Check and Calculate Transfer
PDF
Beyond 49x Transformers: Don't be afraid of (the) Python!
PDF
FDMEE Scripting - Cloud and On-Premises - It Ain't Groovy, But It's My Bread ...
PDF
Certified Professional Diploma in Data Science.pdf
PDF
Jython 2.7 and techniques for integrating with Java - Frank Wierzbicki
PDF
14 f intro to python-3.3
PPTX
Python and Oracle : allies for best of data management
PPT
What do you mean it needs to be Java based? How jython saved the day.
ODP
20 cool things python
PPT
BigData Analytics with Hadoop and BIRT
PPTX
Getting Started with Python
PPTX
Integrated dwh 3
PDF
Integrating FME with Python: Tips, Demos, and Best Practices for Powerful Aut...
PDF
Integrating FME with Python: Tips, Demos, and Best Practices for Powerful Aut...
PDF
tranSMART Community Meeting 5-7 Nov 13 - Session 3: transmart-data
PDF
Oracle to MySQL 2012
PDF
EMBA - Firmware analysis - Black Hat Arsenal USA 2022
ODP
Python for Data Logistics
CCT (Check and Calculate Transfer)
Presentation CCT
CCT Check and Calculate Transfer
Beyond 49x Transformers: Don't be afraid of (the) Python!
FDMEE Scripting - Cloud and On-Premises - It Ain't Groovy, But It's My Bread ...
Certified Professional Diploma in Data Science.pdf
Jython 2.7 and techniques for integrating with Java - Frank Wierzbicki
14 f intro to python-3.3
Python and Oracle : allies for best of data management
What do you mean it needs to be Java based? How jython saved the day.
20 cool things python
BigData Analytics with Hadoop and BIRT
Getting Started with Python
Integrated dwh 3
Integrating FME with Python: Tips, Demos, and Best Practices for Powerful Aut...
Integrating FME with Python: Tips, Demos, and Best Practices for Powerful Aut...
tranSMART Community Meeting 5-7 Nov 13 - Session 3: transmart-data
Oracle to MySQL 2012
EMBA - Firmware analysis - Black Hat Arsenal USA 2022
Python for Data Logistics

More from Alithya (20)

PDF
Journey to the Oracle Talent Management Cloud
PPTX
What Did I Miss? Addressing Non-Traditional Reconciliations in AR and Data In...
PPTX
Leading Practices in Multi-Pillar Oracle Cloud Implementations
PPTX
Why and How to Implement Operation Transfer Pricing (OTP) with Oracle EPM Cloud
PPTX
How to Deploy & Integrate Oracle EPM Cloud Profitability and Cost Management ...
PPTX
Workforce Plus: Tips and Tricks to Give Workforce an Extra Kick!
PPTX
How to Allocate Your Close Time More Effectively
PPTX
Viasat Launches to the Cloud with Oracle Enterprise Data Management
PPTX
How Do I Love Cash Flow? Let Me Count the Ways…
PPTX
How WillScot-Mobile Mini Utilized Enterprise Data Management for Business Tra...
PPTX
❤️ Matchmaker, Make Me a Match: Can AR Intercompany Matchmaking Tools Be a Pe...
PPTX
Legg Mason’s Enterprise, Profit Driven Quest with Oracle EPM Cloud
PPTX
Supply Chain Advisory and MMIS System Oracle Implementation
PPTX
Digital Transformation in Healthcare: Journey to Oracle Cloud for Integrated,...
PDF
nter-pod Revolutions: Connected Enterprise Solution in Oracle EPM Cloud
PPTX
ODTUG Configuring Workforce: Employee? Job? or Both?
PPTX
Oracle Cloud Time and Labor: Default Payroll Rate, Override Rate and Flat Dol...
PDF
AUSOUG I Am Paying for my Cloud License. What's Next?
PDF
A Journey to Profitability with Oracle PCMCS
PPTX
Essbase Calculations: Elements of Style
Journey to the Oracle Talent Management Cloud
What Did I Miss? Addressing Non-Traditional Reconciliations in AR and Data In...
Leading Practices in Multi-Pillar Oracle Cloud Implementations
Why and How to Implement Operation Transfer Pricing (OTP) with Oracle EPM Cloud
How to Deploy & Integrate Oracle EPM Cloud Profitability and Cost Management ...
Workforce Plus: Tips and Tricks to Give Workforce an Extra Kick!
How to Allocate Your Close Time More Effectively
Viasat Launches to the Cloud with Oracle Enterprise Data Management
How Do I Love Cash Flow? Let Me Count the Ways…
How WillScot-Mobile Mini Utilized Enterprise Data Management for Business Tra...
❤️ Matchmaker, Make Me a Match: Can AR Intercompany Matchmaking Tools Be a Pe...
Legg Mason’s Enterprise, Profit Driven Quest with Oracle EPM Cloud
Supply Chain Advisory and MMIS System Oracle Implementation
Digital Transformation in Healthcare: Journey to Oracle Cloud for Integrated,...
nter-pod Revolutions: Connected Enterprise Solution in Oracle EPM Cloud
ODTUG Configuring Workforce: Employee? Job? or Both?
Oracle Cloud Time and Labor: Default Payroll Rate, Override Rate and Flat Dol...
AUSOUG I Am Paying for my Cloud License. What's Next?
A Journey to Profitability with Oracle PCMCS
Essbase Calculations: Elements of Style

Recently uploaded (20)

PDF
Stem Cell Market Report | Trends, Growth & Forecast 2025-2034
PDF
A Brief Introduction About Julia Allison
PDF
Laughter Yoga Basic Learning Workshop Manual
PPTX
Principles of Marketing, Industrial, Consumers,
PPTX
5 Stages of group development guide.pptx
PPT
Data mining for business intelligence ch04 sharda
PPT
Chapter four Project-Preparation material
PDF
NISM Series V-A MFD Workbook v December 2024.khhhjtgvwevoypdnew one must use ...
PDF
pdfcoffee.com-opt-b1plus-sb-answers.pdfvi
DOCX
unit 1 COST ACCOUNTING AND COST SHEET
PDF
IFRS Notes in your pocket for study all the time
PPT
340036916-American-Literature-Literary-Period-Overview.ppt
PDF
Digital Marketing & E-commerce Certificate Glossary.pdf.................
PPTX
2025 Product Deck V1.0.pptxCATALOGTCLCIA
PDF
Types of control:Qualitative vs Quantitative
PDF
Elevate Cleaning Efficiency Using Tallfly Hair Remover Roller Factory Expertise
PPTX
CkgxkgxydkydyldylydlydyldlyddolydyoyyU2.pptx
PDF
kom-180-proposal-for-a-directive-amending-directive-2014-45-eu-and-directive-...
PDF
BsN 7th Sem Course GridNNNNNNNN CCN.pdf
PPTX
New Microsoft PowerPoint Presentation - Copy.pptx
Stem Cell Market Report | Trends, Growth & Forecast 2025-2034
A Brief Introduction About Julia Allison
Laughter Yoga Basic Learning Workshop Manual
Principles of Marketing, Industrial, Consumers,
5 Stages of group development guide.pptx
Data mining for business intelligence ch04 sharda
Chapter four Project-Preparation material
NISM Series V-A MFD Workbook v December 2024.khhhjtgvwevoypdnew one must use ...
pdfcoffee.com-opt-b1plus-sb-answers.pdfvi
unit 1 COST ACCOUNTING AND COST SHEET
IFRS Notes in your pocket for study all the time
340036916-American-Literature-Literary-Period-Overview.ppt
Digital Marketing & E-commerce Certificate Glossary.pdf.................
2025 Product Deck V1.0.pptxCATALOGTCLCIA
Types of control:Qualitative vs Quantitative
Elevate Cleaning Efficiency Using Tallfly Hair Remover Roller Factory Expertise
CkgxkgxydkydyldylydlydyldlyddolydyoyyU2.pptx
kom-180-proposal-for-a-directive-amending-directive-2014-45-eu-and-directive-...
BsN 7th Sem Course GridNNNNNNNN CCN.pdf
New Microsoft PowerPoint Presentation - Copy.pptx

KScope14 Jython Scripting

  • 1. Jython Scripting in FDMEE It's Not That Scary Tony Scalese Edgewater Ranzal
  • 3. We offer a full spectrum of EPM/BI Services Dashboards & Scorecards, Financial Analytics & Reporting, Operational Analytics, What-if Analysis, Query & Reporting, Visual Exploration Financial performance, Legal, Segment & Mgmt Reporting, Financial Close HFM Optimization, Performance Lab SOX Compliance Support Strategic Finance, Planning, Budgeting, Forecasting, Workforce Planning, Capital Planning, Project Financial Planning Data Integration, Financial Data Management, Data Warehousing, Master Data Management &DRM, ETL Services, Automation Project/Program Mgmt, EPM Road Maps, Application Reviews, Business Requirements, Process Change, Documentation Installation, Upgrades, Migration, System Monitoring, Backup and Recovery, Disaster Recovery, Load Testing, Hardware Sizing, Exalytics Benchmarking Consolidation Business Intelligence Enterprise Planning Infrastructure Training & Support Services Project Management Data Services Costing & Profitability Mgmt Support Services – Infrastructure & Application Support Contracts Key Teach Course Delivery: Planning, Essbase, Financial Reporting, Smart View, HPCM, HFM, FDM, DRM, OBIEE Custom Training Delivery: Process & Reporting HPCM Standard & Detailed Models, Waterfall Allocations, Activity Based Costing, Customer, Product & LOB Profitability
  • 4.  Jython Overview  Configuring Eclipse  FDMEE Scripting Configuration Agenda
  • 5.  Why Jython and not VBScript? ● Jython is the strategic direction of Oracle development ● Jython is platform independent ● The API supporting Jython scripting will continue to be enhanced ● Jython error handling is more elegant and robust Let’s Get It Out of the Way
  • 6.  Python programming language written in JAVA  Syntax is more sensitive than VBScript  Variable data type is critical; declaration is implicit  Comment characters: # or ‘’’<comment block>’’’  import statement allows easy reuse of code  Far more robust error handling  Familiarize yourself with camelCase  Not that different than VBScript Jython Basics
  • 7.  Import JAVA classes import java.sql as sql  Utilize Try...Except try: Code to execute except: Error handling Script Format
  • 8.  Sys, Traceback: Can be used to get detailed error information including line in script producing error  Java.sql: Used to interact with remote databases  Smtplib: Used for email generation Commonly Used JAVA Classes
  • 9. Method Functionality count(Substring,[Start],[End]) Number of times substring occurs endswith(Suffix,[Start],[End]) Boolean result; does string end with suffix find(substring,[Start],[End]) Returns position where substring is found isdigit() Boolean result; is string all numbers isspace() Boolean result; is string all spaces lower() Puts still in all lower case, similar to lcase replace(old,new,[count]) Replaces text in string split([separator],[max split]) Returns a list, string is divided by separator startswith(prefix,[Start],[End]) Boolean result; does string start with prefix strip([characters]) Removes specified character(s) from string upper() Puts still in all upper case, similar to ucase zfill(width) Returns numeric string filled left with zeros Jython String Manipulation
  • 10. Jython VBScript If Then if x == 100: elif x == 200: else: If x = 100 then Elseif x = 200 then Else End if Case No native statement; utilize dictionary or If Then statements Select Case x Case 100 Case 200 Case Else End Select Jython Statements
  • 11. Jython VBScript Do Loop while x<100: Do something x += 1 Do while x < 100 Do something x = x+1 Loop For Loop for x in range(100): Do something For x = 0 to 100 Do something Next Jython Iteration
  • 12. Jython VBScript List lListName = [‘Elem1’,’Elem2’,’Elem3’] for elem in lListName: print elem aArrayName = Array(“Elem1”,”Elem2”,”Elem3”) For each strElem in aArrayName msgbox strElem Next Dictionary dictName = {} dictName[‘Tony Scalese’] = 36 dictName[‘Opal Alapat’] = 39 for sKey,sItem in dictName.iteritems(): print sKey + ‘’s age is ‘ + str(sItem) Set dictName = CreateObject(“Scripting.Dictionary”) dictName.Add “Tony Scalese”, 36 dictName.Add “Opal Alapat”, 39 For each strKey in dictName.Keys msgbox strKey & “’s age is “ & dictName.Item(strKey) Next Jython Mapping Data Type
  • 13.  Jython Overview  Configuring Eclipse  FDMEE Scripting Configuration Agenda
  • 14.  If a JRE is not installed, be sure to install the 64 bit JRE (install using defaults) ● http://www.oracle.com/technetwork/java/javase/dow nloads/jre7-downloads-1880261.html JAVA Runtime Environment (JRE)
  • 15.  Download Jython 2.5.1 from http://www.jython.org/downloads.html ● Do not use a more up to date version! Jython Download
  • 16.  Select English  Next  Accept the EULA  Next  Select Standard  Next  Leave the default C:Jython2.5.1 directory  Next  May be prompted that the directory is created, click OK and Next again  Leave Current as JAVA home directory  Next  Click Next on the Summary tab, install will begin  Click Next on the ReadMe and then Finish Jython Install
  • 17.  Confirm the C:jython2.5.1 directory exists  Confirm jython.jar file exists Jython Install Confirmation
  • 18.  Download Eclipse Standard from http://www.eclipse.org/downloads/ Download Eclipse
  • 19.  Extract the download to the C: directory  Open the C:Eclipse folder and launch eclipse.exe Extract Eclipse
  • 20.  Specify a default workspace Workspace
  • 21.  Expand General  Editors and click Text Editors  Change the options: ● Display tab width: 2 ● Insert spaces for tabs: Checked ● Show Print Margin: Checked ● Show Line Numbers: Checked Configure Eclipse General Options
  • 22.  Select Windows  Preferences  Expand Install/Update  Click Available Software Sites  Click Add  Name: PyDev  Location: http://pydev.org/updates/  Click OK Install PyDev
  • 24.  Select Help  Install New Software  Click PyDev from the Work With drop down  Check PyDev  Click Next  Click Next  Accept the EULA and click Finish PyDev Install
  • 25.  Put a check next to the certificate  Click OK  Click Yes to restart Eclipse after the install PyDev Install
  • 26.  Windows  Preferences  Expand PyDev and click Editor  Change tab length to 2 Set PyDev Options
  • 27.  Interpreter – Jython  Click New ● Interpreter Name: Jython2.5.1 ● Browse and select Jython.jar from C: drive  Click OK Set PyDev Interpreter
  • 28.  When prompted, leave defaults and click OK Set PyDev Interpreter
  • 29.  Close the Welcome Screen  Right click the Package Explorer  New  Project Creating a Project
  • 30.  Expand PyDev and select PyDev Project  Click Next Creating a Project
  • 31.  Name the Project  Change the project type to Jython  Click Finish  Click Yes when prompted Creating a Project
  • 32.  Right click the Project  Select New  Folder ● Name the folder src ● Repeat and create as lib Organize Code
  • 33.  Right click lib folder and select Import  Expand General and select File System Import JAR Files
  • 34.  From Directory: lib directory of FDM ● %hyperion_home%ProductsFinancialDataQualityli b  Check the aif-apis.jar  Click Finish Import FDMEE JAR
  • 35.  Right click the project (ER_FDMEE)  Select Properties  Click PyDev – PYTHONPATH  Click Add jar/zip/egg  Expand the project and click the lib folder Update Python Path
  • 36.  Add new PyDev module ● Right click src folder ● New  PyDev module Creating Modules
  • 37.  Specify a name  Click Finish  When prompted for a template, select Module main and click OK Creating Modules
  • 38.  Add print “hello”  Run the script ● Run as Jython Run  hello shows in the console window when successful Testing Module
  • 39.  Add the following text to the module: ● import com.hyperion.aif.scripting.API as API  Save the module  Type API(). on a new line.  A list of available methods will display Testing FDMEE API Usage
  • 40.  Jython Overview  Configuring Eclipse  FDMEE Scripting Configuration Agenda
  • 41.  The equivalent of Import – Data Pump scripts in FDM Classic  Import Integration scripts have been replaced by the Open Interface adaptor and the BefImport event script  Import scripts are used to manipulate data during the import process  Execute during an import process when assigned to the import format used by the location and data load rule  Every line in the data file is evaluated  Avoid the temptation to overuse import scripts ● Parsing strings that cannot be parsed by an import format ● Temporary variables storing header information ● Mapping data should be done in maps, not import scripts Import Scripts
  • 42.  Define the script name ● def ScriptName (strfield,strrecord):  Write script actions ● aField = split(strrecord,”-”) ● sCostCenter = aField[1]  Return result to function ● return sCostCenter Import Script Syntax Notice the colon at the end
  • 43. def EBS_CostCenter(strField, strRecord): sCC = strField if strField.count(“.”) > 0: aSegments = strField.split(‘.’) sCC = aSegments[2] return sCC Sample Import Script Notice the colon at the end
  • 44.  No longer limited to 5  Declare a variable before the function  Designate the variable as global strDept = “” def Nvision_Entity(strfield,strrecord): if strrecord[1:5] == “Dept:”: global strDept strDept = strrecord[6:9] return strfield Temporary Variables (RES.pVarTempx)
  • 45.  Simply return temporary variable in “assign” script def Nvision_C1(strfield,strrecord): return strDept Using Temporary Variables
  • 46.  Similar in concept to varValues  Be careful of overuse due to performance impacts  Enter #SCRIPT to activate script section of maps  fdmRow.getString(“FieldName”)  fdmResult = “Mapped_Result” Mapping Scripts
  • 47.  Execute during defined events within the application  Fewer than FDM Classic, notably StartUp, POVChanged  Scope needs to be well defined to ensure process only executes when needed  No need to declare function ● def BefImport():  Not needed Event Scripts
  • 48. Event Description FDM Classic Equivalent Import Executes any time the import process is executed ImportAction, FileImport Calculate Before & After Logic groups and maps processing Calculate ProcLogicGrp When logic groups are assigned ProcLogicGroup ProcMap Executes ONCE during mapping application ProcMap Validate Validate workflow step Validate ExportToDat Export workflow step ExportToDat Load Export workflow step Load Consolidate Export workflow step Consolidate Check Check workflow step Check Events – Before and After
  • 49.  Custom scripts are used to extend the functionality of FDMEE  Custom script are organized in groups ● Scripts can be assigned to multiple groups  Custom scripts are registered ● Similar to Menu Maker specifying a caption ● Parameters can be added to make a script more dynamic  Custom scripts can executed from web UI  No need to declare function ● def ER_OutputData():  Not needed Custom Scripts
  • 50.  Create a group ● Logical grouping that a user can select ● By Region: North America, EMEA, Asia Pacific ● By Purpose: Data Exports, Budget, Actuals  Register script to group ● Add parameters if applicable Custom Script Registration
  • 51.  Select Group  Select Script & click Execute ● Specify parameters if applicable  Select Execution Mode and click OK Executing Custom Scripts
  • 52.  Used to test code without actually impacting the data in FDMEE  4 sections: 1. Initialize dev mode 2. Populate context 3. Custom code 4. Clean-up actions  Once code is tested, sections 1, 2 & 4 can be removed, handled natively by the application Development Mode
  • 53. Commonly Used Occasionally Used Rarely Used APPID CATKEY CATNAME CHKSTATUS EXPSTATUS IMPSTATUS INBOXDIR LOADID LOCKEY LOCNAME OUTBOXDIR PERIODNAME PERIODKEY PROCESSSTATUS SCRIPTSDIR VALSTATUS EXPORTFLAG EXPORTMODE FILEDIR FILENAME IMPORTFLAG IMPORTFORMAT IMPORTMODE MULTIPERIODLOAD RULEID RULENAME SOURCENAME SOURCETYPE TARGETAPPDB TARGETAPPNAME BATCHSCRIPTDIR EPMORACLEHOME EPMORACLEINSTANCEHOME FDM Context  Each execution includes a collection of information
  • 54. import java.math.BigDecimal as BigDecimal import java.sql as sql import com.hyperion.aif.scripting.API as API fdmAPI = API() conn = sql.DriverManager.getConnection("jdbc:oracle:thin:@server:port:SID", "user", "password"); conn.setAutoCommit(False) fdmAPI.initializeDevMode(conn); print “Connected” Initialize Development Mode
  • 55. fdmContext = fdmAPI.initContext(BigDecimal(LoadID)) print “Location Name: “ + fdmContext[“LOCNAME”] Populate Context
  • 57.  getPOVLocation(LoadID), Category, StartPeriod, EndPeriod: Returns key, not text  executeDML(query,param_list)  getCustomScriptParameterValue(loadID,param): Load ID is optional  executeQuery(query,parameters): Returns recordset  showCustomFile(FilePath): Display file  showCustomMessage(message)  logFatal(message), Error, Warn, Info, Debug Useful FDM APIs
  • 58.  The BefImport event script is used in conjunction with the Open Interface adaptor to import data from relational source  This approach replaces import integration scripts from FDM Classic  Check out Mike Casey’s presentation - Using the Open Interface Adapter in FDM Enterprise Edition 11.1.2.3 - on 6/25 from 2-3 for a deep dive into the setup Integrating Data from Relational Sources
  • 59. import java.text.SimpleDateFormat as SimpleDateFormat import java.sql as sql strPOVPer = fdmContext["PERIODKEY"] strYear = SimpleDateFormat("yyyy").format(strPOVPer) lngMonth = SimpleDateFormat("MM").format(strPOVPer) strMonth = SimpleDateFormat("MMM").format(strPOVPer) batchName = "MatchDataLoadRuleParam" BefImport Script Sample - Setup
  • 60. insertStmt = """ INSERT INTO AIF_OPEN_INTERFACE ( BATCH_NAME ,YEAR ,PERIOD ,PERIOD_NUM ,CURRENCY ,COL01 ,COL02 ,AMOUNT ) VALUES ( ? ,? ,? ,? ,? ,? ,? ) """ BefImport Script Sample – Build Query
  • 61. #Connect to source DB sourceConn = sql.DriverManager.getConnection("jdbc:oracle:thin:@Serv er:Port:SID","User","Password"); #Build SELECT statement to get data to insert selectStmt = "Select * from table n" selectStmt = selectStmt + "Where 1=1 n" #Run the query to get the data stmt = sourceConn.prepareStatement(selectStmt) RS = stmt.executeQuery() BefImport Script Sample – Run Query
  • 62. #Loop through the data and import it into the Open Interface table while(RS.next()): params = [ batchName, strYear,strMonth,lngMonth, "USD", RS.getString("Account"), RS.getString("Entity"), RS.getBigDecimal("Amount") ] fdmAPI.executeDML(insertStmt, params, False) fdmAPI.commitTransaction() #Close the connection RS.close() sourceConn.close() BefImport Script Sample – Import Data