
Khóa và mở khóa thuộc tính bằng SetUserAttributeLock để người dùng không sửa nhầm
#Python#Attribute1 lượt xem
Quản trị viênQuản trị· 0 điểm
Câu hỏi ·
Mã vật tư và revision do hệ thống cấp không nên để ai sửa tay. Thuộc tính khóa vẫn đọc được nhưng chỉnh sửa bị chặn trong giao diện, giúp giữ dữ liệu chuẩn.
Khóa và mở khóa thuộc tính bằng…Các bước thực hiện
- Chọn thuộc tính cần khóa. Danh sách tiêu đề.
- Gọi SetUserAttributeLock. Tiêu đề, kiểu, True/False.
- Kiểm tra. GetUserAttributeLock.
- Mở khóa khi cần sửa. Mở, sửa, khóa lại.
- Báo cáo. Trạng thái từng thuộc tính.
Code tham khảo (Python)
import NXOpen KIEU = NXOpen.NXObject.AttributeType NGAY = NXOpen.Update.Option.Now CAN_KHOA = [("MA_VAT_TU", KIEU.String), ("REV", KIEU.String)] def khoa_tat_ca(part, khoa=True): ket_qua = [] for ten, kieu in CAN_KHOA: if part.HasUserAttribute(ten, kieu, -1): part.SetUserAttributeLock(ten, kieu, khoa) ket_qua.append((ten, part.GetUserAttributeLock(ten, kieu))) return ket_qua def sua_thuoc_tinh_da_khoa(part, ten, gia_tri_moi): kieu = KIEU.String da_khoa = part.GetUserAttributeLock(ten, kieu) if da_khoa: part.SetUserAttributeLock(ten, kieu, False) try: part.SetUserAttribute(ten, -1, gia_tri_moi, NGAY) finally: if da_khoa: part.SetUserAttributeLock(ten, kieu, True) def main(): session = NXOpen.Session.GetSession() lw = session.ListingWindow lw.Open() part = session.Parts.Work if part is None: return for ten, trang_thai in khoa_tat_ca(part, True): lw.WriteLine("%-12s khóa = %s" % (ten, trang_thai)) sua_thuoc_tinh_da_khoa(part, "REV", "B") lw.WriteLine("Đã đổi REV sang B (và khóa lại)") if __name__ == "__main__": main()Giải thích code
- Khóa là cờ trên thuộc tính; script vẫn mở khóa để sửa khi có quyền, rồi khóa lại trong
finally. - Hàm
sua_thuoc_tinh_da_khoanhớ trạng thái cũ để chỉ khóa lại nếu trước đó đã khóa. GetUserAttributeLockcho biết trạng thái khóa hiện tại.
Lỗi thường gặp
- Khóa chỉ là rào chắn mềm: script khác vẫn mở khóa được; quản lý phân quyền thật bằng hệ thống PDM.
- Thuộc tính chưa tồn tại không khóa được; kiểm tra bằng
HasUserAttributenhư code trê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.