CODEMONDAY

สถาปัตยกรรมของระบบ

เขียนด้วยภาษาอะไร · ต่อกับ SharePoint อย่างไร · ข้อมูลไหลจากไหนไปไหน

1 · เขียนด้วยอะไร

ส่วนภาษา / เฟรมเวิร์กเวอร์ชันที่ใช้จริง
ส่วนที่ติดตั้งใน SharePoint
web part + extension
TypeScript + React บน SharePoint Framework (SPFx) SPFx 1.23.2 · React 17.0.1 · TypeScript 5.8 · Node 22
หน้า admin
เว็บแยก ไม่ได้อยู่ใน SharePoint
TypeScript + React + Vite · ล็อกอินด้วย MSAL · จัดการข้อมูลด้วย TanStack Query React 19 · Vite 8 · MSAL 5
โค้ดที่ใช้ร่วมกัน TypeScript ล้วน ไม่อ้างอิงไลบรารีของ SharePoint เลย โครงเนื้อหา · โครงฟอร์ม · กัน XSS · กรองตามแผนก · ธีม

ทำไม React คนละเวอร์ชัน — SPFx ตรึง React 17 ไว้กับตัวมันเอง ห้ามเปลี่ยน · ส่วนหน้า admin เป็นเว็บแยกจึงใช้รุ่นใหม่ได้อิสระ · โค้ดที่ใช้ร่วมกันจึงต้องไม่พึ่ง React ทั้งสองฝั่ง

2 · ต่อกับ SharePoint อย่างไร

ตอนติดตั้ง

// เครื่องนักพัฒนา
npm run build  →  gulp bundle --ship  →  gulp package-solution --ship
                                              ↓
                                    ntl-blocks.sppkg   (1 ไฟล์)
                                              ↓
                          อัปโหลดเข้า App Catalog ของ tenant → Deploy
                                              ↓
             ไฟล์ JavaScript ไปอยู่ใน /sites/appcatalog/ClientSideAssets
             web part โผล่ในกล่องเครื่องมือของทุก site ในองค์กร

ตั้งค่า skipFeatureDeployment: true ไว้ · หมายความว่าใช้ได้ทุก site ทันทีที่ deploy ไม่ต้องไปเพิ่มแอปทีละ site

ตอนใช้งาน

ผู้ดูแลแทรก web part ลงหน้าเว็บเหมือน web part ของ Microsoft ทุกประการ แล้วตั้งค่าผ่าน property pane เช่นเลือกโซนที่จะแสดง หรือกำหนดอายุ cache

ตัวชนิดหน้าที่
ZoneBlockweb partประกอบหน้าจาก block 8 ชนิด · ฝัง block ตัวอื่นซ้อนได้
HtmlBlockweb partแสดง HTML ของ slot เดี่ยว
FormBlockweb partแสดงฟอร์มจาก schema และรับคำตอบ
QaBlockweb partถาม–ตอบที่ผ่านการอนุมัติแล้ว
AppLauncherweb partกริดโปรแกรม กรองตามแผนกของผู้ใช้
SiteChromeextensionแถบหัว–ท้ายทุกหน้าของ site + เก็บสถิติการใช้งาน

3 · ข้อมูลไหลอย่างไร

ผู้ดูแลเนื้อหา หน้า admin · React + MSAL เว็บแยก ไม่ได้อยู่ใน SharePoint ล็อกอินด้วยบัญชีองค์กร SharePoint Lists คลังข้อมูลจริงของทั้งระบบ PageZones · โครงหน้า PageContent · HTML ราย slot FormSchemas · นิยามฟอร์ม FormResponses · คำตอบ + Q&A AppLinks · รายการโปรแกรม + PortalImages ในไลบรารีเอกสาร พนักงาน หน้าเว็บบน SharePoint web part ทำงานในเบราว์เซอร์ ด้วยสิทธิ์ของผู้ใช้คนนั้น เขียนผ่าน Graph (คอลัมน์ URL ต้องผ่าน SP REST) อ่าน · SPHttpClient cache 60–300 วินาที ส่งฟอร์ม → FormResponses Microsoft Entra ID ตัวตน · กลุ่ม · แผนกของผู้ใช้ เป็นตัวตัดสินสิทธิ์ทั้งหมด ล็อกอิน Power Automate แจ้งเมลผู้รับที่กำหนด และงานอัตโนมัติอื่น มีคำตอบใหม่ → เรียกโฟลว์ web part ถามแผนกของผู้ใช้ เพื่อกรองเนื้อหาตามแผนก Application Insights สถิติการใช้งานจริงรายหน้า ใช้แทนการทำ load test SiteChrome ส่งสถิติทุกครั้งที่เปิดหน้า App Catalog เก็บไฟล์ .js ของ web part ผู้ใช้ต้องมีสิทธิ์อ่านที่นี่ด้วย โหลดไฟล์ web part ตอนเปิดหน้า
เส้นทางของคน เส้นทางของฟอร์มและงานอัตโนมัติ ที่เก็บข้อมูลและสถิติ

