• No results found

Infobasic Programming

N/A
N/A
Protected

Academic year: 2021

Share "Infobasic Programming"

Copied!
70
0
0

Loading.... (view fulltext now)

Full text

(1)

T2BTT – R06 – 1.0 Copyright 2005 TEMENOS HEADQUARTERS SA1

(2)

Agenda

 Introduction to Infobasic  Arrays and types of arrays

 Introduction to subroutines and programs  Important functions/commands in Infobasic  Steps to create a subroutine in T24

 Compiling and cataloguing routines and programs  T24 routines – file operations

 T24 routines – sequential file access

(3)

Introduction To Infobasic

 Programming language used for T24  Simple – English like statements

 No declaration of variables required  No data type specification is required

 All variables by default have infinite variable length

– Multi value – Sub Value

(4)

Arrays

 Continuous allocation of bytes

 All bytes in an array have the same name as that of the array

 Each byte is uniquely identified with the help of a subscript.

T E M E N O S

(5)

Arrays In Infobasic

 Dynamic Arrays

– Dynamic in nature – Variable length

– Need not be declared

– Can hold any type of data

– Automatically increase or decrease in size depending on the

data

– All variables in Infobasic are dynamic arrays

 Dimensioned arrays

– Have a fixed number of rows and columns – Can hold any type of data

– Needs to be declared

– Used when dimensions and extents are known and are not

(6)

Dynamic Array

CUSTOMER.NAME = ‘’ RATE = 0

DATE = “121202”

Can store any type and any amount of data. Only initialisation is required.

(7)

Arrays

 Dynamic Arrays (Cont.)

Uses delimiters to store data of various fields

ASCII Decimal Description

254 Field Marker

253 Value Marker

(8)

Sample Record From The TEMENOS.TRG 1 Name 2.1 Address 2.2 Address 2.3 Address 3.1 Course Category 4.1.1 Course Name 4.1.2 Course Name 3.2 Course Category 4.2.1 Course Name 4.2.2 Course Name 5 Free Text TemenosTrg India UK Geneva Technical jBASE T24 Functional Lending Financials

(9)
(10)

Storage In A Dynamic Array

TemenosTrgFMIndiaVMUKVMGenevaFMTechnicalVMFunctionalFM

jBASESMT24VMLendingSMFinancialsFMFMTrainer.1

Copyright 2005 TEMENOS HEADQUARTERS S1A0

(11)

Dimensioned Array DIM ARRAY1(4,3) 4 – Rows 3 – Columns Copyright 2005 TEMENOS HEADQUARTERS S1A1

(12)

Dimensioned Array (Cont.)

DIM ARRAY2(4) 4 – Rows

Unlimited columns (Each row will be a dynamic array)

Copyright 2005 TEMENOS HEADQUARTERS S1A2

(13)

Structure Of An Infobasic Program

PROGRAM – Executed from the database prompt SUBROUTINE – Execute from within Globus

*Comments *Comments

PROGRAM <Programname> SUBROUTINE <Subroutinename>

Statement 1 Statement 1 Statement 2 Statement 2 Statement 3 Statement 3 RETURN END END Copyright 2005 TEMENOS HEADQUARTERS S1A3

(14)

lib.so.1 lib.so.2 Compiling And Cataloguing Routines

EB.COMPILE TRG.BP TRG.RTN1

COMPILE CATALOG

Check for errors Error – Exit

No Error

Produce object code $TRG.RTN1 TRG.BP $TRG.RTN1 Check JBCDEV_LIB JBCDEV_LIB = $HOME/lib $HOME/lib Is there place here Is there place here

(15)

Compiling And Cataloguing Programs

EB.COMPILE TRG.BP TRG.PRG1

COMPILE CATALOG

Check for errors Error – Exit No Error Produce executable $TRG.PRG1 TRG.BP $TRG.PRG1 Check JBCDEV_BIN JBCDEV_BIN = $HOME/bin $HOME/bin TRG.PRG1 Copyright 2005 TEMENOS HEADQUARTERS S1A5

(16)

Executing Routines

Login into T24

Make an entry in the PGM.FILE

At the command line TRG.RTN1

JBCOBJECTLIST =

$HOME/globuslib;$HOME/lib

Execute the routine

(17)

Executing Programs Go to the database prompt jsh..> TRG.PRG1 PATH = .;$HOME/globusbin;$HOME/bin;$PATH Execute the program

(18)

Writing A Simple Infobasic Program

Program to display ‘Hello World’

