2017-05-04 66 views
1


我正在尋找一種方法來關閉所有活動的表格從一個不同的用戶,像一個功能終止。Dynamics ax 2009:如何關閉不同用戶的表單?

SysClientSessions sys; 
xSession ses 
; 

select firstonly sys where sys.UserId == 'some user'; 
ses = new xSession(sys.SessionId); 
ses.terminate(); // in here client of 'some user' will be closed 
+0

不知道你能直接影響這樣不同的用戶會話,但不同的想法可能是定製'SysSetupFormRun'類不斷例如檢查在一個條目的新表中(例如字段'UserId'和'FormName'),並且如果找到一個條目,表單自動關閉。您可能想要給用戶一個超時警告。 –

+0

這個例子正在工作。在SysSetupFormRun中,我可以檢查用戶是否運行過一個窗體並且什麼都不做? – neuser

+0

AX有一個選項可以在會話空閒一段時間後終止會話([如何在Microsoft Dynamics AX中設置自動註銷](http://msdynamicsaxtips.blogspot.de/2014/07/is-it - 可能就殺-AX-用戶session.html))。我沒有看過它,但也許有些東西可以用來檢測您的目的是否無所事事。 –

回答

0

如果知道用戶的形態hWnd您可以通過關閉它:

WinAPI::sendMessageEx(hWnd, #WM_CLOSE, 0, 0);

所以,你需要拿出獲取用戶的形式的方法。你可以做同樣的事情到這一點:如果

http://sinedax.blogspot.com/2015/12/ax-2012-close-open-forms.html

+0

如何獲取不同用戶表單的句柄(hwnd)?第二winapi必須在客戶端網站上運行,是否可以發送命令從服務器到客戶端做一些事情? – neuser

+0

鏈接建議通過修改'SysSetupFormRun'類來將所有窗口句柄存儲在全局緩存中。但我不認爲'WinAPI'調用將適用於另一臺可能在另一臺機器上運行的客戶端上運行的窗口。 –

+1

我認爲你必須做兩件事之一。客戶可能會主動檢查是否需要關閉窗口,或者您必須向客戶端發送事件以觸發該操作。 EventInbox的東西可能會以某種方式進入最有意義的狀態,這是因爲它已經進行了輪詢和事物設置。看起來似乎沒有您希望的單線解決方案。 –

相關問題