วันจันทร์ที่ 21 มีนาคม พ.ศ. 2559

Download AS/400 File to Excel-2

Download AS/400 File to Excel-2

มาดูวิธีทำทั่วไปครับ  ทำผ่านเครื่องมือที่ ibm จัดไว้ให้
1. เรียกใช้ โปรแกรม
    Start > IBM i Access for Windows
    หรือ   กดปุ่ม Received files from host (ด้านบน หน้าจอ 5250 Emulator)
2. ระบุ  file ที่จะ Download
    IBM :   Server อะไร,  ชื่อ File (Lib / File)
    ปุ่ม [Data Option] ใช้ใส่รายละเอียด เหมือน SQL(เลือก บาง Field, กรองข้อมูลด้วย Where)
          ถ้าทำตามคำแนะนำ  ส่วนนี้จะไม่ต้องทำ        
    ข้อแนะนำ  -  สำหรับ User เรียกใช้  ให้แยก Lib / File  ออกมา
                         ทุกครั้งที่  ส่ง File ให้ Replace (ทับ/แทนที่ ลงไป)

    ระบุ  การจัดเก็บ PC File
    PC :      Output Device  เปลี่ยนเป็น  "File"
                 ระบุ Path/File  ที่จะจัดเก็บ

                 กดปุ่ม [Detail]    เพื่อเลือกชนิด File เช่น   CSV  หรือ BIFF(Excel File)
    File Details :
         PC File Description file (.FDF)
         กรณีที่  จะทำซ้ำ หรือ upload   เราจะ Save ไว้  (จำ Path ที่เก็บไว้ด้วย)
         กด  [Ok]  เพื่อปิดหน้าต่างนี้
   กด File > Save เพื่อจัดเก็บ Profile ให้เรียกใช้ซ้ำ (ผ่าน RTOPCb.exe)

ขั้นตอน Upload จะคล้ายกัน
แต่มีเทคนิค  ให้สร้าง File บน AS/400, iSeries ก่อน  แล้วทำ Download ลงมา
        แล้วจัดเก็บ .FDF (โครงสร้าง File/Field)

เมื่อทำ Upload ให้  ป้อน   ดึง info จาก .FDF มาใช้งาน
สังเกต  การ Upload ไปสร้าง File บน AS/400 จะต้องผ่านอุปสรรคหลายจุด
             ข้อแนะนำข้างต้น จะช่วยลดปัญหาต่างๆ ได้มาก

วันพฤหัสบดีที่ 17 มีนาคม พ.ศ. 2559

Download AS/400 file to Excel

Download AS/400,iSeries file to Excel

ทำผ่าน IFS (Integration File System)

มีหลายวิธีที่ทำได้  ครับ ที่ผมใช้บ่อยคือ  ข้อ 1,3
1. ใช้ Excel : MS Query  ดึงข้อมูลโดยตรง  ... วิธีนี้เหมาะกับ Developer มาก
         Excel  > Data > From Other Sources > From Microsoft Query
         (สร้าง ชื่อที่ชี้ไป AS/400   Data Source ใน ODBC)
         Tip : ผมจะ  ยกเลิก  ไม่ใช้ Query Wizard (Cancel)   แต่ใช้ MS Query (ํYes)
         Tip : ผมจะ  เขียน SQL ใน iSeries Navigator ก่อน - ตรวจ Syntax ได้ดีกว่า

2. ทำผ่าน IFS (Integration File System)  ... วันนี้จะอธิบายตัวนี้

3. start > IBM i Access for Windows > Data Transfer from IBM i
         วิธีนี้ ทำเสร็จจะ save โครงสร้างไว้  ... เหมาะกับ  "ทำซ้ำ"  (โดย User)


ออกตัวก่อน   หัวข้อ 2  นี้  ผมทำไม่ผ่าน  (เกิดจาก ระบบ Security  ในบริษัทฯ)
ถ้า  บริษัทฯไหน  ที่ไม่  ติดปัญหา Security   น่าจะทำได้ และเป็นอีกตัวเลือก ที่เลือกใช้ได้ครับ

IFS คืออะไร

ในภาพของผม  มันคือ  การทำให้ AS/400,iSeries เป็น Drive ที่ PC มองเห็น
      = ใช้ Disk บน AS/400 ... ผมไม่ค่อยเห็นด้วย เพราะ Disk บน AS/400 ราคาแพงไป
แต่ถ้ามอง  เป็นเส้นทาง  ส่งต่อ File  ก็นับว่า  เป็นอีกตัวเลือกที่ดี
สำคัญมาก    file ในนี้ AS/400,iSeries   ไม่สามารถเรียกใช้ได้โดยตรง จาก PC
      (การจัดเก็บต่างกัน)  ต้องมี  "ขั้นตอน" โอนแปลงชนิด file

ขั้นตอน (แบบย่อ)

1. สร้าง Folder IFS  ใน AS/400,iSeries + กำหนดให้ Share
    หัวข้อนี้ ผมไม่เชี่ยวชาญ น๊ะครับ  แต่ในนี้อธิบายไว้ครบ

      คลิกขวา > เลือก New Folder
       
    สังเกต เปลี่ยนค่า *default เพื่อลดปัญหา Security

    อ้างอิง  http://www.rpgpgm.com/2014/09/how-to-map-ifs-folder-as-windows-share.html

