วันอาทิตย์ที่ 23 พฤศจิกายน พ.ศ. 2557

มาสร้าง Web Site จริงๆ

มาสร้างWeb Site จริงๆ

หลายคนที่เริ่มต้น  หัดสร้าง Web Site แบบง่ายได้แล้ว
จะพบว่า   เมื่อจะทำ  เพื่อใช้งานจริง  จะขาดอันโน้น  อันนี้ ... เอ  มันไม่ง่าย เหมือน ที่ผ่านมา

Q: ถ้าจะต้องทำจริง  ต้องการอะไรบ้าง ?

     พอจะเริ่มอ่าน ก็พบว่า  มีเนื้อหามาก   โดยจะต้องเลือก "อ่าน"  แล้ว "คัดกรอง"
     ซึ่ง คนไทย ส่วนใหญ่  ไม่คุ้นกับการ "อ่าน" แบบนั้น

บทความนี้จะพยายาม ทำให้เห็น  "ภาพรวม"   ให้สั้นที่สุด!  (อ้างอิงจากบทความของ Microsoft)


ทบทวนกันก่อน

อยากได้ Web Site ของตนเอง !
Q1:  ถ้าคุณไม่เก่ง + ไม่มีเวลา + ไม่มีเป้าหมายชัดเจน   แล้ว(ดื้อ)จะสร้างเองให้ดีเท่า FaceBook 
    >> แนะนำว่า  ไปหัดใช้   โปรแกรมที่คนอื่นเขาเตรียมไว้(แจกฟรี)  ดีกว่าครับ

Q2:  ถ้าคุณอยาก "รู้จริง" เพื่อนำไปทำงานใหญ่  
   ตย.เช่น  เรียน IT มา (มีพื้นฐาน) มีเวลา + ความตั้งใจ อยากจะทำ หรือ สร้างให้แตกต่าง (เรียก นวัตกรรม ดีมั๊ย)
  >> บทความนี้ช่วยคุณ  เริ่มต้น ได้ครับ

ผู้สร้าง หรือ ผู้ใช้งาน

ถ้าคุณเคยสร้าง Web Page จนถึงขั้น  มีคนเข้ามาใช้งาน  (อาจจะเป็นงานง่ายๆ)
คุณจะพบว่า  มีคำถามมากมาย  เกิดขึ้น
เปลี่ยนสี/ภาพ/Font ไม่ได้หรือ ?  เมนูแสดงแบบนั้นไม่ได้หรือ ?  เปลี่ยนแต่ละครั้งทำไม ดูยากจัง ?

ผู้สร้าง   มือใหม่  มักจะ "ตัด" งานจุกจิกออกไป (เน้นงานหลัก)
แต่ ผู้ใช้งาน  คิดต่างกัน  สนใจแค่  ถ้าเห็นแล้ว  ต้องมีครบ ...

Net  ได้รวบรวมปัญหา ที่ใช้บ่อย แล้วกำหนดเป็นแนวทางไว้ ให้ทำได้ง่าย (Step-by-Step)
เนื่องจาก  แนวทางดังกล่าว ต้องใช้เวลา รวบรวม แล้วปรับเป็นเครื่องมือเปิดใช้งาน
จึงมีข้อเสีย   คือ   เทคนิคใหม่ "Up to Date"   (เพิ่งจะเกิดใหม่ ใน 1-2 เดือนนี้) จะไม่ถูกรวมอยู่ในนี้

ถ้างานที่คุณจะทำ อยู่ในเกณฑ์  "ทันสมัย" สุดๆ  ก็ต้อง เรียนรู้เทคนิคใหม่ ให้เข้าใจแล้วผสมผสานเข้าไป
เช่น  ชอบ Tag <Nav> ของ HTML5  มากกว่า Site Navigation ของ MS  เป็นต้น

รู้จัก .Net จริงๆ

เข้าใจ  แล้ว เลือกใช้งาน   โดยเน้น "จัดการง่าย"

