Download RPG IV V5R1 Enhancements - Metro Midrange Systems Association

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
RPG IV V5R1 Enhancements
Presented by
Barry Diehl
At a Glance

Built-In Functions (BIFs)
 Free-format
 Runtime Control of Files and Members
 Improved Error Control
 Increased Java support
 Miscellaneous Changes
How did it happen?

George Farr of IBM Toronto surveys users
giving them a list of possible enhancements.
 Each enhancement is “priced”
 Survey participants can spend $100
What didn’t make it?

Multiple dimension arrays
 Keylists in D specs
 More H-Spec Keywords
 Bitwise operations in expressions
Built-In Functions
Taking time

%TIME{(expression{:time-format})}
%TIMESTAMP{(expression{:*ISO|*ISO0})}
%DATE{(expression{:date-format})}

If no value specified, current system values are retrieved

When the expression is *DATE, UDATE or a timestamp,
don’t use the format - the system knows the format
One More Time








%SECONDS(number)
%MINUTES(number)
%HOURS(number)
%DAYS(number)
%MONTHS(number)
%YEARS(number)
Determine date in 3 years
newdate = date + %YEARS(3)
Determine date 6 months ago
loandate = date - %MONTHS(6)
What’s the Difference?

%DIFF(op1:op2:*MS|*S|*MN|*H|*D|*M|*Y)

Determine the number of days between 2 dates
NumDays = %Diff(LoanDate:DueDate:*D)

Add number of minutes between the start and end
TotalTime = TotalTime + %Diff(StartTime:EndTime:*MN)
Parts Is Parts

Extract a subset of a date, time or timestamp with
%SUBDT

%SUBDT(value:*MS|*S|*MN|*H|*D|*M|*Y)

date = d’1999-02-17’;
time = t’01.23.45’;
num = %SubDt(date:*Y); // num = 1999
num = %SubDt(time:*MN); // num = 23
A Well-Defined Search


%LOOKUPxx(arg:array{:startindex{:numelems}}) returns array index of the element in array that matches
Where xx =
– blank  an exact match
– LT  value closest to arg, but less than arg
– LE  an exact match or the value closest to arg, but less than arg
– GT  value closest to arg, but greater than arg
– GE  an exact match or the value closest to arg, but greater than
arg



Zero is returned if no match found
%Found and %Equal don’t work on this function
Use %TLOOKUPxx for tables
Other Functions

%ALLOC and %REALLOC
 %CHECK and %CHECKR
 %XLATE
 %SHTDN
 %SQRT
Free-Format RPG
Free-format Rules

/FREE and /END-FREE
 Write code between columns 8 and 80
 General form:
opcode(extenders) Factor 1 Factor 2 Result
 Statements end with semi-colon
 End-of-line comments marked with //
 Compiler directives can be used
 Can’t define fields or have result indicators
 Free and fixed can be mixed
Function Replacements









ADDDUR  %YEARS, %MONTHS
ALLOC  %ALLOC
CHECK  %CHECK
CHECKR  %CHECKR
EXTRCT  %SUBDT
LOOKUP  %LOOKUPxx, %TLOOKUPxx
MVR  %REM
OCCUR  %OCCUR
REALLOC  %REALLOC
Function Replacements








SCAN  %SCAN
SHTDN  %SHTDN
SQRT  %SQRT
SUBDUR  %DIFF or minus sign
SUBST  %SUBST
TIME  %DATE, %TIME, %TIMESTAMP
XFOOT  %XFOOT
XLATE  %XLATE
Operator Replacement
ADD  +
 CAT  +
 DIV  /
 MULT  *
 SUB  
Generalize
ANDxx  AND
 DOUxx  DOU
 DOWxx  DOW
 IFxx  IF
 ORxx  OR
 WHENxx  WHEN

Social Engineering - Obsolete











BITOFF  use MOVE
BITON  use MOVE
CABxx
CAS and ENDCS
COMP
GOTO
MHHZO
MHLZO
MLHZO
MLLZO
TAG
Social Engineering – Moving to New











CALL and CALLB  CALLP
DEFINE  D spec – use LIKE or DTAARA keywords
DO  FOR
END  need to qualify the type now
MOVE  EVALR or built-in functions
MOVEA
MOVEL  EVAL or built-in functions
PARM and PLIST  use prototype definition
SETOFF and SETON  EVAL
TESTN and TESTZ
Z-ADD and Z-SUB
Free-Form Details







