- vừa được xem lúc

Hướng dẫn xây dựng flow đổi tên file từ việc đọc dữ liệu từ file PDF với Power Automate

0 0 1

Người đăng: Huy Lương

Theo Viblo Asia

Xin chào mọi người, thì gần đây mình với biết đến nơi làm việc của ông anh mình có các nghiệp vụ cần xử lý các bộ hồ sơ về các đơn hàng đến kế toán. Vấn đề là các kế toán họ làm việc online nên những bộ hồ sơ đó được lưu tại Sharepoint để kế toán xử lý online.

Mô tả bài toán

Cụ thể thì các đơn hàng đó được scan qua máy in để có file pdf trên máy tính, sau đó thì cần đặt tên các PDF này theo 1 cú pháp nào đó rồi đẩy lên Sharepoint cho kế toán họ xử lý. Do đó bài toán đặt ra là cần phải dựa trên mã hóa đơn trên file để tiến hành đổi lại tên file. Sau đây, thì mình sẽ hướng dẫn để xây dựng 1 flow có thể đổi tên file dựa trên dữ liệu được đọc trên file PDF. Ngoài ra đây cũng có thể là 1 use case để mọi người có thể tùy chỉnh trong trường hợp riêng của mình.

Khởi tạo trigger cho flow

Sau khi mình scan file vào máy tính thì mình sẽ cần đẩy file đó lên OneDrive để tạo trigger cho flow, trigger của flow dùng để bắt sự kiện tạo file trên OneDrive, ngoài ra ở đây ngoài OneDrive mình cũng có thể chọn trigger lắng nghe sự kiến từ Sharepoint

Bước 1: Mình cần tạo automated cloud flow. Tại tab "My flows" mình cần chọn "New flow" -> "Automated cloud flow" Sau đó mình sẽ chọn Trigger "When a file created" -> Chọn "Create" Khi đó Microsoft Automate sẽ tạo cho mình 1 trang giao diện để edit flow, mình có thể nhấp vào item đó để xem thông tin của item đó. Ở đây mình chọn đường dẫn folder là /File Input

Bước 2: Sau đó mình sẽ tạo ra các biến để hỗ trợ cho việc đặt tên file ở những bước sau. Để tạo ra biến trong flow mình làm theo các bước sau

Mình chọn "Add an action" sau đó tìm kiếm các action với từ khóa "variable" Sau khi thêm action, mình có thể thay đổi tên, đặt tên biến và chọn kiểu dữ liệu nếu muốn

Ở đây mình sẽ đặt tạo 1 biến tên là varHeader để lưu giữ chuỗi đầu của tên file như sau Tương tự mình cũng sẽ tạo ra các biến sau

Do là lúc sau mình có sử dụng AI Builder để thực hiện đọc dữ liệu từ file pdf, mà đối với AI Builder thì người dùng cần mua riêng license để được cung cấp credit sử dụng. Mọi người có thể tham khảo thêm link sau để đọc thêm về credit của AI Builder: https://learn.microsoft.com/en-us/ai-builder/credit-management. Đại khái khi dùng action của AI Builder để extract dữ liệu từ ảnh thì mỗi 1 trang nó sẽ tính từ 1 credit. Và do mình chỉ cần đọc dữ liệu mã hóa đơn nên mình đặt mặc định vị trí của mảng là từ 15-25

Bước 3: Tạo action "Get file content using path" để lấy dữ liệu của file

Bước 4: Tạo action "Recognize text in an image or a PDF document" và truyền file content vừa đọc được vào property "Image"

Kết quả trả về của 1 dữ liệu

Dữ liệu trả ra là một chuỗi các json, thông qua "/body/predictionOutput/results/" ta sẽ có được dữ liệu các trang, trong các trang có trường lines thể hiện các dòng của trang đó.

Bước 5:

  • Tạo action "Apply to each" và truyền vào biến "varIndex" mà trước đó mình tạo

  • Tạo action "Condition" để kiểm tra giá trị mình đọc được. Do mô hình nhận diện của AI do Microsoft cho kết quả không chính xác do 1 số nguyên nhân. Ví dụ trong trường hợp mình cần đọc trường "Order no" nhưng kết quả trả ra là "Order nc" điều này xảy ra là do mực máy in in chữ no không rõ nên mô hình sẽ nhận diện sai, để tránh trường hợp này thì mình cần so sánh tất cả các trường hợp nó có thể sai để mình vẫn đọc được data.

Dùng expression để đọc dữ liệu trả ra từ action AI Builder: outputs('Recognize_text_in_an_image_or_a_PDF_document')?['body/responsev2/predictionOutput/results'][1]?['lines'][variables('varIndex')]?['text']

Giải thích: từ outputs của action ta cần query path từ "/body/predictionOutput/results/" lấy phần tử ở trang 2 và tiếp tục query tiếp để lấy các lines tại từng biến index đã tạo trước đó là 15-25, tức là duyệt từ dòng 15-25 và lấy trường text để so sánh dữ liệu, nếu là trường có title là Reception no thì mình sẽ lấy index + 1

  • Set lại variable của biến varReceptionNo để lấy mã hóa đơn

Expression: outputs('Recognize_text_in_an_image_or_a_PDF_document')?['body/responsev2/predictionOutput/results'][1]?['lines'][add(int(variables('varIndex')),1)]?['text'] Tạo action "Increment variable" để tăng biến index sau mỗi lần lặp:

Bước 6: Tạo action "Condition" để kiểm tra có lấy được dữ liệu từ Reception no hay không

Expression:

empty(variables('varReceptionNo'))

Trong trường hợp không lấy được mã Reception no sẽ tạo tên file bị lỗi dẫn đến flow sẽ có thể bị fail. Vì thế nếu rỗng thì mình dùng hàm utcNow() để lấy thời gian hiện tại nối vào biến, ngược lại mình sẽ lấy biến varHeader + varReceptionNo

  • Trường hợp true:

  • Trường hợp false:

Bước 6: Tạo action "Create file"

Truyền vào biến "varFileName" và "FileContent"

Kết quả

Vậy mình đã tạo ra được file từ thông tin của file PDF, và mã reception no của file là 19876527 và được nối vào chuỗi varHeader 103_M1

Bình luận

Bài viết tương tự

- vừa được xem lúc

MICROSOFT FABRIC – CẦN BIẾT GÌ ĐỂ KHÔNG BỎ LỠ TRONG KỶ NGUYÊN AI?

Trong năm qua, chúng ta đã chứng kiến những trải nghiệm AI mang tính tổng hợp như ChatGPT và Microsoft Copilot đã gây bão trên toàn thế giới. Những trải nghiệm này có khả năng thay đổi cách thức làm v

0 0 2

- vừa được xem lúc

Công phá Power BI | Thực hành thần tốc | Day 01

Power BI PL300 lab 1: Prepare Data in Power BI Desktop. .

0 0 2

- vừa được xem lúc

Triển khai PowerApps trong doanh nghiệp như thế nào

Chắc hẳn mọi người cũng đã nghe qua về Power Apps, một công cụ low code được phát triển từ Microsoft nhưng để hiểu và ứng dụng được vào hệ thống doanh nghiệp thì thật không dễ dàng. Hôm nay, mình xin

0 0 1