1. รู้จัก โครงสร้างพื้นฐาน ของ .Net   ... งานบางประเภท มีแนวทางที่ง่ายกว่า
2. เข้าใจ Life Cycle ที่ทำงานร่วมกับ IIS 
3. ใช้ Site Navigator  ... จัดการเส้นทาง
4. ใช้ Master Page  ... จัดการให้ทุก Page ทำงานเหมือนกัน
5. ใช้ Theme และ Skin  ... จัดการ Font,สี
6. ใช้ Globalization และ Localization  ... จัดการกับ  ลูกค้าหลายภาษา

เทคโนโลยีใหม่ ?

jQuery  ตัวนี้หลักการและวิธีใช้  ถือว่า ง่ายมาก
เลือกใช้ให้เหมาะ ก็จะทำให้ Web มี  รูปแบบการทำงานที่น่าใช้งาน  เป็นตัวเสริมที่น่าสนใจ

HTML5  ถือเป็น Trend ใหม่ที่กำลังมาแรง  ลดจุดอ่อนต่างๆ (ที่ทำให้ .Net นำมาวางแนวทาง)
แต่ยังต้องรอการพิสูจน์ อีกระยะหนึ่ง  ซึ่งอาจจะมีผลต่อ  วิธีของ .Net ข้างต้นได้
(กลางปี 2015  น่าจะได้ข่าวชัดๆแล้ว)

ในช่วงที่  Microsoft  กำลังผลักดันให้ใช้ Win8  (รูปแบบ  การใช้งานใหม่)
ซึ่งต้องใช้เวลาในการสรุปว่า  จะกลายเป็นมาตรฐานหรือไม่ ?

Refer

http://msdn.microsoft.com/en-us/library/ywdtth2f(v=vs.100).aspx

วันศุกร์ที่ 19 กันยายน พ.ศ. 2557

.Net read/send to CA/400

.Net อ่าน/ส่งค่า กับ CA/400

ตย. งานที่นำไปใช้
- ต้องการให้ Copy  ข้อมูลจากหน้าจอ CA/400 ไปใส่ใน  Excel  หรือ โปรแกรมอื่นๆ
- ต้องการนำค่าจาก  โปรแกรมอื่น มาใส่ใน CA/400

ข้อสังเกต   คนที่เขียนได้ขนาดได้  ผมว่าเปลี่ยน CA/400 ไปเป็น .Net เลยดีกว่า 555
        แต่ที่ต้องมาเสียเวลาทำตรงนี้ อาจจะเพราะ  ไม่พร้อมที่จะหยุด CA/400 (ความคุ้นเคย)
        ... งานของผม  โดนส่วนนี้เต็มๆ

CA/400  หรือ Client Access /400  ในชื่อบางรุ่นจะเรียก Personal Communication
ชื่อพวกนี้  คุ้นไว้ก็ดีครับ  บางบทความ จะเปลี่ยนชื่อ
มาเริ่มกันเลย

หลักการ

เป็นการคุยกันระหว่าง Application บน Window    
     หลักการใหม่ๆ จะทำในรูป OleDB แล้ว...  สาย .Net คุ้นเคยล่ะซิ

แต่ CA/400  เป็นโปรแกรมเก่า น๊ะครับ (มีพัฒนาน้อยมาก)
     จำเป็นต้องใช้เทคโนที่เก่า   นั่นคือ DDE (Dynamic Data Exchange)
     คนที่เคยทำ DDE ก็ไปต่อได้เลย

