Xuất thông số kỹ thuật dựa trên mẫu Microsoft Word (cập nhật tháng 11)

Đây là một tính năng cũ mà chúng tôi không còn tích cực hỗ trợ nữa, và một số ảnh chụp màn hình cũng như video bên dưới có thể đã lỗi thời.

Quy trình này vẫn có thể được sử dụng để kiểm soát tốt hơn khi xuất dữ liệu dự án sang tài liệu Word.

Trước khi sử dụng quy trình bên dưới, vui lòng cân nhắc dùng chức năng Document Export tích hợp sẵn của chúng tôi. Chúng tôi sẵn sàng hỗ trợ bạn về công cụ Exporter tích hợp này trên Altium Support Page.

Bằng cách tận dụng Python & Rest API của Requirements & Systems Portal, vốn cho phép truy cập đầy đủ vào toàn bộ dữ liệu, và kết hợp với chức năng Merge Fields của Microsoft Word, bạn có thể xuất Requirements Specifications sang tài liệu Word chỉ với một cú nhấp chuột. Tính năng này cho phép bạn chọn những trường yêu cầu nào sẽ được đưa vào tài liệu và cách sắp xếp chúng.

Merge Fields và Template

Merge Fields được dùng làm tham chiếu đến một trường dữ liệu thông qua tên của trường đó. Khi một tài liệu mẫu được mail merge với các giá trị từ một nguồn dữ liệu, thông tin của trường dữ liệu sẽ thay thế merge field tương ứng.

Bằng cách tạo một tài liệu mẫu với các Merge Field khác nhau, bạn có thể nhanh chóng tạo ra cùng một loại tài liệu đầu ra (đặc tả hoặc loại khác) dựa trên chúng.

Tạo một merge field mới

  1. Mở tài liệu bạn muốn chỉnh sửa và chuyển đến tab Insert.

  2. Mở menu Quick Partd và chọn Field. Hộp thoại Field sẽ mở ra.

  3. Trong menu hộp thoại field, chọn Merge Field từ danh sách ở phía bên trái. Nhập tên merge field vào ô văn bản Field name ở phía bên phải và nhấp OK.
    Mẹo: Đặt tên field dựa trên dữ liệu mà bạn muốn nó được thay thế để dễ theo dõi hơn

  4. Merge field sẽ được chèn vào tệp Word. Đối tượng này sẽ được tô xám nếu bạn nhấp vào nó.

Các merge field đã có sẵn hàm Python tương ứng là:

«req_id» - Mã định danh yêu cầu
«req_title» - Tiêu đề yêu cầu
«req_text» - Nội dung yêu cầu
«req_state» - Trạng thái yêu cầu 
«req_type» - Loại yêu cầu
«req_rationale» – Phần giải thích/lý do liên quan đến yêu cầu 
«images» – Hình ảnh được đính kèm với yêu cầu
«specification_name» - Bản đặc tả chứa yêu cầu
«section_name» - Phần chứa yêu cầu
«req_compliance» - (Các) tuyên bố tuân thủ của yêu cầu
«req_comp_comment» - Nhận xét về tuân thủ của yêu cầu
«req_owner» - Người phụ trách yêu cầu 
«req_applicability» - Phạm vi áp dụng của yêu cầu
«req_ver_methods» - Phương pháp xác minh của yêu cầu
«req_ver_m_text» - Nhận xét về phương pháp xác minh của yêu cầu
«req_ver_closeout_ref» - Tham chiếu hoàn tất của phương pháp xác minh yêu cầu
«req_ver_status» - Trạng thái phương pháp xác minh của yêu cầu

Có thể thêm URL vào các trường này, ví dụ như thêm URL trong “Requirement Identifier” để trỏ đến vị trí của yêu cầu trong Requirements & Systems Portal.

Tạo Template (để nhân bản template)

Có thể sử dụng kết hợp các Merge Field để tạo các tệp template dùng cho việc tạo tài liệu Specification.

