2013-10-17 14 views
6

Bất kỳ ai cũng có bất kỳ mẹo/đoạn mã nào để ngăn nhiều hơn một bản sao của biểu mẫu X ++ tùy chỉnh được mở cùng một lúc?Dynamics AX 2012 Chỉ một bản sao của biểu mẫu Mở

trường hợp xuất sắc nhất: Cố gắng để mở một bản sao của mẫu đơn, và những lợi ích ban đầu tập trung

chấp nhận: Người dùng sẽ nhận được một thông báo rằng hình thức đã được mở

Trả lời

10

bạn có thể chèn các mã dưới đây vào hình thức của init phương pháp. Nếu bạn có bất kỳ câu hỏi nào về mã, đừng ngần ngại hỏi!

public void init() 
{ 
    #define.CACHE_OWNER  ('MyForm') 
    #define.CACHE_KEY_INSTANCE ('Instance') 

    FormRun existingForm() 
    { 
     ; 

     if (infolog.globalCache().isSet(#CACHE_OWNER, #CACHE_KEY_INSTANCE)) 
     { 
      return infolog.globalCache().get(
       #CACHE_OWNER, #CACHE_KEY_INSTANCE); 
     } 
     return null; 
    } 

    void registerThisForm() 
    { 
     ; 

     infolog.globalCache().set(#CACHE_OWNER, #CACHE_KEY_INSTANCE, this); 
    } 

    boolean isAlreadyOpened() 
    { 
     ; 

     return existingForm() ? !existingForm().closed() : false; 
    } 

    void activateExistingForm() 
    { 
     ; 

     existingForm().activate(true); 
    } 
    ; 

    super(); 
    if (isAlreadyOpened()) 
    { 
     activateExistingForm(); 
     this.close(); 
    } 
    else 
    { 
     registerThisForm(); 
    } 
} 
+1

Điều này hoạt động tốt. Tôi đã phải thay đổi phương thức kích hoạt thành element.existingForm(). SetActive(); Lệnh activate() không mang biểu mẫu gốc về phía trước. Cám ơn rất nhiều! – Brad

0

Thêm mã sau vào phương thức init của biểu mẫu như sau. Không có thay đổi nào khác.

public void init() 
{ 
    #define.CACHE_OWNER('MyForm') 
    int hWnd; 

    super(); 

    if (infolog.globalCache().isSet(#CACHE_OWNER, curUserId())) 
    { 
     hWnd = infolog.globalCache().get(#CACHE_OWNER, curUserId()); 
    } 

    if (WinApi::isWindow(hWnd)) 
    { 
     element.closeCancel(); 
     WinAPI::bringWindowToTop(hWnd); 
    } 
    else 
    { 
     infolog.globalCache().set(#CACHE_OWNER, curUserId(), element.hWnd()); 
    } 
} 
Các vấn đề liên quan