แนวคิด DDE

     App 2 ตัว ที่จะคุยกัน  App 1 ต้องเป็น Server  อีก App ก็เป็น Client
     App ที่เป็น Server ต้อง  "มีช่องทาง"  ติดต่อและรูปแบบการติดต่อไว้   กรณีนี้ CA/400 เป็น Server น๊ะครับ
     รูปแบบการติดต่อ มี 2 แบบ Hot กับ Cold  (ภาษาใหม่ เรียก Synchronous กับ Asynchronous)
            แนะนำ   CA/400 เราจะใช้แบบ Cold   เขียนได้ง่ายกว่า

     การติดต่อกันภายใต้ Windows จะกำหนด  ตัวแปรพื้นฐานไว้ 3 ตัว (จำไว้)
     1. Application (Name) เช่น Excel,Word       
     2. Topic (ชื่อย่อยของ App)  เช่น เปิด Excel หลาย file  
     3. Item (รายละเอียดการติดต่อ)  เช่น  Sheet, Col,Row, ...
               แต่ละ App ที่ทำหน้าที่เป็น Server จะประกาศไว้ (ต้องหา คู่มือให้พบ)

CA/400  IBM ได้สร้างวิธีเชื่อมต่อไว้หลายแบบ   อยู่ในหนังสือ Emulator Programming
ไม่ต้องแปลกใจว่าบางเรื่อง ค่อนข้างเก่า/ไม่เปลี่ยนแปลงมานาน

ใครสนใจ  อยากเลือกใช้เทคนิคอื่นๆ  ไปอ่านเพิ่มเติม ได้ครับ

คนที่มาสาย "ลุยงาน"  ข้อมูลข้างต้น   เพียงพอ ที่จะทำงานต่อได้แล้ว
ผมเชื่อว่า คุณน่าจะได้วิธี ที่มีรายละเอียดต่างจากผม
หลังจากอ่าน  ผมปรับ code จาก VB6 เป็น code ที่สั้นลงมาก
    รวมทั้ง สามารถประยุกต์เพิ่มได้อีก  (จุดแข็ง ของ ความเข้าใจ)
ถ้ามีเวลา ผมก็ยังอยากจะอ่านเพิ่ม ... ดูตัวเลือกอื่น (อาจจะง่ายกว่านี้)

คนที่อยากได้ทางลัดสุดๆ  รอดูเฉลยแล้วกันครับ (ถ้ามีเวลาจะจัดให้)
Code หลักไม่เกิน 1 หน้า(copy)   เวลาเรียกใช้แต่ละงาน  3-6 บรรทัด

ขออภัย   ผมมีนิสัย  ค่อยๆสร้างคน  ให้เข้าใจและเอาตัวรอดได้เอง   มากกว่า ให้ทางลัดแบบสุดๆ
               ด้านบน เป็นการ "ย่อ" จากหลายบทความ (ภาษาอังกฤษ) 
               ... คนที่ไม่ชอบอ่านแค่เห็นบทความยาวๆ ภาษายากๆ  ก็คงถอดใจ
                   ถ้าอ่านมาถึงตรงนี้  คุณจะอ่านบทาความกลุ่มดังกล่าว ง่ายขึ้นมาก

ทางลัดสุดๆ = ?
- Code อย่างเดียว (ถ้าบอก รายละเอียด ก็ยาวไป)
  วิธีนี้ เหมาะกับ คนที่มีพื้นฐาน "ดี" 
      หรือ  "มีที่ปรึกษา  ประจำหน่วยงาน"  (เขาคือหนังสือ ที่ตอบเฉพาะที่คุณอยากรู้)
- Code + คำอธิบาย บ้าง
  เคยถามหลายคนแล้ว  จะรู้สึกว่า  อธิบายขาด กับ เกิน ประจำ (ไม่สามารถเขียนให้โดนใจ  กับ  ทุกคน)

อุปสรรค

ในมุมของผม  คงหนีไม่พ้น   
- ไม่ได้เขียน VB มานาน (กว่า 20 ปี)  คำสั่ง,Syntax ไม่ต้องพูดถึง จำไ่ม่ได้ (ต้อง ค้นหา ตลอด)
- ไม่มีเวลามากพอ  ค้นหา/เขียนโปรแกรมยากๆ ต่อเนื่องนานๆ 
     (หัวหน้า หลายคนคงทราบดี  ต้องใช้เวลา คิดและกระจายงาน ออกไป)
     DDE คืออะไร   ใน VB เขียนอย่างไร  ใน CA/400 จะติดต่ออย่างไร
