NX Lab

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

  1. 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… Khóa và mở khóa thuộc tính bằng…

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

    1. Chọn thuộc tính cần khóa. Danh sách tiêu đề.
    2. Gọi SetUserAttributeLock. Tiêu đề, kiểu, True/False.
    3. Kiểm tra. GetUserAttributeLock.
    4. Mở khóa khi cần sửa. Mở, sửa, khóa lại.
    5. 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_khoa nhớ trạng thái cũ để chỉ khóa lại nếu trước đó đã khóa.
    • GetUserAttributeLock cho 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 HasUserAttribute như 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.