Alias
-
- New User
- Posts: 10
- Joined: Wed Jan 15, 2014 11:53 am
- First Name: Patti
- Last Name: Henry-Shuey
- Company Name: DAS Companies, Inc.
- Contact:
Alias
Can you show an example of how, exactly, the Alias keyword is used in the RPG program in order to take advantage of the longer field names from the display?
- David
- Profound Logic Staff Member
- Posts: 690
- Joined: Fri Jan 04, 2008 12:11 pm
- First Name: David
- Last Name: Russo
- Company Name: Profound Logic Software
- Contact:
Re: Alias
I've attached 2 simple examples, based on our 'Hello World' sample program. There is 1 display file, and 2 RPG programs showing a couple of different techniques. See the notes in the RPG source members.
Due to limitations with the RPG compiler, an EXFMT operation is the only one that can work from a DS with *ALL fields from the record format. For other operations like WRITE, READ, CHAIN, READC, etc., you need to have 1 DS declared with *INPUT fields, and another one declared with *OUTPUT fields, depending on the operation.
The easiest way to manage this requirement is probably to use an EVAL-CORR operation to move the data between the input/output DS as needed.
Due to limitations with the RPG compiler, an EXFMT operation is the only one that can work from a DS with *ALL fields from the record format. For other operations like WRITE, READ, CHAIN, READC, etc., you need to have 1 DS declared with *INPUT fields, and another one declared with *OUTPUT fields, depending on the operation.
The easiest way to manage this requirement is probably to use an EVAL-CORR operation to move the data between the input/output DS as needed.
- Attachments
-
- hello002r2.txt
- (1.94 KiB) Downloaded 124 times
-
- hello002r.txt
- (1.64 KiB) Downloaded 106 times
-
- hello002d.txt
- (6.48 KiB) Downloaded 92 times
- Alex
- Profound Logic Staff Member
- Posts: 233
- Joined: Fri Jan 04, 2008 12:10 pm
- First Name: Alex
- Last Name: Roytman
- Company Name: Profound Logic Software
- Contact:
Re: Alias
If you did not have a chance to watch the following webinar, I would recommend it:
http://info.profoundlogic.com/acton/fs/ ... /page/fm/0
In this link, there is a video recording of the webinar as well as code samples. The ALIAS keyword is demonstrated.
http://info.profoundlogic.com/acton/fs/ ... /page/fm/0
In this link, there is a video recording of the webinar as well as code samples. The ALIAS keyword is demonstrated.
-
- Experienced User
- Posts: 165
- Joined: Wed Dec 11, 2013 10:40 am
- First Name: Dave
- Last Name: Clark
- Company Name: WinWholesale, Inc.
- Phone: 937-294-5331
- Address 1: 31101 Kettering Blvd.
- City: Dayton
- State / Province: Outside Canada/USA
- Zip / Postal Code: 45439
- Country: United States
- Contact:
Re: Alias
I was taught from way back to avoid using EXFMT and just use READ/CHAIN and WRITE/UPDATE for my workstation files -- so this "limitation" fits right in with my mindset. It gets annoying when other programmers look down their noses at me for not using EXFMT. ;-)David wrote:Due to limitations with the RPG compiler, an EXFMT operation is the only one that can work from a DS with *ALL fields from the record format. For other operations like WRITE, READ, CHAIN, READC, etc., you need to have 1 DS declared with *INPUT fields, and another one declared with *OUTPUT fields, depending on the operation.
The easiest way to manage this requirement is probably to use an EVAL-CORR operation to move the data between the input/output DS as needed.
So, I defined my file this way:
Code: Select all
* workstation file
FACTMTBLD CF E WORKSTN usropn alias qualified
F indds(wsi) infds(dspfbk)
F sfile(ACTMTBLS: sflrrn)
F HANDLER('PROFOUNDUI(HANDLER)')
Code: Select all
* workstation data structures
D Screen DS likerec(ACTMTBLD.ACTMTBLC:*input)
D Screen_Out DS likerec(ACTMTBLD.ACTMTBLC:*output)
D Grid DS likerec(ACTMTBLD.ACTMTBLS:*input)
D Grid_Out DS likerec(ACTMTBLD.ACTMTBLS:*output)
Code: Select all
more_input = *on; // insure first-time entry into loop
rebuild_screen = *on;
dow more_input // do until told otherwise
and pPgmName = PROC_PGM; // or requested program changes
callp DisplayTheScreen(); // send display to workstation
read ACTMTBLD.ACTMTBLC Screen; // wait for input
callp ProcessTheScreen(pPgmName: pKeyData); // process input from workstation
enddo;
Code: Select all
clear Screen; // clear subfile control data structure
clear Grid; // clear subfile data structure
wsi.SFLInds = SFL_Clear; // request subfile clear
eval-corr Screen_Out = Screen; // move corresponding input data to output
write ACTMTBLD.ACTMTBLC Screen_Out; // clear subfile
wsi.SFLInds = SFL_DisplayAll; // request subfile display
sflrrn = *zero; // initialize subfile record number
dow TmgTbl_GetTableData( Caller: TmgTbl_View2: TmgTbl_IndAry );
sflrrn += 1; // increment subfile record number
Grid.S1ID = TmgTbl_View2.ACTMTABTID; // set the blind key
Grid.S1TBLNME = TmgTbl_View2.TBLNME; // set the table name
Grid.S1LIBCDE = TmgTbl_View2.LIBCDE; // set the library code
Grid.S1TRGENA = TmgTbl_View2.TRGENAFLG; // set the enabled flag
Grid.S1RMVTRG = TmgTbl_View2.RMVTRGFLG; // set the remove flag
Grid.S1TBLDSC = %xlate( CrsApp_InvChrs: CrsApp_Periods
: %trimr(TmgTbl_View2.TBLDSC) ); // set the table description
eval-corr Grid_Out = Grid; // move corresponding input data to output
write ACTMTBLD.ACTMTBLS Grid_Out; // write to subfile
enddo; // loop for more master rows
TmgTbl_GetTableData('*CLOSE'); // close the lookup table
maxrrn = sflrrn; // save last record number as max
wsi.SFLEnd_52 = *on; // set subfile end indicator on
Code: Select all
if (maxrrn = *zero); // if no subfile records present
wsi.SFLInds = SFL_CtlOnly; // turn off display of subfile
endif;
eval-corr Screen_Out = Screen; // move corresponding input data to output
write ACTMTBLD.ACTMTBLC Screen_Out; // write subfile control format
Who is online
Users browsing this forum: No registered users and 8 guests