- บางเทคนิคใหม่  ไม่มีความรู้เลย (อ่านพบ ต้องกลับไปดูพื้นฐานหรือไม่ ? หรือแค่ผ่านตาก็พอ)
     เขียนแบบ OOP, AddHandler,...

ข้างต้นก็แค่  ข้ออ้าง  (ที่จะไม่ทำ)
วันนี้ถ้าจะทำ     ปัญหา คือ โอกาส  ... ลุยเลย

ปัญหาจริงๆ
- ตอนแรกไม่รู้ว่า ต้องทำผ่าน DDE  มองไปเรื่องอื่นเลย (ถ้าไปผิดทางก็ เสียเวลามาก)
          >> เทคนิค  ลองค้นหาดูถ้าเลย 15 นาที ไปต่อไม่ได้ ให้เปลี่ยน
          >> ทยอยค้น 2 วัน  สังเกตว่า ถ้าหยุดแล้วทำใหม่ อีกวัน จะได้ผลต่างกันกับทำต่อเนื่องใน 1 วัน 
- DDE ทาง microsoft ประกาศหยุดพัฒนาใน .Net 
     คำแนะนำแรก คือ ต้องกลับไปเขียนด้วย VB 6.0  การกำหนดค่าทำผ่าน textBoX
     แต่ความพยายามอยู่ที่ไหน  ความพยายามอยู่ที่นั่น
          >> มี post ไว้  มีคนเขียน nDDE  ขึ้นมาเพื่อให้ใช้งานได้กับ .Net (ล่าสุดกลายเป็นตัวช่วยหลัก)
          ... แต่  วิธีเขียนติดต่อจะเปลี่ยนไปใช้เทคนิคใหม่  ด้วย
- ใน CA/400 ใช้ชื่ออะไร ?

ขอระบายสักนิด 555

บริษัทฯได้เริ่มใช้โปรแกรมประเภทนี้ตั้งแต่ 20 ปีที่แล้ว  ด้วย VB 6.0
(ผมยังจำชื่อคนทำได้ ชื่อ อลิสรา)
เวลาผ่านไปจนเกิด .Net  2.0 -> 3.0 -> 3.5 -> 4.0  -> ตอนนี้ 4.5 
ทุกครั้งที่มีโอกาส คุยกันในทีมงาน   ก็จะบอกให้เปลี่ยน version  (ทำให้มันเข้าใจง่าย)

ที่ได้ยินเหตุผลมา
- ยังไม่จำเป็น (ของเก่าก็ใช้ได้)      เกิน 5 ปีก็แย่แล้ว  แล้วทำไมคุณเปลี่ยนมือถือบ่อยๆ 
- ไม่รู้, ไม่ว่าง          "คุณ" รู้มากที่สุดในองค์กร, มีเวลามากที่สุด 
                               (หน้าที่นี้  ได้คัดเลือก คนที่เหมาะจริงๆ)
                               (หน่วยงาน  กำหนดหน้าที่ให้ เหลือเวลามาก  ส่วนหนึ่งเพื่อทำงานกลุ่มนี้)
- พูดง่าย  แต่ทำยาก       ยังไม่ได้เริ่ม จะรุ้ได้อย่างไร
- ไม่อยากทำ (เรื่องที่ไม่รู้, เรื่องที่ต้องสอบถามคนอื่น)         ???

    "หนทางพิสูจน์ม้า  กาลเวลาพิสูจน์คน"

วันนี้ เมื่อองค์กรกำหนดว่า ไม่มีทีมงานในด้านนี้  แต่งานต้องไม่เสียหาย
      ก็ต้อง ทำเอง ครับ

ใช้เวลาอ่านแบบเข้าใจ 6-8 ชม. (ผมอ่านแบบนี้)
ถ้าอ่าน  แบบลุยทดลองทำ  ไม่ต้องเข้าใจมาก  ก็น่าจะ 2 ชม.
      ...เสียเวลา คุย/ฟังเหตุผลข้างบน น่าจะต้องใช้เวลานานกว่า อีกน๊ะ 555

