PSDS และ INFDS เป็นวิธีการดึงค่าจาก memory ขณะ run มาใช้งาน
แยกเป็น ข้อมูลของ Program กับ ข้อมูลของ File (แต่ละตัว ต้องระบุ)
PSDS = Program status data structure
ประกาศ SDS ใน I-Spec
ตย. สไตล์การเขียน Report ใน RPG มักจะแสดงชื่อโปรแกรม ที่มุมบนซ้าย หรือ ขวา
(เพื่อให้รู้ว่า report นี้มาจากโปรแกรมตัวไหน) วิธีพื้นฐาน ก็คือ Fix ค่าใน O-spec เช่น
code ทั่วไปจะเป็นลักษณะนี้
OQSYSPRT E 2 3 HED010
O 7 'PG0160R'
เคยพบมั๊ยครับ copy/เปลี่ยนโปรแกรม เป็น PG016
1R แล้วลืมเปลี่ยนชื่อตาม
??? เวลาตรวจสอบโปรแกรม "ผิดตัว" ทำให้ "เสียเวลามาก" ... แป่ว
ทางแก้ไข ทำให้เป็น ตัวแปรซะ (แล้วทุกครั้งที่เขียนโปรแกรมใหม่ ให้ copy ไปใช้) ประกาศดังนี้
I SDS
I *PROGRAM PGMID
I 244 253 JOBNAM
I 254 263 USR
I 264 269 JOBNBR
...
OQSYSPRT E 2 3 HED010
O PGMID 10
เราสามารถเพิ่ม รายละเอียดที่จำเป็น (ในด้าน Securityได้)
เช่น ข้อมูลที่บ่งบอกว่า job อะไรที่เรียกใช้ report
JOBNAM = ชื่อ Job ที่ทำงานใน iSeries เช่น ชื่อจอ เป็นต้น
USR = ชื่อ User ที่ Log On เข้าใช้ใน iSeries เช่น SOMCHAI เป็นต้น
JOBNBR = run no (มักใช้แยก กรณีที่ User 1 คนเข้าใช้งาน )
วิธีประกาศใน RPG-ILE (แตกต่างเล็กน้อย)
D SDS
D PROC_NAM *PROC
D JOB_NAME 244 253
D USER 254 263
Keyword อื่นๆที่น่าสนใจ - (บทความใน internet จะพูดถึงตัวนี้กันมาก)
*STATUS ใช้ดักจับ Error (คล้าย Try ...Catch ... ใน Dot Net)
ใช้เพื่อดักจับปัญหา โปรแกรมที่จะเกิด Dump
เช่น
อ่านข้อมูล ชนิด "ตัวเลข" แต่บางครั้ง อาจจะพบ อักษรติดเข้ามา (มักพบใน data transfer)
หรือ การอ่านข้อมูลเพื่อ update แต่โปรแกรมอื่น lock record ไว้
Refer
http://publib.boulder.ibm.com/iseries/v5r1/ic2924/books/c092508381.htm
http://wiki.midrange.com/index.php/Program_Status_Data_Structure
INFDS = File Information data structure
ประกาศ INFDS ใน F-Spec และ I-Spec (เรียก Feedback areas)
INFDS เองจัดกลุ่มข้อมูลไว้ 5 แบบ (ทำให้เลือกใช้ง่ายขึ้น) ได้แก่ File,Open,Input/Output,Device,Get Attribute ในที่นี้จะเลือก,แนะนำบางตัวที่ควรใช้บ่อยครับ
ตย. สร้าง sub-file Select ไว้มีข้อมูล 5 page
เมื่อ User เลือกตัวเลือก ใน page ที่ 3 แล้วให้โปรแกรม ไปแสดงผล DSPFW2
เมื่อ DSPFW2 ทำงานเสร็จ ต้องการให้ ให้กลับไปที่ Page ที่ 3
... ถ้าไม่ควบคุม ตำแหน่งที่แสดงผล จะไปอยู่ที่ page แรกหรือสุดท้าย
>> code ด้านล่าง เป็นการเก็บค่า sub-file RRN ไว้ แล้วนำมาบังคับแสดงผล
ตย. Display File : MYDSPF
A R MYDSPFC1 SFLCTL(MYDSPFS1)
...
A S1RRN1 4S 0H SFLRCDNBR
ตย RPG เรียกใช้ INFDS กับ Display File
FMYDSPF CF E WORKSTN KINFDS WSID
...
กำหนด Data Structure เพื่อดึงค่า
IWSID DS
I B 370 3710CURLOC
I B 376 3770CURRRN
...
C STP010 TAG
C* -------------
C EXFMTMYDSPFC1
... Select -> show DSPFW2
C Z-ADDCURRRN S1RRN1
C CURLOC DIV 256 CURROW
C MOD CURCOL
C* ---F4 => *IN04 = '1'
C 04 CURROW IFEQ 12
C CURCOL IFGE 15
C CURCOL ANDLE25
C EXSR ITEMREF
C END
C CURCOL IFGE 30
C CURCOL ANDLE40
C EXSR TERIREF
C END
C END
C GOTO STP010
...
ตย. การสร้าง Help, Prompt จากตำแหน่ง Cursor
ถ้าวางอยู่ตำแหน่ง Row=12, Col. ระหว่าง 15-25 เมื่อกด F4 = Item No Refer
ถ้าวางอยู่ตำแหน่ง Row=12, Col. ระหว่าง 30-40 เมื่อกด F4 = Teritory Refer
... หลังแสดงหน้าจอ
ตัวแปร CURRRN จะเก็บตำแหน่ง RRN ที่เลือกไว้ทำให้เรารู้ว่า User เปิด SubFile Page ไหนล่าสุดไว้ได้
ตัวแปร CURROW,CURCOL จะเก็บตำแหน่ง Cursor สุดท้าย (ROW,COL) ไว้
(ถ้าเป็น RPGILE ไม่ต้องมา หาร 256 ดึงค่าได้โดยตรงครับ)
Refer
http://www.ilerpgprogramming.com/2010/11/exploring-program-status-and-file.html