2. cmd  CPYTOIMPF   ไปที่  Folder IFS ที่สร้างไว้
    อ้างอิง   http://www.itjungle.com/fhg/fhg010913-story01.html

    CPYTOIMPF FROMFILE(MYLIB/ITEMS)  
              TOSTMF('/Sarayut/Items.csv')
              RCDDLM(*CRLF)  ADDCOLNAM(*SYS)

    ตย.ผลลัพธ์ ใน Items.csv
        ITEM_NO,ITEM_00001,ITEM_PRICE  
        1          ,"Whirlpool Washing Machine",750.0000
        2          ,"Whirlpool Dryer (Gas)",775.0000
        3          ,"Maytag Dishwasher",600.0000

    ปรับรูปแบบได้  เช่น เปลี่ยน/เพิ่ม อักษร ลงท้าย เป็นต้น

3. Windows Explorer : Map Network Drive ไปที่ Folder IFS

     ระบุไปที่    //AS400 server name/Folder ที่สร้าง)
          
    จุดนี้  copy File ไปใช้ หรือ เปิดโดยตรง ก็ได้ครับ

ผมพบปัญหาคือ Access Deny  (ในการใช้ในส่วน AS/400 IFS)
น่าจะเกิดจาก สิทธิ ของการเข้าใช้ IFS

วันอังคารที่ 15 มีนาคม พ.ศ. 2559

Rename Field while Running RPG/400

การเปลี่ยนชื่อ Field ใน RPG ILE
    มีแนะนำใน Internet มาก- หาได้ง่าย ... ไม่ขออธิบายน๊ะครับ
แต่การเปลี่ยนชื่อ Field ใน RPG/400 หาได้ "ยากกว่า"

การใช้งาน + ปัญหาที่พบ

- มีการใช้หลาย File ที่มี Write,Delete,Update  ชื่อ Field  "ซ้ำกัน" 
  ตย.1  File = Order     มี   field ORDER
            File = Invoice   ก็มี field ORDER

  ตย.2  จะลบข้อมูลที่ซ้ำ (ด้วย RPG/400)  โดยเลือก เปิด L-File 2 ตัว
           L-File ตัวแรก  ชี้จุดเริ่มต้น   
           L-File อีกตัวใช้   ตรวจและ "ลบ"

- ปัญหาที่พบ คือ  หลัง compile ตัวแปรทั้ง 2 จะใช้  พื้นที่  "ร่วมกัน"  
          ตัวแปรจะ  จะเก็บค่า  "ล่าสุด"  ไว้เท่านั้น 
          ถ้าเผลอนำค่านี้  ไปชี้เพื่อ  Write, Update, Delete จะ "ผิด"
                จะพบปัญหา  เมื่อ  ใช้เทคนิคเขียน code แบบสั้น (จัดการ file แบบง่าย)
                             มาเขียนงานที่เริ่มซับซ้อน  (ใช้ย่อ แบบผิดประเภท)

ทางแก้ไข

- ย้ายค่า ตัวแปร ไปเก็บที่อื่น แล้ว ย้ายกลับมา
          ไม่เหมาะ ถ้ามีจำนวน Field มาก  (เริ่มยาว)
- สร้าง Logical File ใหม่   โดย rename ใน Logical File 
          ไม่เหมาะ ถ้า file ขนาดใหญ่ (Index นาน) แต่ใช้งานชั่วคราว
- เปลี่ยนชื่อ Field ใน File ขณะ Run

วิธีการประกาศ

+... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 .
 Ircd-fmt                                                 
 I              old-field                       new-field 

ตัวอย่าง

ข้อมูล Logical File (ข้อมูลเรียงตามนี้)

RPG เปิดใช้ ทั้ง 2 Logical File  โดยชี้ไป   ต่าง Row

FSQL010L1IF  E           K        DISK                    
FSQL010L2IF  E           K        DISK                    
 *------------------------------------------------------* 
ISQL010R1                                                 
I              L1EPNO                          AAEPNO     
I              L1EDUC                          AAEDUC     
 *------------------------------------------------------* 
C           KL114     KLIST                               
C                     KFLD           PLAC    2            
C                     KFLD           DIVI    2            
C                     KFLD           OPEC    2            
C                     KFLD           EPNO    6            
C           KL214     KLIST                               
C                     KFLD           PLAC                 
C                     KFLD           DIVI         
C                     KFLD           OPEC         
C                     KFLD           EDUC    1    
C                     MOVEL'T2'      PLAC         
C                     MOVEL'72'      DIVI         
C                     MOVEL'11'      OPEC         
C                     MOVEL'D'       EPNO         
C           KL114     CHAINSQL010L1             80
C                     MOVEL'1'       EDUC         
C           KL214     CHAINSQL010L2             80
C           *IN80     IFEQ '0'                    
C                     END                         

ดูค่าจากการ Debug (StrISDB)
     ตัวแปร  AAEPNO, AAEDUC แสดงค่า แตกต่างกันกับ  L1EPNO,L1EDUC