2017-05-04 12 views
1


私はすべてのアクティブのフォームから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) -possible-to-kill-ax-user-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)を取得する方法は? 2番目のwinapiはクライアントサイトで実行されている必要があります何かを行うには、サーバーからクライアントにコマンドを送信することは可能ですか? – neuser

+0

このリンクは、 'SysSetupFormRun'クラスを変更することによって、すべてのウィンドウハンドルがグローバルキャッシュに格納されることを提案しています。しかし私は 'WinAPI'呼び出しが別のマシン上で動作するかもしれない別のクライアント上で走っているウィンドウのために働くとは思っていません。 –

+1

私はあなたが2つの事のうちの1つをしなければならないと思います。クライアントがウィンドウを閉じる必要があるかどうかを確認するか、クライアントにイベントを送信してそのアクションをトリガーする必要があります。 'EventInbox'はおそらくポーリングや物事の設定があるからといって、どうにかしてフックするのが最も理にかかります。あなたが望んでいた1行の解決策がないようです。 –

関連する問題