JED TRG.BP HELLO PROGRAM HELLO CRT “Hello World” END

(19)

Compile And Execute The Program

 Compile and catalog

EB.COMPILE TRG.BP HELLO

 Execute the program

jsh..>HELLO Hello World

Copyright 2005 TEMENOS HEADQUARTERS S1A9

(20)

Workshop 1

Copyright 2005 TEMENOS HEADQUARTERS S2A0

(21)

Control Structures  IF THEN ELSE IF <condition> THEN <statements> END ELSE <statements> END Copyright 2005 TEMENOS HEADQUARTERS S2A1

(22)

 BEGIN CASE … END CASE

BEGIN CASE

CASE <variable> = <value> <statements>

CASE <variable> = <value> <statements>

CASE <variable> = <value> <statements> CASE 1

<statements> END CASE

(23)

 FOR

FOR <variable> = <initialvalue> TO <maximumvalue> <statements>

NEXT <variablename> Copyright 2005 TEMENOS

(24)

 Open Loop LOOP CRT “Input 2 Numbers” INPUT Y.NUM1 INPUT Y.NUM2 WHILE Y.NUM1:Y.NUM2 CRT “Total “ : Y.NUM1 + Y.NUM2 REPEAT

(25)

 LEN(e) Length  COUNT(e,d)

 CHANGE(e,d,c) Change  OCONV(e,d) Convert Built In Infobasic Functions

of the text in expression

Number of occurrences of d in e  DCOUNT(e,d) Number of occurrences of d in e, +1

 UPCASE(e) Converts e to uppercase  DOWNCASE(e) Converts e to lowercase

occurrences of d to c in e

e into the format specified in d

Copyright 2005 TEMENOS HEADQUARTERS S2A5

(26)

Structure Of A Subroutine SUBROUTINE SubroutineName $INSERT I_COMMON $INSERT I_EQUATE Actual Statements Actual Statements RETURN END Copyright 2005 TEMENOS

(27)

Insert Files

 I_COMMON

– Defines all common variables

 I_EQUATE

– Equates a number of common variables

 Insert files are available under GLOBUS.BP

 Common variables get loaded when a user signs on

 Some common variables are loaded when specific

applications are opened/specific actions are performed Example : R.USER, ID.NEW

(28)

Example 2

Write a subroutine that will display the details

(Id, Mnemonic and Nationality)of a customer whose id is 100069

Copyright 2005 TEMENOS HEADQUARTERS S2A8

(29)

Algorithm

 Step 1. Open the Customer File

 Step 2. Read the Customer file and extract the record with id 100069

 Step 3. From the extracted record obtain the mnemonic and nationality

 Step 4. Display the customer id,mnemonic and nationality.

Copyright 2005 TEMENOS HEADQUARTERS S2A9

(30)

Open A File

 Use the command OPEN

OPEN FBNK.CUSTOMER…….

But…….

(31)

Open A File (Cont.)

 OPF – Open File

CALL OPF(FN.CUS,F.CUS)

FN.CUS = ‘F.CUSTOMER’ (File Name) F.CUS = ‘’ (File Path)

Copyright 2005 TEMENOS HEADQUARTERS S3A1

(32)

Read A File

Use the Globus subroutine 1 - File name

2 - ID of the record to be read

CALL F.READ(1,2,3,4,5)

3 - Dynamic array that will hold the read record 4 - File Path

5 – Error Variable

CALL F.READ(FN.CUS,”100069”,R.CUSTOMER,F.CUS,CUS.ERR1)

F.READ always checks if the record is in cache. If yes, fetches the record from the cache, else retrieves the record from the databse.

(33)

Record Returned By F.READ

Contents of R.CUSTOMER

DAOHENGBK¬DAO HENG BANK INC¬DAO HENG BANK INC¬¬119 ASIAN MANSION 209 DELA ROSA ST¬ LEGASPI VILLAGE MAKATI CITY MAN PH ¬¬¬¬ 1111¬

90¬¬8100¬999¬PH¬4¬ PH¬ 20000101 ¬¬¬¬¬ 20000101

¬¬¬1¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬1¬18_RICKBANAT1ÿ28_ANDREABARNES1¬0006121042¬18_RI CKBANAT1¬US0010001¬1¬¬

Copyright 2005 TEMENOS HEADQUARTERS S3A3

(34)

Extract Values

R.CUSTOMER<1> R.CUSTOMER<15>

What happens after an upgrade?

(35)

I_F.CUSTOMER File

Copyright 2005 TEMENOS HEADQUARTERS S3A5