KLIST and KFLD not included
EVAL is optional
Debug works fine
Most examples in Reference are free-form
Macro in CODE/400 performs one-way
conversion
Mix of Free and Fixed-formats is ok
Compiler directives ok - but no SQL
Fixed-format (page 1)
Free-format (page 1)
Fixed-format (page 2)
Free-format (page 2)
Fixed-format (page 3)
Free-format (page 3)
Fixed-format (page 4)
Free-format (page 4)
Runtime Control of Files and
Members
Runtime Control of Files and
Members

Use EXTFILE(file name) and
EXTMBR(member name) as keywords in F
Spec
 Need USROPN keyword too
 OVRDBF still has control
Improved Error Control
Current Checking
Error indicator or Extender (E) – doesn’t
handle all situations
 *PSSR or INFSR subroutines – can’t easily
return to the statement that caused the
problem

Monitor Group

MONITOR - marks beginning of code to trap errors

ON-ERROR {exception-id1 {:exception-id2…}}
Begins the group for one or more status codes. Can also
use:
– *PROGRAM - all program errors
– *FILE - all file errors
– *ALL - all errors

ENDMON - marks the end of the group
Monitor Group Example
Monitor Group Example page 2
New Error Processing Order

Statement indicators
 Opcode extenders, %STATUS, %ERROR
 MONITOR group
 INFSR
 *PSSR
Increased Java Support
(Many thanks to George Farr of IBM - these are his examples)
RPG Calling JAVA: 3 options
1.
2.
3.
Use QCMDEXC to launch the JVM for
the Java class
Use system C-APIs to instantiate Java
objects and call methods in them (Java
Native Invocation or JNI)
Use V5R1 RPG enhancements that mask
the JVN complexity
Calling Java from RPG

Declare Objects
 Prototype Java Methods
 Instantiate an Object
Declare Objects

D Test
S
O
CLASS(*JAVA:’java.lang.String’)

Must declare a field to hold the object reference
– First parameter must be *JAVA
– Fields of type ‘O’ cannot be DS subfields
– Arrays of objects are allowed
– Fields of type ‘O’ are NOT pointers, they only store
references to objects
Prototype Java Methods
EXTPROC(*JAVA:’java.lang.String’:’trim’)
CLASS(*JAVA:’java.lang.String’)
STATIC

D trimstring PR
D
D

EXTPROC accepts 3 parameters
O
– *JAVA keyword
– ‘package.class’ name of class containing method
– Name of method or *CONSTRUCTOR

Specify return type
– Use CLASS keyword if it returns a Java object (‘O’ type)
– Specify STATIC for static methods
Instantiate an Object

D crtBigDec
D
D Parm1
D*
D refflt
D*
D DblField
PR O
8F
S
O
CLASS(*JAVA:’java.math.BigDecimal’)
S
8F
INZ(‘0’)
C* Instantiate the class
C*
C
EVAL



EXTPROC(*JAVA:’java.math.BigDecimal’:*CONSTRUCTOR)
CLASS(*JAVA:’java.math.BigDecimal’)
VALUE
refflt = crtBigDec(dblField)
Prototype the desired constructor method
Declare the object reference variable
Call the constructor method, store result
Calling Methods Example
D fld
D str
D*
D makestring
D
D parm
D*
D makealpha
D*
D trimstring
D
C
C
C
S
S
PR
10A INZ(‘ Farr ‘)
O CLASS(*JAVA:’java.lang.String’)
O
EXTPROC(*JAVA:’java.lang.String’:*CONSTRUCTOR)
CLASS(*JAVA:’java.lang.String’)
10A
PR 10A EXTPROC(*JAVA:’java.lang.String’:’getBytes’)
PR
O EXTPROC(*JAVA:’java.lang.String’:’trim’)
CLASS(*JAVA:’java.lang.String’)
EVAL str = makestring(fld)
EVAL str = trimstring(str)
EVAL fld = makeslpha(str)
Miscellaneous Changes
ELSEIF

Can combine an ELSE and IF together
If A = 1;
X = X + 1;
ElseIf A = 2;
X = X + 2;
ElseIf A = 3;
X = X + 3;
EndIf;

Reduce number of ENDIFs and nesting
levels
 Don’t forget about SELECT
Qualified Data Structure
Names

New keyword QUALIFIED - allows names
to be reused in the program

Useful in prototyped parameter definitions

New keyword LIKEDS(data structure) will have the same structure
Qualified Data Structures
Example
Summary

Built-In Functions (BIFs)
 Free-format
 Runtime Control of Files and Members
 Improved Error Control
 Increased Java support
 Miscellaneous Changes