ดักจับ ErrorMsg กัน
บางครั้ง โปรแกรมเมอร์ มักพบปัญหาที่คาดไม่ถึง "ชนิดยาก"เช่น Error เกิดขึ้นตอนกลางคืน (ขณะทดสอบอย่างหนัก ไม่ยักพบปัญหา) เป็นต้น
การดักจับ Error (handler) เทียบกับภาษาอื่น
- ใน CL คือ MonMsg
- ใน .net คือ Try .. Catch ...
การดักจับ Error ใน RPG มีได้ 4 วิธี
- ใช้ Error indicator หรือ an 'E' operation code extender
- ใช้ MONITOR group
- ใช้ Error subroutine
- ใช้ Default exception
แต่ละวิธี มีจุดเด่น/จุดด้อย ต่างกัน คนที่สนใจไปอ่านเพิ่มได้ครับ
วันนี้เราจะมาพูดถึงตัวที่ ทำง่าย ที่สุด นั่นคือ Error Subroutine ครับ
เพียงแค่ประกาศ เพิ่มส่วนนี้
CL0N01N02N03Factor1+++OpcdeFactor2+++ResultLenDHHiLoEq
C*=================================
C *PSSR BEGSR
C*-------------------------
C**
C SETON LR
C LR RETRN
C ENDSR
C*=================================
ประยุกต์ อื่นๆ
- ให้ทำงานต่อ หรือ หยุด หรือ ทำ Rollback (อันนี้ผมไม่ได้ใช้)
- ให้ ส่งค่าตัวแปร กลุ่มที่อยากรู้ออกมา เช่น ใช้คำสั่ง DSPLY
- ให้ ส่งสถานะ ตำแหน่งที่มีปัญหา,ชื่อ Error (ตัวแปรจากระบบ)
IDsname....NODsExt-file++.............OccrLen+..........
I SDS
I *ROUTINE ELOC
I *STATUS ESTS
I 1 10 PPGMID
I 11 150PSTS
I 21 28 PLINE
Note ถ้าใช้ RPGILE จะมี ตัวช่วย ให้เลือกมากกว่านี้
การทดลอง
รู้แล้ว ควรจะทดลองซะหน่อย ครับ
1. เขียนโปรแกรมสั้นๆ 1 หารด้วย 0
C 100 DIV 0 J# 30
C SETON LR
C LR RETRN
สั่ง run ... จะเกิด Error ดังนี้
xxxx 900 tried to divide by zero (factor 2) (C G S D F).
ให้ตอบ Msg เป็น "D" = dump เราจะได้ Spool และเห็น ค่าตัวแปรต่างๆ ณ. จุดที่เกิด Error
RPG/400 FORMATTED DUMP
Program Status Area:
Program Name . . . . . . . . . . . . . : QTEMP/xxxx
Program Status . . . . . . . . . . . . : 00102
tried to divide by zero (factor 2) (C G S D F).
Previous Status . . . . . . . . . . . : 00000
Statement in Error . . . . . . . . . . : 900
RPG Routine . . . . . . . . . . . . . : *DETC
Number of Parameters . . . . . . . . . : 001
...
*...+....1....+....2....+....3....+....4....+....5....+....6....+
ZIGNDECD 0603C4 CHAR(1) '0'
ZPGMSTUS 05FDF6 CHAR(400) 'XXXXXX 0010200000900
05FE55 +96 '
05FEB4 +191 ' 20
05FF13 +286 '380528141106300001QRPGSRC
Note ตำแหน่ง ค่าต่างๆในตัวแปร ดูได้ที่ ZPGMSTUS
Note ค่าใน Spool หลายตัว ส่งผ่านเป็น ตัวแปร นำมาใช้งานได้ ESTS กับ PSTS เป็นค่าเดียวกัน
เพิ่งเรียนจบ มาทำงานด้านนี้ ได้ประโยชน์มากครับ
ตอบลบความคิดเห็นนี้ถูกผู้เขียนลบ
ตอบลบ