With subfiles you can create a display file with lists of items. Let's see how that's done.
利用子文件我們可以創建帶有列表項目的顯示文件,現在我們就看看是如何創建的
A subfile is a display file where you can place a listing of values and process changes on the list. The list of members that you can see in the PDM is an example of a subfile.
子文件是一個顯示文件,它能夠幫助你顯示列表和在列表上作相應的處理,你在PDM上能看到的列表成員就是你的一個子文件
In this chapter we'll create a subfile which will show all the cards from a client given its ID. To make the manipulation of several tables easier, we'll create a view with the fields we'll use on the subfile. In STRSQL insert this code:
在這一章,我們將要創建一個子文件,它用于根據特定的ID顯示所有的卡,為了更好地維護幾張表,我們創建一個表包含多個我們將要用在子文件的字段,在STRSQL中輸入這些代碼
CREATE VIEW CLICARD AS SELECT CL.ID_CLI, CR.ID_CRD, SH.NAME_SHP, CR.SHOP_CRD
FROM DEMO/CLIENTS CL, DEMO/SHOP SH, DEMO/CARDS CR
WHERE CL.ID_CLI = CR.CLIENT_CRD AND CR.SHOP_CRD = SH.ID_SHP
Open SDA (STRSDA) and create a new member:
打開SDA創建一個新的成員
Create a BOTTOM record that should look like this:
創建一個Bottom記錄像如下
And the TOP record like this: 和Top記錄
Let's create the subfile now. Create a new record, name it LIST, the record type is SFL:
現在我們開始創建子文件了,創建一個新的記錄,名字為LIST,記錄的類型是SFL
When you press Enter a new record appears. Write SFLCTL on it:
現在我們按下回車,一個新的記錄出現如下,在上面寫下SFLCTL如圖
This field creates a subfile control record, which works like the heading on the list.
這個字段用來創建子文件控制記錄,就像列表的頭部
You have to activate some options now: 現在你需要激活下面的選項
On the General Keywords menu insert the data you see below:
在General Keywords菜單輸入輸入如下
These indicators allow us to manipulate the status of the subfile from the RPG code. Press Enter to go back to the previous screen. Select Subfile display layout.
這些指示器允許我們利用RPG代碼維護控制控制子文件的狀態,輸入回車我們會返回之前的屏幕界面,現在選擇子文件的顯示布局
On subfile maximum size type 9999 and on the number of records for page type 9:
在子文件的最大值輸入9999和頁面的最大記錄數輸入9
Press enter to go back. Select the option Select Record Keyword:
輸入回車返回,然后選擇字段關鍵字選項
Choose Overlay keywords: 選擇覆蓋關鍵字
Select Overlay without erasing: 選擇覆蓋但不擦除選項
Press Enter until you're back on this screen: 輸入回車,然后返回如下
Open the SFLCTL record. By default the record list is already visible on the design screen. Select to visualize the other 2 records, TOM and BOTTOM (F9).
打開SFLCTL記錄,默認是這個記錄顯示在設計界面上,選擇To和Bottom進行可視化(按下F9)
Back to the design screen, write at the top “Client Nr.”. Select the fields from CLICARD view for input/output (F10) and select the ID_CLI field:
返回設計界面,在上面寫上“Client Nr.”,在CLICARD試圖中選擇字段ID_CLI作為輸入和輸出,
Type the titles of the subfile's columns and a separating line:
輸入分割線和子文件的字段標題
Let's add some proprieties to the Client ID field. Place an * before to the left of the field.
現在我們添加一些新的屬性給與Client ID字段,在這個字段的左邊輸入一個*
We're going to add an indicator to this field, which will be activated when no record is found for an ID inserted (either the ID doesn't exist or it doesn't have any associated cards). Option Error Messages:
現在我們需要為這個字段添加一個指示器,當值一個指定的ID沒有找到記錄(這個ID并不存在或者根據這個ID找不到記錄)的時候,這個指示器將被激活,在錯誤描述選項的地方輸入Y
Insert the following information:
輸入下面的信息
Close this record and open the LIST record. Select the TOP and BOTTOM records for display (F9):
選擇這個記錄并且同時打開這個LIST記錄,選擇Top和Bottom記錄作顯示(按下F9)
To create an input field, where the user will type the options, type '+i' on the same position as in the following image and press Enter.
創建一個輸入字段,用戶我在這里輸入選項,我們在如下圖的位置輸入‘+i’然后按下回車
Notice how the field spread across the 9 line you previously defined as the subfile page size.
注意你之前是如何定義子文件的每頁大小為9行
Select the records from CLICARD view for output.
從CLICARD視圖中選擇記錄作為輸入
The fields will probably be listed twice, because the SDA will show you the field that had been previously loaded from I/O in the SFLCTL record. You should select the fields further to the right, because they are the last ones loaded. You must be careful selecting the fields.
這些字段大概會本顯示兩次,因為SDA會把之前加載的字段也被顯示出來,因此選擇字段的時候需要小心一點,盡量選擇那些比較靠右的字段,因為他們是最后被加載的,
If there are more fields than the ones that can fit the message line, a plus (+) sign will appear at the end of the line. Press Page Down to see the remaining fields.
假如有很多的字段,消息行顯示不完,在行尾會顯示一個+號,按下翻頁鍵就可以看到剩下的那些沒有顯示的字段。
Place the fields on their positions: 將字段放在相關的位置
The final result: 最后的結果

Don't forget to activate the indicator 03 at file-level so that “F3=Exit” can work and add the keyword INDARA to the code. Check out the Display file chapter if you don't remember how to do this.
不要忘記激活03指示器,在文件的層面,使得“F3=Exit”生效,同時添加關鍵字INDARA到代碼中去,假如你忘記了怎么做的話,回頭看看第八章的顯示文件創建。
You must add the red line to the SFLCTL record:
你必須為SFLCTL記錄添加紅線
A R SFLCTL SFLCTL(LIST)
A SFLSIZ(9999)
A SFLPAG(0009)
A OVERLAY
A 30 SFLDSP
A 31 SFLDSPCTL
A 35 SFLCLR
A 33 SFLEND(*MORE)
A 4 8'Client Nr.'
A ID_CLI R B 4 19REFFLD(CLICARD/ID_CLI DEMO/CLICARD)
A 90 ERRMSG('No Data Found')
A 6 4'Op.'
A 6 12'Card Nr.'
A 6 27'Shop Nr.'
A 6 42'Shop Name'
A 7 2'__________________________________-
A ___________________________________-
A __________'
A RRN 4S 0H SFLRCDNBR(CURSOR)
In the LIST record change the name of the input field to OPTION. By default it must be named FLD001, or something like it.
在LIST記錄中,你必須修改默認的輸入字段的名字,因為默認是FLD001,或者像如下
A R LIST SFL
A OPTION 1A I 9 5
(...)
Executing the subfile 執行子文件
To run the subfile you must create an RPGLE member. Check out the file QRPGLESRC.SHW_SFL for more details on how to write this member.
要運行子文件,你必須創建一個RPGLE的成員,檢出文件QRPGLESRC.SHW_SFL 查看一下細節,看看是如何寫這個文件
When you run the RPGLE code: 當你運行RPGLE代碼后可以看到下面的結果
