Test268 Section 4
<< Previous Section | Home | Next Section >>
Contents
- 1 Section 4 - Advanced RPG techniques (25%)
- 1.1 Given an example of a complex logical expression, determine its results
- 1.2 Given an example of deeply-nested logic within a sample of RPG code, determine the results of running the code
- 1.3 Use Data Structure arrays
- 1.4 Code complex D-specs (e.g., OVERLAY, coding fields without attributes, etc.)
- 1.5 Use modern techniques to handle numbered indicators
- 1.6 Determine appropriate use of system APIs
- 1.7 Code subprocedures
- 1.8 Declare and use subprocedures
- 1.9 Create and use multiple occurrence data structures
- 1.10 Use externally-described data structures
- 1.11 Write logic (including I/O operations) without numbered indicators
- 1.12 Code and use /Free format Calc specifications
- 1.13 Code and use Short Form expressions (e.g., + =)
- 1.14 Translate operation codes not supported in /Free form (e.g., MOVE, CALL, etc. into /Free form)
- 1.15 Use qualified Data Structures
- 1.16 Use pointer data types
- 1.17 Code and use Named Constants
- 1.18 Prototype program Calls
- 1.19 Determine appropriate use of passing parameters by value versus by reference
- 1.20 Prototype System APIs and C functions
- 1.21 Understand the ability for RPG procedures to call and be called by Java Methods
- 1.22 Enumerate advantages of Prototypes compared with PARM and PLIST
- 1.23 Determine appropriate use for prototype keywords, such as CONST, VALUE, and OPTIONS (*NOPASS, *OMIT, *VARSIZE)
Section 4 - Advanced RPG techniques (25%)
Given an example of a complex logical expression, determine its results
Given an example of deeply-nested logic within a sample of RPG code, determine the results of running the code
Use Data Structure arrays
If MyDS is a data structure array of 10 elements, then MyDS(5) will access the fifth element of that data structure array. But how do you access the subfields? That requires a bit more discussion.
When you define a data structure array, you not only use the Dim keyword, but you must also specify the Qualified keyword. The Qualified keyword was introduced in V5R1, and it allows you to specify the name of a data structure subfield qualified by the name of the data structure. For example, if data structure MyDS is defined with the Qualified keyword and it contains a subfield named Subfield1, then you would use the following notation to access the subfield:
MyDS.Subfield1
If data structure MyDS is also defined with the Dim keyword, then something like the following notation is used to access subfields in a specific element:
MyDS(5).Subfield1
In this example, you would be accessing the subfield named Subfield1 in the fifth element in the data structure array MyDS.
Code complex D-specs (e.g., OVERLAY, coding fields without attributes, etc.)
D DataStruct1 DS QUALIFIED D Field1 15A INZ('12345ABCDE12345') D Field2 5A OVERLAY(Field1) D Field3 5A OVERLAY(Field1:*NEXT) D Field4 5A OVERLAY(Field1:*NEXT) D Field5 7A OVERLAY(Field3:3) D DataStruct2 DS LIKEDS(DataStruct1) INZ(*LIKEDS)
D Name S 20 D Long_name S +5 LIKE(Name) D Lda_fld S LIKE(Name) DTAARA(*LDA)
Use modern techniques to handle numbered indicators
Determine appropriate use of system APIs
Code subprocedures
- Internal Program Sub-Procedure
D Inter_Func PR 10I 0 D Term1 5I 0 VALUE D Term2 5I 0 VALUE D Term3 5I 0 VALUE
- External Module Sub-Procedure
D Extrn_Func PR 10I 0 EXTPROC('MODULE_FUCT') D Term1 5I 0 VALUE D Term2 5I 0 VALUE D Term3 5I 0 VALUE
- External Program Sub-Procedure
D Pgm_Func PR 10I 0 EXTPGM('PGM_FUCT') D Term1 5I 0 VALUE D Term2 5I 0 VALUE D Term3 5I 0 VALUE
Declare and use subprocedures
Declare the Function and call it
D Function PR 10I 0 D Term1 5I 0 VALUE D Term2 5I 0 VALUE D Term3 5I 0 VALUE D RC S 10I 0 INZ(*ZEROS) /free RC = Function(Term1:Term2:Term3); *INLR = *ON; RETURN; /end-free
start the function and return the results
P Function B D Function PI 10I 0 D Term1 5I 0 VALUE D Term2 5I 0 VALUE D Term3 5I 0 VALUE D Result S 10I 0 /free Result = Term1 ** 2 * 17 + Term2 * 7 + Term3; return Result; /end-free P Function E
Create and use multiple occurrence data structures
Use externally-described data structures
Write logic (including I/O operations) without numbered indicators
/Free SETLL (variable1:variable2) filename; IF %EQUAL(filename); READE(N) (variable1:variable2) filename; DOW NOT %EOF(filename); // logic READE(N) (variable1:variable2) filename; ENDDO; ENDIF; /End-Free
/Free CHAIN (variable3) filename; IF %FOUND(filename); // logic UPDATE filerec; ENDIF; /End-Free
Code and use /Free format Calc specifications
/Free // Convert from a char to Num num = %DEC(char); // Chain to the correct record, checking for error with no rec lock CHAIN(EN) (char) filename1; IF %FOUND(filename1) and NOT %ERROR; // If Condiditon CHAIN (num) filename2; // Chain to next file IF %FOUND(filename2); // If Condition filevar1 += 1; filevar2 = char; filevar3 = proc_call(filevar1:filevar2); // Call a Procedure // Update only field filevar3 in filename2 UPDATE filerec2 %FIELDS(filevar3); ENDIF; ELSEIF %ERROR; DSPLY 'There was an error'; *INLR = %ERROR; RETURN; ENDIF; *INLR = *ON; RETURN; /End-Free
Code and use Short Form expressions (e.g., + =)
i += 1;