Một ví dụ về template được minh họa bên dưới, trong đó một số field được viết dưới dạng “văn bản thuần”, còn những field khác là một phần của bảng. Ví dụ này là ví dụ cơ sở cho các script Python sẽ được mô tả ở phần tiếp theo.

Hiện tại, Generic Template và Generic Script được chuẩn bị để điền vào các tài liệu Specification bằng cách nhân bản template cho từng yêu cầu, nhưng cũng có thể điền template chỉ một lần hoặc, đối với bảng, dùng nhiều dòng cho mỗi bảng (tương tự như các bảng trong Requirements & Systems Portal hoặc các bảng Excel truyền thống hơn)

Nếu bạn định nghĩa các Style khác nhau cho từng Merge Field, thì bạn có thể thay đổi chúng trong tài liệu cuối cùng và sự thay đổi sẽ được áp dụng cho toàn bộ tài liệu. Ví dụ, nếu định nghĩa một style cho Requirement Identifier thì style đó sẽ được áp dụng cho tất cả các yêu cầu trong tài liệu cuối cùng.

Kết quả đầu ra của template này sẽ trông tương tự như hình bên dưới

Python Script để điền dữ liệu vào Template

Script Python được dùng để tạo tài liệu dựa trên một template có chứa merge field dựa trên các gói chính sau:

  • valispace - Python API của Requirements & Systems Portal cho phép bạn truy cập và cập nhật các đối tượng trong Requirements & Systems Portal.

  • docx-mailmerge2 - Thực hiện Mail Merge (thay thế các merge field bằng dữ liệu mong muốn) trên các tệp Office Open XML (Docx) và có thể dùng trên bất kỳ hệ thống nào mà không cần cài đặt Microsoft Office Word.

  • python-docx - Thư viện Python để tạo và cập nhật tệp Microsoft Word (.docx).

  • htmldocx - Thư viện Python để chuyển HTML sang Docx. Được dùng để giữ nguyên định dạng từ Requirements & Systems Portal sang Word (đậm, nghiêng, danh sách bullet…)

Mã nguồn được chia thành 3 loại hàm:

  • Master functions - Bao gồm các hàm maincreate_specification_document, chứa logic để xuất các yêu cầu vào tài liệu cuối cùng bằng cách điền dữ liệu vào template đã cho

  • Requirement data extract functions- Là tất cả các hàm dùng để trích xuất dữ liệu yêu cầu như loại yêu cầu, trạng thái, hình ảnh…

  • Document "Format" functions- Các hàm thực hiện định dạng như loại bỏ khoảng trắng, đảm bảo bảng không bị ngắt quãng trong tài liệu cuối cùng được tạo ra

Trong tiểu mục sau, chúng tôi sẽ giải thích ngắn gọn các hàm này.

Master Functions - Main

Hàm này cho phép người dùng nhập tên miền, tên người dùng và mật khẩu, mã định danh dự án để tạo các bản đặc tả, cùng với đường dẫn đến tệp Template

Sau đó, hàm sẽ dùng thông tin này để:

  1. Đăng nhập vào Requirements & Systems Portal bằng Python API;

  2. Tải xuống dữ liệu chung của dự án như specification, hình ảnh, loại yêu cầu và các dữ liệu khác;

  3. Gọi hàm create_specification_documentcho từng specification trong dự án đã chọn.

Master Functions - Create_specification_document

Các hàm này sẽ tạo tệp specification bằng cách điền dữ liệu yêu cầu tương ứng vào các Merge Field trong template.

Ban đầu, cần thu thập tất cả yêu cầu của specification đã chọn:

all_specification_requirements = get_map(api, f"requirements/complete/?project="+str(DEFAULT_VALUES["project"])+"&clean_html=text&clean_text=comment", "id", None, filter_specification)
    if len(all_specification_requirements) <1:
        print("No requirements for Specification -> "+ specification_data['name'])
        return

Sau đó, hàm sẽ sắp xếp dữ liệu yêu cầu theo từng section, bắt đầu với các yêu cầu không thuộc section nào.

