CL - สร้างโปรแกรมช่วย ลดการทำงาน-1
CL = Control Language เป็นภาษาที่ใช้จัดการ คำสั่ง บน OS/400ถ้าเทียบกับ Windows ก็คือ เขียน/สร้าง Batch File เพื่อใช้คำสั่งย่อย ต่อเนื่องกัน
เทคนิคช่วยลด เวลา ในการทำงานซ้ำๆได้ครับ
ตย. ทุกเดือนต้อง Backup Data (เช่น Lib1/File1 -> LibB/FileH) โดยกำหนดขั้นตอนดังนี้
(1). แยกข้อมูลตาม ช่วงเวลา (เช่น 1 member ต่อ 6 เดือน เป็นต้น)
(2). เมื่อย้ายข้อมูลเสร็จ จะนำข้อมูล
2.1 จัดเก็บใน Cartridge
2.2 จัดเก็บใน History Server (ที่ราคาถูกกว่า เช่น MS SQL Server)
ต้องรวม Member กลับไปเป็น 1 Member
(LibB/File1-หลาย member -> LibH/FileH 1 member)
ผมสนใจข้อ 2.2 ซึ่งต้องทำแบบ Manual ดังนี้
a. ตรวจดูว่า LibB/File1 มี member ชื่ออะไรบ้าง ? ด้วยคำสั่ง
DSPFD FILE(LibB/File1) TYPE(*MBRLIST)
(จดรายชื่อไว้)
b. Copy รวม data ด้วยคำสั่ง
CPYF FROMFILE(LibB/File1) TOFILE(LibH/FileH) FROMMBR(ระบุชื่อ) TOMBR(*FIRST) MBROPT(*ADD)
ตย. มี 10 File แต่ละ File มี 5-10 member ที่ชื่ออ่านยาก การทำแบบ Manual จะใช้เวลา "นาน" และเสี่ยงที่จะผิดพลาด (จดชื่อผิด)
เราจะสร้างโปรแกรมช่วย ลดการทำงาน ในข้อ 2.2 กัน
โดยสร้างโปรแกรม และทำงานดังนี้ CALL BK2HT (LibB File1 LibH FileH)
สร้าง CL โดยปรับขั้นตอนตามนี้
(รับค่า &LibB &File1 &LibH &FileH)
a. DSPFD FILE(&LibB/&File1) TYPE(*MBRLIST) OUTPUT(*OUTFILE) OUTFILE(QTEMP/A)
Loop อ่าน File QTEMP/A
b. CPYF FROMFILE(&LibB/&File1) TOFILE(&LibH/&FileH)
FROMMBR(&mlname) TOMBR(*FIRST) MBROPT(*ADD)
จากนั้น เพิ่มรายละเอียดต่างๆ เช่น
- ตรวจ Lib/File ต้องมี
- ถ้ามี File แต่ไม่มี Member
- ...
มาดู code BK2HT แบบเต็มๆกัน
---------------------------------------------------------------------
PGM PARM(&LIBB &FILE1 &LIBH &FILEH)
DCLF FILE(A)
DCL VAR(&LIBB) TYPE(*CHAR) LEN(10)
DCL VAR(&FILE1) TYPE(*CHAR) LEN(10)
DCL VAR(&LIBH) TYPE(*CHAR) LEN(10)
DCL VAR(&FILEH) TYPE(*CHAR) LEN(10)
CHKOBJ OBJ(&LIBB/&FILE1) OBJTYPE(*FILE)
MONMSG MSGID(CPF9801) EXEC(GOTO CMDLBL(STP090)
CHKOBJ OBJ(&LIBH/&FILEH) OBJTYPE(*FILE)
MONMSG MSGID(CPF9801) EXEC(GOTO CMDLBL(STP090)
DSPFD FILE(&LibB/&File1) TYPE(*MBRLIST) OUTPUT(*OUTFILE) OUTFILE(QTEMP/A)
/*-- Start Loop --*/
STP010:
RCVF
MONMSG MSGID(CPF0864) EXEC(GOTO CMDLBL(STP090))
CPYF FROMFILE(&LibB/&File1) TOFILE(&LibH/&FileH)
FROMMBR(&mlname) TOMBR(*FIRST) MBROPT(*ADD)
GOTO CMDLBL(STP010)
/*-- End Loop --*/
STP090:
ENDPGM
---------------------------------------------------------------------
ก่อน compile ให้เรียกใช้คำสั่งข้อ a. ก่อน (เพื่อสร้าง Object = QTemp/A)
อื่นๆ
เทคนิคนี้ใช้บ่อย ได้กับงานที่เรียกใช้ CL Cmd ติดต่อกัน- ตรวจ data size ในระบบ file ไหนมีขนาดใหญ่ เกินกำหนด
- ตรวจ job ที่ (กำลัง) ทำงานใน subsystem
- ...
ตย. ข้างต้น เมื่อดุดีๆ จะพบว่า ถ้าปรับขั้นตอน (1) ให้ไปเก็บใน LibH/FileH 1 member เลย ก็ไม่ต้องทำ 2.2 ที่ไม่ทำเพราะ (1) เป็นโปรแกรมที่เก่ามาก และมีเทคนิคเฉพาะหลายอย่าง ... การปรับถือว่าไม่คุ้ม
ไม่มีความคิดเห็น:
แสดงความคิดเห็น