NX Lab

Xóa thuộc tính theo tên và xóa hàng loạt theo kiểu hoặc tiền tố

#Python#Attribute1 lượt xem

  1. Quản trị viênQuản trị· 0 điểm

    Câu hỏi ·

    Dọn dữ liệu cũ trước khi giao hàng: bỏ thuộc tính tạm, thuộc tính của hệ thống khác. NX cho phép xóa từng thuộc tính, xóa theo kiểu dữ liệu, hoặc ta tự lọc theo tiền tố rồi xóa lần lượt.

    Xóa thuộc tính theo tên và xóa hàng loạt… Xóa thuộc tính theo tên và xóa hàng loạt…

    Các bước thực hiện

    1. Liệt kê thuộc tính. GetUserAttributes().
    2. Lọc theo tiền tố. Ví dụ mọi thuộc tính bắt đầu bằng TMP_.
    3. Xóa từng cái. DeleteUserAttribute(kiểu, tiêu đề, xóa cả mảng, tùy chọn).
    4. Xóa theo kiểu. DeleteUserAttributes(kiểu, tùy chọn) để xóa mọi thuộc tính một kiểu.
    5. Ghi lại điều đã xóa. Log để khôi phục nếu cần.

    Code tham khảo (Python)

    import NXOpen
    
    NGAY = NXOpen.Update.Option.Now
    
    def xoa_theo_tien_to(doi_tuong, tien_to):
        da_xoa = []
        for a in list(doi_tuong.GetUserAttributes()):
            if a.Title.upper().startswith(tien_to.upper()):
                doi_tuong.DeleteUserAttribute(a.Type, a.Title, True, NGAY)
                da_xoa.append(a.Title)
        return da_xoa
    
    def xoa_mot(doi_tuong, tieu_de, kieu=NXOpen.NXObject.AttributeType.String):
        if doi_tuong.HasUserAttribute(tieu_de, kieu, -1):
            doi_tuong.DeleteUserAttribute(kieu, tieu_de, True, NGAY)
            return True
        return False
    
    def main():
        session = NXOpen.Session.GetSession()
        lw = session.ListingWindow
        lw.Open()
        part = session.Parts.Work
        if part is None:
            return
        session.SetUndoMark(NXOpen.Session.MarkVisibility.Visible, "Xoa thuoc tinh")
        lw.WriteLine("Trước: %d thuộc tính" % part.GetUserAttributeCount(NXOpen.NXObject.AttributeType.String))
        da_xoa = xoa_theo_tien_to(part, "TMP_")
        lw.WriteLine("Đã xóa theo tiền tố TMP_: " + (", ".join(da_xoa) or "(không có)"))
        lw.WriteLine("Xóa NGAY_CU: " + str(xoa_mot(part, "NGAY_CU")))
    
    if __name__ == "__main__":
        main()
    

    Giải thích code

    • Lấy bản sao danh sách bằng list(...) trước khi xóa để không sửa tập đang duyệt.
    • Tham số thứ ba True xóa cả mảng nếu thuộc tính là mảng.
    • GetUserAttributeCount(kiểu) đếm số thuộc tính của một kiểu, tiện để báo số lượng trước-sau.

    Lỗi thường gặp

    • Xóa thuộc tính không có Undo trên mọi loại đối tượng; đặt Undo Mark và sao lưu file trước khi xóa hàng loạt.
    • Thuộc tính bị khóa (locked) không xóa được; mở khóa trước nếu có quyền.

    Code mang tính tham khảo, viết cho NX 12 trở lên (Python journal). Tên menu và một số lớp có thể khác theo phiên bản NX; hãy chạy thử trên bản sao của chi tiết trước khi dùng cho dữ liệu thật.

    Điểm: 0

Trả lời

Đăng nhập để tham gia thảo luận.