Your SlideShare is downloading. ×
0
KScope14 Jython Scripting
KScope14 Jython Scripting
KScope14 Jython Scripting
KScope14 Jython Scripting
KScope14 Jython Scripting
KScope14 Jython Scripting
KScope14 Jython Scripting
KScope14 Jython Scripting
KScope14 Jython Scripting
KScope14 Jython Scripting
KScope14 Jython Scripting
KScope14 Jython Scripting
KScope14 Jython Scripting
KScope14 Jython Scripting
KScope14 Jython Scripting
KScope14 Jython Scripting
KScope14 Jython Scripting
KScope14 Jython Scripting
KScope14 Jython Scripting
KScope14 Jython Scripting
KScope14 Jython Scripting
KScope14 Jython Scripting
KScope14 Jython Scripting
KScope14 Jython Scripting
KScope14 Jython Scripting
KScope14 Jython Scripting
KScope14 Jython Scripting
KScope14 Jython Scripting
KScope14 Jython Scripting
KScope14 Jython Scripting
KScope14 Jython Scripting
KScope14 Jython Scripting
KScope14 Jython Scripting
KScope14 Jython Scripting
KScope14 Jython Scripting
KScope14 Jython Scripting
KScope14 Jython Scripting
KScope14 Jython Scripting
KScope14 Jython Scripting
KScope14 Jython Scripting
KScope14 Jython Scripting
KScope14 Jython Scripting
KScope14 Jython Scripting
KScope14 Jython Scripting
KScope14 Jython Scripting
KScope14 Jython Scripting
KScope14 Jython Scripting
KScope14 Jython Scripting
KScope14 Jython Scripting
KScope14 Jython Scripting
KScope14 Jython Scripting
KScope14 Jython Scripting
KScope14 Jython Scripting
KScope14 Jython Scripting
KScope14 Jython Scripting
KScope14 Jython Scripting
KScope14 Jython Scripting
KScope14 Jython Scripting
KScope14 Jython Scripting
KScope14 Jython Scripting
KScope14 Jython Scripting
KScope14 Jython Scripting
KScope14 Jython Scripting
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

KScope14 Jython Scripting

2,439

Published on

Tony Scalese, Edgewater Ranzal Oracle Financial Data Management (FDM) practice director, presented "Jython Scripting in FDMEE - It's Not That Scary" at KScope14.

Tony Scalese, Edgewater Ranzal Oracle Financial Data Management (FDM) practice director, presented "Jython Scripting in FDMEE - It's Not That Scary" at KScope14.

Published in: Business
1 Comment
5 Likes
Statistics
Notes
  • http://www.dbmanagement.info/Tutorials/DRM.htm
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total Views
2,439
On Slideshare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
217
Comments
1
Likes
5
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Jython Scripting in FDMEE It's Not That Scary Tony Scalese Edgewater Ranzal
  • 2. Focus Services People Methodology Customers Partnership 15 Years 700+ clients 1000+ projects About 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
  • 23. PyDev Install
  • 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
  • 56.  fdmAPI.closeConnection(); Clean-up Action
  • 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
  • 63. Questions

×