(36)

Display Parts Of A Record

Y.MNEMONIC = R.CUSTOMER<EB.CUS.MNEMONIC> Y.NATIONALITY = R.CUSTOMER<EB.CUS.NATIONALITY> Copyright 2005 TEMENOS

(37)

Display Parts Of A Record(Cont.)

CRT “Customer Id: “:Y.CUS.ID

CRT “Customer Mnemonic: “:Y.MNEMONIC CRT “Customer Nationality: “:Y.NATIONALITY Copyright 2005 TEMENOS

(38)

Solution 2

*Subroutine to display the details of customer 100069 SUBROUTINE CUS.DISPLAY.DETAILS $INSERT I_COMMON $INSERT I_EQUATE $INSERT I_F.CUSTOMER GOSUB INIT GOSUB OPENFILES GOSUB PROCESS RETURN INIT: FN.CUS = ‘F.CUSTOMER’ F.CUS = ‘’ Y.CUS.ID = 100069 Y.MNEMONIC = ‘’ Y.NATIONALITY = ‘’ R.CUSTOMER = ‘’ CUS.ERR1 = ‘’ RETURN Copyright 2005 TEMENOS

(39)

Solution 2 (Cont.) OPENFILES: CALL OPF(FN.CUS,F.CUS) RETURN PROCESS: CALL F.READ(FN.CUS,Y.CUS.ID,R.CUSTOMER,F.CUS,CUS.ERR1) Y.MNEMONIC = R.CUSTOMER<EB.CUS.MNEMONIC> Y.NATIONALITY = R.CUSTOMER<EB.CUS.NATIONALITY> CRT “Customer Id: “:Y.CUS.ID

CRT “Customer Mnemonic: “:Y.MNEMONIC

CRT ‘Customer Nationality: “:Y.NATIONALITY RETURN

END

Copyright 2005 TEMENOS HEADQUARTERS S3A9

(40)

Solution 2

 Compile and catalog the routine

– EB.COMPILE TRG.BP CUS.DISPLAY.DETAILS

 Make an entry in the PGM.FILE with the type set to ‘M’.

 Execute the routine from the command line.

(41)

Debugging …….

 See the execution of the routine line by line

 Insert the ‘DEBUG’ statement anywhere in the routine

Subroutine to display the details of customer 100069 SUBROUTINE CUS.DISPLAY.DETAILS $INSERT I_COMMON $INSERT I_EQUATE $INSERT I_F.CUSTOMER GOSUB INIT GOSUB OPENFILES GOSUB PROCESS RETURN INIT: DEBUG FN.CUS = ‘F.CUSTOMER’ F.CUS = ‘’ Y.CUS.ID = 100069 Copyright 2005 TEMENOS HEADQUARTERS S4A1

(42)

Debugging……….

Source changed to BP/CUS.DISPLAY.DETAILS 0011 DEBUG jBASE debugger->S 0012 FN.CUS = 'F.CUSTOMER' jBASE debugger->S 0013 F.CUS = '' jBASE debugger->S 0014 Y.CUS.ID = 1038 jBASE debugger->S 0015 Y.MNEMONIC = '' jBASE debugger->S ---0023 PROCESS:

jBASE debugger->V FN.CUS

FN.CUS : FBNK.CUSTOMER jBASE debugger->V F.CUS

F.CUS : File '../mbdemo.data/st/FBNK.CUST000'

(43)

Workshop 2

Copyright 2005 TEMENOS HEADQUARTERS S4A3

(44)

Example 3

Modify example 2 to display the mnemonic and nationality of all the customers

(45)

Algorithm

 Step 1. Open the Customer File  Step 2. Select all the customer ids

 Step 3. Remove one customer id from the selected list  Step 4. For the extracted customer id extract the

corresponding record from the customer file

 Step 5. From the extracted record extract the mnemonic and nationality

 Step 6. Display the customer id, mnemonic and nationality  Repeat Steps 3 to 6 for all customers

(46)

Select

 Assign the select statement to a variable

 SEL.CMD = “SELECT “:FN.CUS

Note the space

 Use the Globus subroutine EB.READLIST to execute the select statement

 Use SSELECT instead of SELECT if you want data in a sorted order

(47)

EB.READLIST

CALL EB.READLIST(1,2,3,4,5)

 1 - Select Statement To Be Executed

 2 - A dynamic array that will hold the ids of all records selected, separated by field markers.

 3 - File that will hold the results of the select statement(Optional)

 4 - Variable that will hold the number of records selected

 5 - Return Code