อีกสักนิด 
- ความรู้ที่ใช้อ่าน อย่างไร ก็ต้อง  "ถาม/คุย" ในเรื่องที่ตนเองไม่ถนัด
  หลายคน เลือกที่จะทำงาน "คนเดียว" (เรื่องที่ยาก ก็ยากต่อไป 555)

       มีเพื่อน  มีสังคม, ให้เกียรติเพื่อน  รวมพลังช่วยกันได้ครับ  

วันศุกร์ที่ 25 กรกฎาคม พ.ศ. 2557

เริ่มต้นเขียน ASP.net เรียกใช้ DB2 iSeries

เริ่มต้นเขียน ASP.net เรียกใช้ DB2 iSeries

หลายท่านที่เรียนจบใหม่ อยากใช้ Tool ของภาษาใหม่ (เช่น Visual Studio) 
ติดต่อ DB2 iSeries   เพื่อสร้างงานที่ง่ายขึ้น  วันนี้ลองมาใช้ VS2010 ติดต่อกับ DB2 iSeries ดูครับ

สามารถทำได้อย่างน้อย 2 วิธี
1. ผ่าน  IBM.Data.DB2.iSeries.dll
2. ผ่าน OLEDB

ก่อนทำ

ตรวจสอบว่า Install (ติดตั้ง)  iSeries Client Access  โดยต้องเลือก .Net Data Provider ด้วย
(ปรกติจะ *default ให้  แต่บางบริษัทขณะ Setup ไป  "ปิด" ไว้)

ผ่าน OLEDB

วิธีนี้  ทำงานได้ง่ายที่สุด  แต่มีข้อจำกัดพอสมควร
หลักการ - มองว่า เป็น DB ชนิดหนึ่ง    ก็ติดต่อได้แล้ว  (ทำได้ดีตั้งแต่ VS-2010)

ทบทวน
.Net การสร้าง GridView (เขียนย่อเป็น Gv) เพื่อแสดงข้อมูล 
- การติดต่อ Server เรียก connection  (เขียนย่อเป็น Conn)
- การเลือก Table, Field  เรียกผ่น Sql Statement  (กับ Server ระบุใน Conn) 
       .Net  ตั้งชื่อ DataSource (เขียนย่อเป็น ds)  เพื่อใช้เก็บ  Conn และ Sql
        (ทำให้เราเปลี่ยน ระหว่าง Server ทดสอบกับทำงานจริง  ได้สะดวก) 

- การแสดงผล  จะเลือก Field จาก Sql Staatement  
       Gv เพียงแค่ระบุ ds   จากนั้นก็เสียเวลาปรับแต่งการแสดงผล

ตย. เช่น ขณะสร้าง SqlDataSource  กด New (Add Connection)
Data Source กด [Change]  เปลี่ยนจาก Micorsoft SQL Server  
ไปเป็น <other> แล้วเลือก 
Data Provider ให้เป็น .NET Framework Data Provider for OLEDB
OLE DB Provider เลือกเป็น IBM DB2 for i5.OS IBMDA400 OLE DB Provider
       Q: IBM DB2 for ... ไม่แสดง
       A: อาจจะเกิดจาก (VS 2010) มี .Net FrameWork 4.5.1 ติดตั้งอยู่ (ดูจาก Start > Ctrl Panel > Program & Feature)
            ให้ Un-Install แล้วติดตั้ง VS2010 ใหม่

       ระบุ Server (หรือ IP address),  User และ Password
       กรณี่ที่จะกำหนด Library List (จำกัด Lib ที่จะเห็น) กด [Advance] มุมขวาล่าง แล้วป้อนชื่อ Lib ในช่อง Catalog  Library List เช่น myLib1,myLib2
       ประโยชน์    ใช้เมื่อ Sql Statement ไม่ระบุ Lib  (ให้เลือกตามลำดับใน Lib List)
                                 ...ถ้าระบุ Lib ใน Sql   ไม่จำเป็นต้องประกาศ
                          เมื่อใช้วิธีที่ 2 (ด้านล่าง) รายชื่อ File จะแสดงตาม Lib list
                                 ...ถ้าไม่เลือก Field ผ่านตัวช่วยสร้าง Sql (ช้า)   ไม่จำเป็นต้องประกาศ