4 · อ่านแผนภาพเป็นประโยค

ขั้นเกิดอะไรขึ้นใครทำ
1ผู้ดูแลจัดหน้าในหน้า admin แล้วกดบันทึกหน้า admin → Microsoft Graph
2เนื้อหาถูกเก็บเป็นข้อมูลใน SharePoint List ไม่ใช่เป็นหน้าเว็บSharePoint
3พนักงานเปิดหน้าเว็บ · web part อ่านข้อมูลด้วยสิทธิ์ของพนักงานคนนั้นSPFx → SharePoint REST
4ข้อมูลถูก cache ในเบราว์เซอร์ 60–300 วินาที เพื่อไม่ให้ระบบถูก throttle ตอนคนใช้พร้อมกันมากฝั่งเบราว์เซอร์
5เนื้อหาถูกกรองตามแผนกของผู้ใช้ก่อนแสดง · ไม่รู้แผนก = ไม่แสดงของที่จำกัดกลุ่มโค้ดที่ใช้ร่วมกัน
6พนักงานส่งฟอร์ม → เขียนลง FormResponses → Power Automate แจ้งเมลผู้รับSPFx → SharePoint → Power Automate
7คำถามที่ส่งมาต้องให้ผู้ดูแลอนุมัติก่อนถึงจะขึ้นหน้าเว็บหน้า admin
8ทุกการเปิดหน้าถูกบันทึกเป็นสถิติเพื่อดูพฤติกรรมผู้ใช้จริงSiteChrome → Application Insights
สามอย่างที่ออกแบบไว้ตั้งแต่ต้น และเป็นคำตอบให้ requirement ของลูกค้าโดยตรง

5 · จุดที่ต้องรู้เวลาแก้ปัญหา

เรื่องรายละเอียด
แก้แล้วยังไม่เห็นผลทันที cache อยู่ใน sessionStorage ของแท็บนั้น · กด F5 ไม่ล้าง ต้องเปิดแท็บใหม่หรือรอ TTL หมด · ตั้ง Cache = 0 ใน property pane ตอนสาธิตได้
Graph ใช้ทำอะไรบ้าง ฝั่ง web part ใช้แค่ถาม /me เพื่อรู้แผนกของผู้ใช้ · การอ่านเนื้อหาทั้งหมดใช้ SharePoint REST ตรง ๆ
คอลัมน์ชนิด URL Graph สร้างและเขียนไม่ได้ (400/500) · ต้องผ่าน SharePoint REST เท่านั้น · หน้า admin จึงถือ token สองใบ
พนักงานส่งฟอร์มไม่ได้ (403) การส่งฟอร์มคือการเพิ่มรายการลง FormResponses · สิทธิ์ Read อย่างเดียวทำไม่ได้ · ต้องให้กลุ่มพนักงานได้ Contribute เฉพาะลิสต์นั้น (แยกสิทธิ์ลิสต์ออกจาก site ก่อน) ไม่ใช่ให้ Edit ทั้ง site · ทำครบทั้ง 4 site แล้วเมื่อ 26 ส.ค. 2026
ข้อความ error โค้ดเราขึ้นภาษาไทยเสมอ · เห็นข้อความอังกฤษของ SharePoint แปลว่าพังก่อนโค้ดเราได้ทำงาน (ดู บันทึกเรื่อง guest access)