﻿Verimport - bản dùng chung trên IIS: hướng dẫn cho IT

Bản dùng chung chạy trên IIS của một máy chủ trong công ty. Nhân viên mở trình duyệt trên máy
của mình, đăng nhập bằng user SAP Business One của họ. Cần license dùng chung (license cá nhân
không dùng được trên IIS).

ĐIỀU KIỆN
- Windows Server 2016 trở lên (hoặc Windows 10 / 11), 64-bit.
- Vai trò IIS (Web Server). Rồi cài "ASP.NET Core Hosting Bundle" cho .NET 10 của Microsoft
  (miễn phí): https://dotnet.microsoft.com/download/dotnet/10.0 -> Hosting Bundle.
  Cài IIS trước, Hosting Bundle sau.
- SAP Business One có Service Layer. Bản dùng chung ghi vào SAP chỉ qua Service Layer.
- Nên có tài khoản database chỉ đọc (SQL Server / HANA) cho từng công ty: đọc nhanh hơn và dùng
  được mọi màn. Không có thì một số màn bị giới hạn (lô / serial xuất kho, phiếu thu chi theo hóa
  đơn nhiều kỳ...); Verimport báo rõ tại màn đó.
- Chứng chỉ HTTPS: chứng chỉ của công ty mang tên máy chủ (nên dùng), hoặc để script tạo chứng chỉ
  tự ký.
- Máy chủ ra được Internet tới https://license.htttechnology.com (cổng 443, chiều đi) để kích hoạt
  và kiểm tra license. Bản 1.0.0 dùng https://license.tgblogs.site: nếu tường lửa cho phép theo tên,
  cho phép cả hai tên tới khi cập nhật xong. Nếu công ty dùng proxy: chọn "Dùng proxy riêng" ở màn
  kích hoạt.
  Máy chủ không được ra Internet: kích hoạt bằng file (mục MÁY CHỦ KHÔNG RA ĐƯỢC INTERNET).
