Data Area
Data Area ทำงานเหมือน File ที่มีเพียง 1 Record 1 Field ทำให้การเรียกใช้จัดการทำได้ง่าย แต่ไม่สื่อความหมาย (ไม่รู้เลยว่า ข้างในแบ่งเป็น Field ย่อยอะไรบ้าง)
งานที่นิยมใช้ - ข้อมูลขนาดกระทัดรัด
- จัดเก็บ User Name (หลัง LogOn ผ่านแล้ว) งานอื่นๆใน Job เดียวกัน (เหมือนตัวแปร Session ของ Web)
- จัดเก็บ สถานะ เช่น Update ต้องผ่าน 4 ขั้นตอน เช่น “ABCD” ณ ตอนนี้ทำถึง C แล้ว (ควบคุม work flow,approve)
- จัดเก็บ Run No เช่น “00152” Invoice No เลขที่ล่าสุด คือ หมายเลข 00152
- งวด/รอบบัญชี เช่น “2013/02” วันนี้ วันที่ 2013/03/01 แต่ปี/เดือนของบัญชี ยังเป็น 2013/02 (ยังปิดบัญชีไม่เสร็จ)
มี 2 แบบ คือ
- Local Var ประจำ Job ใน AS/400 (คล้าย ตัวแปร Session ของ Web) … ถูกสร้างอัตโนมัติ และหายไปเมื่อ
- จัดเก็บลง Library ... ต้องสร้างด้วยคำสั่ง CRTDTAARA
การจัดการด้วย CL Cmd
ตัวอย่าง การสร้าง Data AreaCRTDTAARA DTAARA(QGPL/CTRLYM)
TYPE(*CHAR) LEN(6) TEXT('DATE CONTROL YYYY/MM')
CRTDTAARA DTAARA(QGPL/RUNNO)
TYPE(*DEC) LEN(5 0) TEXT('LAST INVOICE NO')
CRTDTAARA DTAARA(QGPL/UPDSTS)
TYPE(*CHAR) LEN(10) TEXT('UPDATE STATUS')
CRTDTAARA DTAARA(QGPL/BALQTY)
TYPE(*CHAR) LEN(10) TEXT('BALANCE QTY')
ตัวอย่าง คำสั่งการเปลี่ยนค่าใน Data Area
CHGDTAARA DTAARA(QGPL/CTRLYM)
VALUE(‘201302’)
ตัวอย่าง คำสั่งที่ใช้แสดงค่าใน Data Area
DSPDTAARA DTAARA(QGPL/CTRLYM)
ตัวอย่าง คำสั่งการเปลี่ยนค่าใน Data Area โดยระบุตำแหน่ง
ต้องการเปลี่ยนเฉพาะ ค่า "เดือน" อยู่ในตำแหน่งที่ 5 ไป 2 อักษร
Change Data Area (CHGDTAARA)
Type choices, press Enter.
Data area specification:
Data area . . . . . . . . . . > CTRLYM Name, *LDA, *GDA, *PDA
Change Data Area (CHGDTAARA)
Type choices, press Enter.
Data area specification:
Data area . . . . . . . . . . > CTRLYM Name, *LDA, *GDA, *PDA
Library . . . . . . . . . . > QGPL Name, *LIBL, *CURLIB
Substring specifications:
Substring starting position . > 5 1-2000, *ALL
Substring length . . . . . . . > 2 1-2000
New value . . . . . . . . . . . > '03'
แบบฝึกหัด
1. กำหนด Data Area เพื่อจัดเก็บ ปีเดือน และ วันสุดท้ายของเดือนนั้น
เช่น 2013/09/30 (มี / คั่นด้วย)
2. สร้างใน Library ของตนเอง
3. บันทึก และ ดู ด้วยคำสั่ง ข้างต้น
C *NAMVAR DEFN CTRLYM 6
Substring specifications:
Substring starting position . > 5 1-2000, *ALL
Substring length . . . . . . . > 2 1-2000
New value . . . . . . . . . . . > '03'
แบบฝึกหัด
1. กำหนด Data Area เพื่อจัดเก็บ ปีเดือน และ วันสุดท้ายของเดือนนั้น
เช่น 2013/09/30 (มี / คั่นด้วย)
2. สร้างใน Library ของตนเอง
3. บันทึก และ ดู ด้วยคำสั่ง ข้างต้น
การจัดการด้วย RPG
[สร้าง Data Area
จาก ตย ข้างต้น]
ประกาศ ตัวแปรและให้ดึงจาก Data Area (เป็นชนิดอักษร)
อ่าน ค่า ปี,เดือน (โดย Lock เพื่อป้องกันคนอื่นเรียกใช้)
นำค่า มาแสดงผลบนหน้าจอ (ให้แก้ไขบนหน้าจอ)
บันทึก ค่า ปี,เดือน ใหม่ที่รับจากหน้าจอ (พร้อมทั้ง ยกเลิก การ Lock)
C*C*-- IN CTRLYM NO PROTECT
C *LOCK IN CTRLYM LOCKC*
C*C MOVELCTRLYM W1CTYY
C MOVE CTRLYM W1CTMM
C*
C EXFMTDSP01W
C*
C OUT CTRLYM
C UNLCKCTRLYM
แบบฝึกหัด (ต่อ)
C MOVE CTRLYM W1CTMM
C*
C EXFMTDSP01W
C*
C OUT CTRLYM
C UNLCKCTRLYM
แบบฝึกหัด (ต่อ)
- สร้าง RPG ที่อ่าน Run No (Data Area) เรียก RPG ใน 2 job
- เพิ่ม Code เพื่อป้องกัน (Lock) ต้องให้ Run No เสร็จก่อน อีก job จึงจะแสดงผลได้
การประกาศ ในแบบต่างๆ
ประกาศ แล้วใช้ชื่อ ตัวเแปรอื่น
เช่น Data Area = CTRLYM แต่ในโปรแกรมจะใช้ผ่าน W1YM เป็นต้น
C *NAMVAR DEFN CTRLYM W1YM
ประกาศ หลายค่าและดึงค่าพร้อมๆกัน ในครั้งเดียว
C *NAMVAR DEFN CTRLYM 6
C
*NAMVAR DEFN RUNNO 4
C
*NAMVAR DEFN BALQTY 102
C*
C *LOCK IN *NAMVAR
C*
C OUT *NAMVAR
Local Data Area
มีลักษณะ “คล้ายกัน” แต่จะใช้ชื่อ ตัวแปรดังนี้ "LDA" โดยมีขนาด 1,024 Tip Data Area ไม่มีโครงสร้าง มักจะใช้ Data Structure (กำหนดใน I–Spec) ช่วยในการกำหนดโครงสร้างใน Data Area
ICTRLYM DS
I 1 8 CTLYMD
I 1 4 CTLY
I 5 6 CTLM
I 7 8 CTLD
ILDA UDS
I 1 15 EMPNO
I 16 45 EMPNM
C *NAMVAR DEFN *LDA LDA
C*
C IN LDA
C*
แบบฝึกหัด (ต่อ)
ICTRLYM DS
I 1 8 CTLYMD
I 1 4 CTLY
I 5 6 CTLM
I 7 8 CTLD
ILDA UDS
I 1 15 EMPNO
I 16 45 EMPNM
C *NAMVAR DEFN *LDA LDA
C*
C IN LDA
C*
แบบฝึกหัด (ต่อ)
- RPG-1 กำหนดให้ Local Data Area มีค่า "Say Hi"
- ใน Job เดียวกัน RPG-2 ดึงค่า Local Data Area มาแสดงผล (ต้องมีค่าตามข้อ 1) เปิดใช้ต่าง Job เรียกใช้ RPG-2 (Data Area ต้องไม่มีค่า)
ไม่มีความคิดเห็น:
แสดงความคิดเห็น