วันอาทิตย์ที่ 24 กุมภาพันธ์ พ.ศ. 2556

Data Area

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 แบบ คือ  
  1. Local Var ประจำ Job ใน AS/400  (คล้าย  ตัวแปร Session ของ Web) … ถูกสร้างอัตโนมัติ และหายไปเมื่อ
      1. จัดเก็บลง Library  ... ต้องสร้างด้วยคำสั่ง CRTDTAARA

การจัดการด้วย CL Cmd

ตัวอย่าง  การสร้าง Data Area

CRTDTAARA 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 
   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. บันทึก  และ   ดู   ด้วยคำสั่ง  ข้างต้น

การจัดการด้วย RPG

[สร้าง Data Area
จาก ตย ข้างต้น]

ประกาศ ตัวแปรและให้ดึงจาก Data Area (เป็นชนิดอักษร)
อ่าน   ค่า  ปี,เดือน  (โดย Lock เพื่อป้องกันคนอื่นเรียกใช้)
นำค่า มาแสดงผลบนหน้าจอ  (ให้แก้ไขบนหน้าจอ)
บันทึก  ค่า  ปี,เดือน  ใหม่ที่รับจากหน้าจอ (พร้อมทั้ง  ยกเลิก การ Lock)

C           *NAMVAR   DEFN            CTRLYM  6
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

แบบฝึกหัด (ต่อ)
  1. สร้าง RPG ที่อ่าน Run No (Data Area) เรียก RPG ใน 2 job
  2. เพิ่ม 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*

แบบฝึกหัด (ต่อ)
  1. RPG-1 กำหนดให้ Local Data Area มีค่า "Say Hi"
  2. ใน Job เดียวกัน RPG-2 ดึงค่า Local Data Area มาแสดงผล (ต้องมีค่าตามข้อ 1) เปิดใช้ต่าง Job เรียกใช้ RPG-2 (Data Area ต้องไม่มีค่า)

ไม่มีความคิดเห็น:

แสดงความคิดเห็น