- Nhân viên không đăng nhập vào máy chủ này (Remote Desktop hay ngồi tại máy). Ai mở Verimport
  ngay trên máy chủ (https://localhost) đều sửa được Setting và License, kể cả khi không đăng nhập
  SAP. Máy Remote Desktop cho nhân viên: cài bản dùng chung trên một máy chủ khác.

CÀI ĐẶT
1. Giải nén toàn bộ file zip Verimport vào một thư mục trên máy chủ (không chạy trong file zip).
2. Kiểm điều kiện trước (không thay đổi gì): mở PowerShell, chạy
     <thư mục giải nén>\iis\Cai-dat-IIS.cmd -CheckOnly
3. Bấm chuột phải iis\Cai-dat-IIS.cmd -> Run as administrator. Script:
   - kiểm lại điều kiện; thiếu gì thì báo từng mục và cách sửa, chưa thay đổi gì;
   - hỏi chứng chỉ HTTPS (chọn chứng chỉ có trên máy, hoặc tạo chứng chỉ tự ký);
   - hỏi có mở cổng trong Windows Firewall cho mạng nội bộ (Domain, Private) không;
   - chép ứng dụng vào %ProgramFiles%\Verimport, tạo app pool và site "Verimport" (chỉ HTTPS,
     cổng 443), thư mục dữ liệu %ProgramData%\SAP AddOns (chỉ app pool và Administrators đọc được);
   - mở https://localhost/ trên máy chủ.
   Cổng 443 đã có web khác: chạy lại với cổng khác, ví dụ Cai-dat-IIS.cmd -Port 8443.
   Dùng chứng chỉ của công ty không qua câu hỏi: Cai-dat-IIS.cmd -CertificateThumbprint <thumbprint>.
4. Trên máy chủ, ở trang vừa mở: nhập mã license dùng chung -> Kích hoạt -> thiết lập máy chủ
   database (nếu có) và kết nối Service Layer, kiểm bằng một user SAP.
   Kích hoạt và thiết lập chỉ làm được trên chính máy chủ (https://localhost...).
5. Gửi nhân viên địa chỉ script in ra ở cuối, ví dụ https://ten-may-chu.congty.local/

KHI KHÔNG AI ĐĂNG NHẬP ĐƯỢC (ví dụ địa chỉ Service Layer đã đổi)
Trên máy chủ mở https://localhost/ (cổng khác: https://localhost:<cổng>/), bấm "Sửa cấu hình trên
máy chủ" dưới nút Đăng nhập: sửa Setting không cần đăng nhập SAP. "Kiểm tra kết nối" hỏi một user
SAP để thử, mật khẩu không được lưu. Sửa xong bấm "Đăng nhập SAP". Máy khác không có nút này.
Vì vậy chỉ IT đăng nhập vào máy chủ này (xem ĐIỀU KIỆN).

MÁY CHỦ KHÔNG RA ĐƯỢC INTERNET (KÍCH HOẠT BẰNG FILE)
Dùng khi máy chủ không kết nối được license.htttechnology.com, kể cả qua proxy.
1. Trên máy chủ, ở màn kích hoạt (https://localhost/): bấm "Máy chủ không vào được Internet?"
   (hoặc nút "Kích hoạt bằng file" trong thông báo không kết nối được).
2. Bước 1: nhập mã license -> "Tạo file yêu cầu". Trình duyệt tải file
   Verimport-yeu-cau-<tên máy>-<ngày>.txt (thường trong thư mục Downloads).
3. Bước 2: gửi file đó cho nhà cung cấp (đính kèm, hoặc "Sao chép nội dung" rồi dán vào email).
   File có mã license; không có dữ liệu SAP, user hay mật khẩu. Chỉ gửi cho nhà cung cấp.
4. Nhà cung cấp gửi lại file Verimport-giay-phep-<tên máy>-het-han-<ngày>.txt.
   Bước 3: "Chọn file giấy phép..." (hoặc dán toàn bộ nội dung) -> "Kích hoạt bằng file".
   Đóng trình duyệt giữa chừng không sao: mở lại https://localhost/ sẽ về bước 3.
- Không sửa nội dung file (sửa một ký tự là Verimport không nhận). File chỉ dùng được trên đúng
  máy chủ và đúng lần cài đã tạo file yêu cầu.
- Máy chủ không kiểm tra license online nên không tự gia hạn. Verimport nhắc từ 14 ngày trước
  hạn; nhà cung cấp gửi file giấy phép mới, nhập ở Setting -> License -> "Nhập file giấy phép mới"
  (không cần file yêu cầu mới).
- Khi máy chủ ra được Internet: Setting -> License -> "Chuyển sang kiểm tra online", nhập mã license.
- Gỡ Verimport kèm xóa dữ liệu, hoặc cài lại trên máy chủ khác: cần tạo file yêu cầu mới.

CHỨNG CHỈ TỰ KÝ
Trình duyệt của nhân viên sẽ báo "không an toàn" tới khi máy họ tin chứng chỉ này. Script lưu
chứng chỉ ở %ProgramData%\SAP AddOns\chung-chi-tu-ky-Verimport.cer: cài file này vào
"Trusted Root Certification Authorities" của các máy (ví dụ bằng Group Policy).

NÂNG CẤP
Cách 1, trong ứng dụng (từ bản có màn Setting -> Cập nhật):
- Trên chính máy chủ, mở https://localhost:<cổng>/ -> Setting -> Cập nhật (không cần đăng nhập
  SAP: "Sửa cấu hình trên máy chủ"). Có bản mới thì bấm "Cập nhật lên ...". Máy chủ không ra
  Internet (license bằng file): bấm "Cập nhật từ file zip..." và chọn file zip nhà cung cấp gửi,
  không cần giải nén.
- Verimport kiểm chữ ký của nhà cung cấp, chờ các lần ghi vào SAP đang chạy, rồi tác vụ Windows
  "Verimport - cap nhat" (Task Scheduler, chạy bằng SYSTEM) cài: trong 1–3 phút mọi người thấy
  trang "Verimport đang cập nhật"; dữ liệu được sao lưu vào %ProgramData%\SAP AddOns\backups
  (giữ 3 lần); bản mới không mở được thì tự cài lại bản cũ. Bản trước giữ ở
  <thư mục chương trình>\cap-nhat để "Quay về" trên cùng màn.
- Superuser SAP ở máy khác chỉ xem được, không cập nhật được.
- Tác vụ và nguồn Event Log "Verimport" do Cai-dat-IIS.cmd / Nang-cap-IIS.cmd tạo. Màn Cập
  nhật báo "Tác vụ cập nhật trên máy chủ chưa chạy": chạy Nang-cap-IIS.cmd của bản đang cài một
  lần (tạo lại tác vụ). Kết quả từng lần: Event Viewer / file %ProgramData%\SAP AddOns\updates.
Cách 2, bằng script: giải nén file zip bản mới vào một thư mục, bấm chuột phải
iis\Nang-cap-IIS.cmd -> Run as administrator. Script không nâng cấp khi đang có người ghi vào
SAP (báo và dừng; chạy lại khi xong). Dữ liệu ở %ProgramData%\SAP AddOns giữ nguyên. Máy chủ
cài từ trước khi có màn Cập nhật: lần đầu nâng cấp bằng cách này (script tạo tác vụ).
Máy chủ cài khi sản phẩm còn tên SAP AddOns: site và app pool giữ tên "SAP AddOns", các script
tự nhận ra; tác vụ và nguồn Event Log được đổi sang "Verimport" khi nâng cấp.

KHÔNG CẮT NGANG LẦN GHI VÀO SAP
- Không dừng site / app pool "Verimport" hay khởi động lại máy chủ khi có người đang import.
  Dùng các script trên: script hỏi Verimport trước.
- Đặt giờ Windows Update khởi động lại máy chủ ngoài giờ làm việc. Lần ghi bị cắt giữa chừng thì
  SAP có thể đã nhận một phần chứng từ; người import cần xem trên SAP trước khi ghi lại.

GỠ
Bấm chuột phải iis\Go-IIS.cmd -> Run as administrator (xóa cả tác vụ "Verimport - cap nhat"). License vẫn gắn với máy chủ: muốn dùng ở
máy chủ khác, trước khi gỡ vào Setting -> License -> "Hủy kích hoạt trên máy này" (license nhận
bằng file: hủy xong báo nhà cung cấp để giải phóng). Script hỏi riêng có xóa dữ liệu không (mặc
định giữ lại). Không đụng tới SAP.

DỮ LIỆU VÀ SAO LƯU
%ProgramData%\SAP AddOns: cấu hình kết nối, license, khóa mã hóa (thư mục keys). Mật khẩu đã lưu
(tài khoản database chỉ đọc, proxy) được mã hóa bằng khóa gắn với máy chủ này: chép sang máy khác
thì không đọc được, phải nhập lại. Mật khẩu SAP của nhân viên không lưu ở đâu.

KHI CÓ LỖI
- Event Viewer -> Windows Logs -> Application, nguồn "IIS AspNetCore Module V2" và ".NET Runtime".
- Log chi tiết khi cần hỗ trợ: Cai-dat-IIS.cmd -DetailedLog On (log vào
  %ProgramData%\SAP AddOns\logs); xong thì Cai-dat-IIS.cmd -DetailedLog Off.
- Không gửi mật khẩu, mã license đầy đủ hay file trong thư mục keys cho bất kỳ ai (file yêu cầu
  kích hoạt bằng file có mã license: chỉ gửi cho nhà cung cấp).