Copyright 2005 TEMENOS HEADQUARTERS S4A7

(48)

EB.READLIST (Cont.)

CALL EB.READLIST(SEL.CMD,SEL.LIST,’’,NO.OF.REC,RET.CODE) Copyright 2005 TEMENOS

(49)

Insight Into EB.READLIST – Execute Select

SEL.CMD = “SELECT “:FN.CUS:” WITH SECTOR > 1000”

CALL EB.READLIST(SEL.CMD,SEL.LIST,’’,NO.OF.REC,RET.CODE)

How does EB.READLIST execute this SELECT statement?

 Picks up the SELECT statement

 Performs an ‘EXECUTE SEL.CMD’ and store the output on to SEL.LIST

Copyright 2005 TEMENOS HEADQUARTERS S4A9

(50)

Insight Into EB.READLIST - Internal Select

SEL.CMD = “SELECT “:FN.CUS

CALL EB.READLIST(SEL.CMD,SEL.LIST,’’,NO.OF.REC,RET.CODE)

How does EB.READLIST execute this SELECT statement?

 Picks up the SELECT statement

 Realizes that there are no conditions and no sorted select

in SEL.CMD

 Performs an OPF for the file that you wish to select  CALL OPF(FN.CUS.F.CUS)

 Performs ‘SELECT F.CUS’

– This is faster than ‘EXECUTE SEL.CMD’ as it is not actually selecting the file

– It is only positioning the file pointer to the start of the file and then will extract one ID after another and store it in SEL.LIST

(51)

Insight Into EB.READLIST - Internal Select

 Use the facility of internal select in EB.READLIST when

– You wish to process most of the records of a file – You do not want records in a sorted order

Copyright 2005 TEMENOS HEADQUARTERS S5A1

(52)

Repeating A Set Of Statements

Use LOOP and REMOVE(Discussed Earlier) to repeat Steps 3 to 6

(53)

Solution 3

*Subroutine to display the mnemonic and nationality of all customers SUBROUTINE CUS.DISPLAY.DETAILS $INSERT I_COMMON $INSERT I_EQUATE $INSERT I_F.CUSTOMER DEBUG GOSUB INIT GOSUB OPENFILES GOSUB PROCESS RETURN INIT: FN.CUS = 'F.CUSTOMER' F.CUS = '' Y.CUS.ID = '' R.CUSTOMER = '‘ CUS.ERR1 = '' Y.MNEMONIC = '' Y.NATIONALITY = '' SEL.CMD = '' SEL.LIST = '' NO.OF.REC = 0 RET.CODE = '' RETURN Copyright 2005 TEMENOS HEADQUARTERS S5A3

(54)

Solution 3 (Contd.) OPENFILES:

CALL OPF(FN.CUS,F.CUS) RETURN

PROCESS:

SEL.CMD = "SELECT ":FN.CUS

CALL EB.READLIST(SEL.CMD,SEL.LIST,'',NO.OF.REC,RET.CODE) LOOP

REMOVE Y.CUS.ID FROM SEL.LIST SETTING POS WHILE Y.CUS.ID:POS

CALL F.READ(FN.CUS,Y.CUS.ID,R.CUSTOMER,F.CUS,CUS.ERR1) Y.MNEMONIC = R.CUSTOMER<EB.CUS.MNEMONIC>

Y.NATIONALITY = R.CUSTOMER<EB.CUS.NATIONALITY> CRT "Customer Id: ":Y.CUS.ID

CRT "Customer Mnemonic: ":Y.MNEMONIC

CRT "Customer Nationality: ":Y.NATIONALITY REPEAT

RETURN END

(55)

Solution 3

 Add a DEBUG statement in the routine

 Compile and catalog the routine

 Make an entry in the PGM.FILE with the type set to ‘M’.

 Execute the routine from the command line.

Copyright 2005 TEMENOS HEADQUARTERS S5A5

(56)

Workshop 3

Copyright 2005 TEMENOS HEADQUARTERS S5A6

(57)

Example 4

Amend example 3 to store the extracted all the customer Ids, their mnemonics and nationalities in a dynamic array in the following

format

CusId*Mnemonic*NationalityFMCusId*Mnemonic*Nationality

Copyright 2005 TEMENOS HEADQUARTERS S5A7

(58)

Algorithm

 Step 1. Open the Customer File  Step 2. Select all the customer ids

 Step 3. Remove one customer id from the selected list  Step 4. For the extracted customer id extract the