Để lấy các yêu cầu không thuộc section này, hàm hỗ trợ get_requirements_without_section được dùng để lọc tất cả yêu cầu của specification không có group (cách section được lưu trong backend của Requirements & Systems Portal) và sắp xếp chúng theo thứ tự alphabet.

    #1st we will add requirements without section to the document
    no_section_requirements = get_requirements_without_section(all_specification_requirements)

Bây giờ khi tất cả yêu cầu không thuộc section đã được thu thập, đã đến lúc chuẩn bị dữ liệu sẽ điền vào các merge field. Dữ liệu này được lấy với sự trợ giúp của Requirement data extract functions và sẽ được lưu trong danh sách Python như minh họa trong đoạn mã dưới đây.

template_data.append({
                "specification_name" :  CURRENT_SPECIFICATION["name"] if counter == 1 else "",
                "section_name" :  "", 
                "req_id" :  reqdata['identifier'],
                "req_title" : reqdata['title'],
                "req_text" : reqdata['identifier']+"_docx",
                "req_type" : req_type,
                "req_rationale" :  reqdata['comment'],
                "req_ver_methods" :  req_vms,
                "req_applicability" :  req_applicability, 
                "images" :  "Images_Placeholder_"+str(requirement) if requirement_with_images == True else "No_Images"
            })

Đối với phần lớn các merge field, dữ liệu được ánh xạ trực tiếp, nhưng với imagesreq_text thì dữ liệu sẽ được merge ở giai đoạn sau:

  • Đối với images, một cờ cho biết yêu cầu có hình ảnh hay không sẽ được lưu lại dưới dạng dữ liệu

  • Đối với req_text, một placeholder được lưu lại dưới dạng dữ liệu. Placeholder này cũng sẽ được dùng làm Key trong một danh sách chứa kết quả của việc phân tích nội dung yêu cầu từ HTML sang Word như trong đoạn mã dưới đây

    docx_list[reqdata['identifier']+"_docx"] = new_parser.parse_html_string(reqdata['text'])

Quy trình tương tự sẽ được lặp lại cho các yêu cầu có section, và sau khi hoàn tất, dữ liệu sẽ được merge vào các field của template và lưu thành một tệp mới:

document.merge_templates(template_data, separator='continuous_section')
document.write(OUTPUT_FILE)

Cuối cùng, chúng tôi sẽ dùng Document "Format" functions để hoàn thiện tài liệu bằng cách xóa các section trống và tiêu đề trống, giữ bảng trên cùng một trang, chèn nội dung văn bản đã định dạng của yêu cầu và hình ảnh của chúng vào tài liệu

    document2 = Document(OUTPUT_FILE)
    remove_all_but_last_section(document2)
    remove_all_empty_headings(document2)
    put_html_text(document2, docx_list)
    put_images(document2, all_project_images)   
    keep_tables_on_one_page(document2)

    document2.save(OUTPUT_FILE)
    print ("Specification document created -> "+ specification_data['name'])

Các hàm trích xuất dữ liệu yêu cầu

Các hàm hiện có để trích xuất dữ liệu từ yêu cầu như sau:

  • get_requirements_without_section - Trả về danh sách đã sắp xếp của tất cả yêu cầu không thuộc section

  • get_specification_sections - Trả về danh sách tất cả section của specification đã cho

  • get_section_requirements - Trả về danh sách đã sắp xếp của tất cả yêu cầu trong section đã cho

  • get_requirement_images - Trả về một mảng chứa tất cả hình ảnh của yêu cầu

  • get_requirement_type - Trả về tên của loại yêu cầu

  • get_requirement_state - Trả về tên của trạng thái yêu cầu

  • get_requirement_owner - Trả về các User Group và họ tên của người phụ trách yêu cầu

  • get_requirement_applicability - Trả về danh sách tất cả Block Type áp dụng cho yêu cầu, được phân tách bằng dấu “;”

  • get_requirement_verification_methods - Trả về tên của tất cả phương pháp xác minh của yêu cầu, được phân tách bằng dấu “;”

  • get_requirement_verification_methods_newline - Trả về tên của tất cả phương pháp xác minh của yêu cầu, được phân tách bằng ký tự xuống dòng

  • get_requirement_verification_methods_comments - Trả về tất cả nhận xét của phương pháp xác minh yêu cầu, được phân tách bằng hai ký tự xuống dòng

  • get_requirement_verification_status - Trả về trạng thái của tất cả các Verification Method của requirement, được phân tách bằng dấu “;”

  • get_requirement_verification_closeout_refs - Trả về tên các tham chiếu closeout cho từng Verification Method của requirement, được phân tách bằng dấu “;”

  • get_requirement_attachments_references - Trả về tên của tất cả các tệp đính kèm của requirement, được phân tách bằng dấu “;”

  • get_requirement_custom_field - Trả về giá trị của một Custom Field cụ thể trên requirement, được truyền vào như một đối số cho hàm

