
🛒 BÀI GIẢNG: APP ĐỀ NGHỊ MUA HÀNG (DUYỆT 1 CẤP)
🎯 MỤC TIÊU BUỔI HỌC
Sau bài này, học viên sẽ làm được:
✔ Nhân viên tạo đề nghị mua hàng và lưu vào SharePoint
✔ Trưởng phòng duyệt / từ chối ngay trên app
✔ Theo dõi trạng thái: Pending / Approved / Rejected
✔ (Nâng cao) Có thể mở rộng gửi email giống bài trước
📂 PHẦN 1: CHUẨN BỊ DỮ LIỆU (SHAREPOINT)
1.1 Tạo SharePoint List: PurchaseRequests
Tạo list mới với các cột sau:
| Tên cột | Kiểu dữ liệu | Ý nghĩa |
|---|---|---|
| Title | Single line | Tiêu đề đề nghị |
| RequesterName | Single line | Người đề nghị |
| RequesterEmail | Single line | |
| Department | Single line | Phòng ban |
| ItemName | Single line | Tên hàng hóa |
| Quantity | Number | Số lượng |
| EstimatedCost | Currency | Chi phí dự kiến |
| Reason | Multiple lines | Lý do |
| Status | Choice | Trạng thái |
| ManagerEmail | Single line | Email trưởng phòng |
Thiết lập Choice:
Status:
- Pending
- Approved
- Rejected
👉 Giải thích:
- Pending = chờ duyệt
- Approved = đã duyệt
- Rejected = từ chối
1.2 DỮ LIỆU MẪU (15 DÒNG)
👉 Copy vào Edit in grid view
| Title | RequesterName | RequesterEmail | Department | ItemName | Quantity | EstimatedCost | Reason | Status | ManagerEmail |
|---|---|---|---|---|---|---|---|---|---|
| PR-001 | Nguyễn Văn A | a@contoso.com | IT | Laptop Dell | 2 | 30000000 | Làm việc dự án | Pending | it.manager@contoso.com |
| PR-002 | Trần Thị B | b@contoso.com | HR | Máy in | 1 | 5000000 | In tài liệu | Pending | hr.manager@contoso.com |
| PR-003 | Lê Văn C | c@contoso.com | Sales | iPad | 3 | 20000000 | Demo khách hàng | Pending | sales.manager@contoso.com |
| PR-004 | Phạm Thị D | d@contoso.com | Marketing | Camera | 1 | 15000000 | Quay video | Pending | mkt.manager@contoso.com |
| PR-005 | Nguyễn Văn E | e@contoso.com | Finance | Máy scan | 1 | 7000000 | Lưu chứng từ | Pending | fin.manager@contoso.com |
| PR-006 | Hoàng A | a1@contoso.com | IT | Chuột | 10 | 2000000 | Thiết bị phụ | Approved | it.manager@contoso.com |
| PR-007 | Hoàng B | b1@contoso.com | HR | Bàn làm việc | 2 | 4000000 | Nhân sự mới | Approved | hr.manager@contoso.com |
| PR-008 | Hoàng C | c1@contoso.com | Sales | Điện thoại | 2 | 10000000 | Gọi khách | Rejected | sales.manager@contoso.com |
| PR-009 | Hoàng D | d1@contoso.com | Marketing | Micro | 1 | 3000000 | Livestream | Approved | mkt.manager@contoso.com |
| PR-010 | Hoàng E | e1@contoso.com | Finance | Máy tính | 1 | 12000000 | Kế toán | Rejected | fin.manager@contoso.com |
| PR-011 | Minh A | m1@contoso.com | IT | Server | 1 | 50000000 | Hệ thống | Pending | it.manager@contoso.com |
| PR-012 | Minh B | m2@contoso.com | HR | Ghế | 5 | 5000000 | Văn phòng | Pending | hr.manager@contoso.com |
| PR-013 | Minh C | m3@contoso.com | Sales | Tablet | 2 | 15000000 | Trình diễn | Pending | sales.manager@contoso.com |
| PR-014 | Minh D | m4@contoso.com | Marketing | Đèn | 3 | 3000000 | Studio | Pending | mkt.manager@contoso.com |
| PR-015 | Minh E | m5@contoso.com | Finance | Máy in màu | 1 | 8000000 | Báo cáo | Pending | fin.manager@contoso.com |
🛠️ PHẦN 2: TẠO APP (POWER APPS)
2.1 Tạo Canvas App
- Vào: make.powerapps.com
- Create → Blank app
- Name: App Đề Nghị Mua Hàng
- Format: Phone
2.2 Kết nối dữ liệu
- Data → Add data → SharePoint
- Chọn list: PurchaseRequests
👤 PHẦN 3: MÀN HÌNH NHÂN VIÊN
3.1 Tạo screen
👉 Name: scrCreatePR
3.2 Thêm control
| Control | Name |
|---|---|
| Text input | txtName |
| Text input | txtEmail |
| Text input | txtDepartment |
| Text input | txtItem |
| Text input | txtQuantity |
| Text input | txtCost |
| Text input (Multiline) | txtReason |
3.3 Nút “GỬI ĐỀ NGHỊ”
👉 OnSelect:
Patch(
PurchaseRequests,
Defaults(PurchaseRequests),
{
Title: txtName.Text & "-" & Text(Today(),"yyyymmdd"),
RequesterName: txtName.Text,
RequesterEmail: txtEmail.Text,
Department: txtDepartment.Text,
ItemName: txtItem.Text,
Quantity: Value(txtQuantity.Text),
EstimatedCost: Value(txtCost.Text),
Reason: txtReason.Text,
Status: "Pending",
ManagerEmail: "manager@contoso.com"
}
);
Notify("Đã gửi đề nghị!", NotificationType.Success);
Reset(txtName);
Reset(txtEmail);
Reset(txtDepartment);
Reset(txtItem);
Reset(txtQuantity);
Reset(txtCost);
Reset(txtReason);
💡 Giải thích
Value()→ chuyển text → sốPatch()→ ghi dữ liệuDefaults()→ tạo bản ghi mớiStatus = Pending→ chờ duyệt
3.4 Gallery “Đề nghị của tôi”
Filter(PurchaseRequests, RequesterEmail = txtEmail.Text)
👨💼 PHẦN 4: MÀN HÌNH DUYỆT
4.1 Tạo screen
👉 Name: scrManager
4.2 Gallery Pending
Filter(PurchaseRequests, Status = "Pending")
4.3 Nút DUYỆT
Patch(
PurchaseRequests,
ThisItem,
{ Status: "Approved" }
);
Notify("Đã duyệt!", NotificationType.Success)
4.4 Nút TỪ CHỐI
Patch(
PurchaseRequests,
ThisItem,
{ Status: "Rejected" }
);
Notify("Đã từ chối!", NotificationType.Warning)
🧪 PHẦN 5: KIỂM THỬ (BẮT BUỘC)
Test 1 – Gửi đề nghị
👉 Kết quả:
- SharePoint có dòng mới
- Status = Pending
Test 2 – Duyệt
👉 Kết quả:
- Status → Approved
- Biến mất khỏi danh sách
Test 3 – Từ chối
👉 Kết quả:
- Status → Rejected
🏁 KẾT QUẢ CUỐI
Bạn đã có:
✅ App đề nghị mua hàng
✅ Quy trình duyệt 1 cấp
✅ Dữ liệu tập trung SharePoint
✅ Có thể mở rộng email / báo cáo
🚀 GỢI Ý NÂNG CAO (CHO TỰ THỰC HÀNH)
- Tự động chọn Manager theo phòng ban
- Gửi email khi Approved
- Dashboard tổng chi phí
- Phân quyền (nhân viên vs manager)