corresponding record from the customer file

 Step 5. From the extracted record extract the mnemonic and nationality

(59)

Algorithm

 Step 6. Store the customer id, mnemonic and the nationality in a dynamic array

 Repeat Steps 3 to 6 for all customers

Copyright 2005 TEMENOS HEADQUARTERS S5A9

(60)

Append Data In An Array

ARRAY<-1> = NewValue

ARRAY<-1> = Y.CUS.ID:’*’:Y.MNEMONIC:’*’:Y.NATIONALITY

(61)

Append Data In An Array (Cont.)

What if an array delimited with VM’s need to formed? ARRAY<1,-1> = Value

What if an array delimited with SM’s need to be formed? ARRAY<1,1,-1> = Value

Copyright 2005 TEMENOS HEADQUARTERS S6A1

(62)

Solution 4

*Subroutine to store the id, mnemonic and nationality of all *customers in an array SUBROUTINE CUS.DISPLAY.DETAILS $INSERT I_COMMON $INSERT I_EQUATE $INSERT I_F.CUSTOMER GOSUB INIT GOSUB OPENFILES GOSUB PROCESS RETURN INIT: FN.CUS = 'F.CUSTOMER' F.CUS = '' Y.CUS.ID = '‘ R.CUSTOMER = '' CUS.ERR1 = '' Y.MNEMONIC = '' Y.NATIONALITY = '' SEL.CMD = '' SEL.LIST = '' NO.OF.REC = 0 RET.CODE = '' CUS.DETAILS.ARRAY = '' RETURN Copyright 2005 TEMENOS

(63)

Solution 4 (Cont.) OPENFILES:

CALL OPF(FN.CUS,F.CUS) RETURN

PROCESS:

SEL.CMD = "SELECT ":FN.CUS

CALL EB.READLIST(SEL.CMD,SEL.LIST,'',NO.OF.REC,RET.CODE) LOOP

REMOVE Y.CUS.ID FROM SEL.LIST SETTING POS WHILE Y.CUS.ID:POS CALL F.READ(FN.CUS,Y.CUS.ID,R.CUSTOMER,F.CUS,CUS.ERR1) Y.MNEMONIC = R.CUSTOMER<EB.CUS.MNEMONIC> Y.NATIONALITY = R.CUSTOMER<EB.CUS.NATIONALITY> CUS.DETAILS.ARRAY<-1> = Y.CUS.ID:'*':Y.MNEMONIC:'*':Y.NATIONALITY REPEAT RETURN END Copyright 2005 TEMENOS HEADQUARTERS S6A3

(64)

Solution 4

 Add a DEBUG statement in the routine

 Compile and catalog the routine

 Make an entry in the PGM.FILE with the type set to ‘M’.

 Execute the routine from the command line.

(65)
(66)

Are there better ways to read data from a file?

(67)

CACHE.READ

 Used to read data from the cache.

– It checks if the record is in cache – If yes, retrieves it from the cache

– Else, does a OPF and F.READ to fetch the record and loads it in the cache

– Will not pick up records from cache if they are more than <SPF->CACHE.EXPIRY> seconds old.

Copyright 2005 TEMENOS HEADQUARTERS S8A1

(68)

 Doesn’t F.READ also perform a similar operation?  When should I use CACHE.READ ?

Use CACHE.READ when

– The record that you retrieve will not be frequently updated – Best used for retrieving parameter records

– It is faster than F.READ as it does not require a call to OPF.

• Only when the record is not available in cache, it will perform

an OPF Copyright 2005 TEMENOS

(69)

CACHE.READ (Cont.)

CACHE.READ(FileName,ID,Record,Error) FILENAME = Name of file - without the mnemonic

(Example : F.CUSTOMER) ID = Valid values are

ID of a record

‘SelectIDs‘ (List of Ids from the ‘FileName’)

‘SSelectIDs’ (List of sorted Ids)

‘SSelectARs’ (List of sorted Ids in ascending order right justified)

Record = Data returned

Error = RECORD NOT FOUND for example

Copyright 2005 TEMENOS HEADQUARTERS S8A3

(70)

CACHE.READ (Cont.)

When

 ID is passed to CACHE.READ

– Check if it exists in cache else will read from disk and load

it to cache

 If ‘SelectIDs’ is passed to CACHE.READ

– Perform a call to EB.READLIST. Since there are no

conditions and it is not a sorted select, an internal selected will be

executed

 If ‘SSelectedID’ or ‘SSelectARs’ is passed

References

Related documents