Các hàm "Format" của tài liệu

Các hàm được dùng để định dạng tài liệu cuối cùng như sau:

  • keep_tables_on_one_page - Định dạng tài liệu cuối cùng để không cho phép nội dung ô của bảng trải dài qua các trang khác nhau.

  • remove_all_empty_headings - Định dạng tài liệu cuối cùng để xóa tất cả các tiêu đề trống

  • remove_all_but_last_section - Định dạng tài liệu cuối cùng để chỉ có một section thay vì nhiều section

  • put_images - Thay thế chỗ giữ chỗ của hình ảnh bằng hình ảnh của từng requirement

  • clone_run_props - hàm phụ trợ để sao chép các thuộc tính của một run sang run khác (dùng để sao chép thuộc tính của văn bản được định dạng HTML)

  • put_html_text - Thay thế chỗ giữ chỗ của văn bản requirement bằng văn bản đã được định dạng tương ứng, chẳng hạn như in đậm, in nghiêng, gạch chân, gạch ngang và danh sách đầu dòng

Tải xuống Generic Template, Python Script hoặc tệp Executable mới nhất

 

Generic Specification Creation Nov2023.py Generic Specification Template.docx requirements.txt

Người dùng có thể chạy python script trong “Scripting module” của Requirements & Systems Portal. Sao chép mã từ tệp .py và dán vào một python script mới trong scripting module.

Script này cũng có thể sao chép các bảng trong văn bản requirement cùng với các định dạng được dùng trong văn bản.

Những nội dung cần chỉnh sửa trước khi chạy script:

Toàn bộ quy trình chạy đoạn mã này, từ việc tạo script đến tạo tài liệu, đã được minh họa trong video bên dưới (không có âm thanh).
 



Line 27 - Line 30 Người dùng cần xác định Username và Password để script chạy. Người dùng có thể sử dụng secret management để chạy script hoặc nhập trực tiếp Username và Password vào script. Tuy nhiên, password sẽ hiển thị với tất cả người dùng trong deployment. Vì vậy, chúng tôi khuyến nghị bạn sử dụng “Secrets Management”.

Line 31 Sao chép tên của đặc tả và nhập vào dòng này.

Line 32 Tải Generic specification template lên file management, sao chép “ID” của nó và thêm vào dòng này.

Line 33 Thêm “ID” của project chứa đặc tả.

Line 34 Bạn có thể đặt tên cho tài liệu được xuất ra.

Trong trường hợp bạn cần hướng dẫn về cách thay đổi template, trích xuất thông tin khác để điền vào template của mình, hoặc có bất kỳ câu hỏi nào liên quan đến tính năng này, vui lòng gửi câu hỏi/yêu cầu cho chúng tôi qua Trang Hỗ trợ Altium.

AI-LocalizedAI-localized
If you find an issue, select the text/image and pressCtrl + Enterto send us your feedback.
Feature Availability

The features available to you depend on which Altium solution you have – Altium Develop, an edition of Altium Agile (Agile Teams or Agile Enterprise), or Altium Designer (on active term).

If you don’t see a discussed feature in your software, contact Altium Sales to find out more.

Nội dung