ข้อจำกัด ขณะทำ DataSource ในช่วงของการสร้าง SQL  จะมองไม่เห็น file/field (ตัวเลือกไม่ทำงาน)
แต่อนุญาตให้ป้อน SQL ได้ (ตัวเลือกด้านบน)
ข้อแนะนำ  ให้ไปทดสอบ SQL ภายนอกจนถูกต้อง (บน iSeries Navigater)  แล้ว copy มาวางจะเร็วกว่า 

ผ่าน  IBM.Data.DB2.iSeries.dll

เป็นวิธีที่สามารถทำได้หลากหลาย (โดนใจ กลุ่ม coding)   
คำแนะนำ ให้ใช้ผสมทั้ง 2 วิธี

หลักการ - เพิ่ม .dll ให้ VS รู้จัก (ทำงานแบบ native)
      ต้อง Add Reference > เลือก tab=Browse > ค้น  IBM.Data.DB2.iSeries.dll
          ใน Folder = ..\IBM\ClientAccess\

ขณะสร้าง DataSource จะเห็น File/Field (แก้ปัญหาข้อจำกัด ของวิธีแรก)
      Code : ด้านบนต้องเพิ่ม    Imports   IBM.Data.DB2.iSeries
      การ Code จะทำเหมือนเรียกใช้  SqlConnection, SqlCommand, …
      แต่เปลี่ยนเป็น  iDB2Connection, iDB2Command, iDB2DataAdapter, iDB2DataReader
คนที่เขียนสไตล์ ติดต่อ MS SQL เห็นแบบนี้แล้วไปต่อง่ายเลยใช่มั๊ยครับ

ตย. Code
Dim conn As New iDB2Connection("DataSource=A39BP;UserID=PCLINK;Password=PCLINK;
ConnectionTimeOut=0")
Dim cmd = New iDB2Command("Select field1,field2 From lib.file ", conn)
cmd.CommandTimeout = 0
Dim da As New iDB2DataAdapter(cmd)
Dim dt As New DataTable
da.Fill(dt)
da.Dispose()
cmd.Dispose()

conn.Close()

GridView1.DataSource = dt
GridView1.DataBind()

ปัญหาที่พบ  ตั้งแต่ VS2010 เปิดตัว Entity Frame Work  VS2010 จะส่วนนี้จะติดต่อกับ iSeries ไม่ได้
(ปัจจุบัน  Web ของ IBM ได้เขียนแนะนำว่า  ทำได้แล้ว)

Q: วิธีนี้ดีจริง ?
A: เมื่อดูภาพกว้างๆ   การทำงานไม่ช้า
       เขียนโดยใช้ SqlConnection สามารถใช้ได้ทั้ง MS Sql Server และ DB2
      ในขณะที่ เขียนโดยระบุ  iDB2Connection  ใช้ได้กับ  DB2 เท่านั้น
       >> การเขียนโดยใช้ SqlConnection น่าจะ  "ยืดหยุ่น" กว่า

     แต่ถ้า  "เน้น" ความเร็ว,  ตัวเลือก  ที่มีเฉพาะใน DB2
     >> การเรียกใช้  ชุดการเชื่อมต่อ"เฉพาะ" ต้องเหมาะสมกว่า

อ้างอิง
http://gugiaji.wordpress.com/2011/12/29/connect-asp-net-to-db2-udb-for-iseries/
http://www.codeproject.com/Articles/157953/Connecting-DB-iSeries-From-net-Application