Hi,
mình có develop hệ thống tương tự như scenario bạn mô tả, nếu khái quát hơn thì có thể coi là :
Hệ thống tự động xét danh sách theo điều kiện để gửi báo cáo theo mẫu
Hệ thống này sẽ gồm quy trình (flow) theo thứ tự:
Flow1: Xét danh sách
Flow này sẽ run tự động hoặc theo lịch\trigger trên một danh sách dữ liệu quy định có sẵn (excel,SP List,Dataverse table,...) và gồm 2 bước chính:
1. Evaluate từng records (Excel row\ SP List Item\Dataverse table row) theo điều kiện quy định
2. Nếu thỏa điều kiện thì sẽ trigger Flow2 (hoặc sub-flow)
Flow2: gửi email kèm file báo cáo
Flow thứ 2 này gồm có 3 bước chính:
1. Tạo file (report\slip\...) được generated từ template file(word\html\xml\..) với data lấy từ các columns\field của record tương ứng
2. Convert thành format mong muốn: pdf, html,...
3. Gửi email attach file đến địa chỉ email của record tương ứng
Như vậy sẽ cần có:
1.Danh sách dữ liệu có tối thiểu :
- Lookup Id
- Email người nhận
- column(s) để xét điều kiện
- Data column(s) để populated vào template tạo file
2. Tạo 2 flows như trên:
- Flow1 có thể là manual run hoặc scheduled run hoặc event trigger và flow sẽ run For Each item in Collection (rows\items)
- Flow thứ 2 có thể là sub-flow trong Flow1 For Each action nhưng nên tách ra hẳn flow riêng dùng connector HTTP Webhook receive POST gửi từ action của từng item trong For Each của Flow1
**Tip: thực tế triển khai thì mình tách Flow1 ra làm hẳn 2 flows:
- flow 1.1 để loop For Each item in Collection với action khi thỏa mãn điều kiện check là HTTP POST đến mannual trigger flow 1.2 (trigger=when receive HTTP request)
- flow 1.2 mình thiết kế để "xếp hàng" chạy lần lượt theo thứ tự để tránh không bị vượt limit tối đa gửi emails trong một khoản thời gian ngắn (vd mình khống chế số lượng tối đa job đang chạy (concurrent running) tối đa là 5 , khi flow 1.2 start thì sẽ check số jobs đang running ngay lúc đó nếu <5 thì được chạy tiếp luôn , còn >=5 thì loop pause 1min rồi check lại đến khi <5 thì mới được chạy tiếp action là HTTP POST tới flow 2 thực hiện gửi email.
- flow 2 sẽ lấy data của item đang chạy ở file excel danh sách , populate template để tạo ra report\nội dung và gửi email.
Lý do tách ra là vì như vậy sẽ :
- monitor được từng flow run riêng biệt (nếu run trong For Each sẽ không monitor được và nếu fail ở một record có thể failed cả flow ko run tiếp các records còn lại)
- Có thể chủ động quản lý lượt run đồng thời của các records ( tối ưu hơn có thể xếp lượt theo status queing\running\completed)
- Nếu xét điều kiện complex hoặc nhiều steps tách ra sẽ monitor riêng được details của rừng lượt run dễ debug lỗi cũng như dễ rerun lại
- Ban đầu mình làm populate file word rồi convert pdf và attached gửi email nhưng sau khi thử run thực tế vài lần thì mình chuyển populate thẳng data vào HTML code của email gửi luôn. Tuy hơi mất công làm HTML code template nhưng kết quả running nhanh hơn rất nhiều và ổn định, nhẹ.