同僚が VBA 環境で開発した (ERP システムのユーザーを認証するための) アプローチをコピーし、それを既存の ASP Classic アプリケーションに実装しようとしています。
ERP サプライヤは、アプリケーション用の COM プロバイダを提供しています。ユーザーの ERP 資格情報を提供し、コンポーネントを使用してそれらが有効であることを確認します。
私は同僚のアプローチに従っていると思っていました。有効な資格情報を提供すると機能しますが、無効な資格情報を提供するとアプリケーションがロックされます。
より深く掘り下げると、資格情報が有効な場合、メソッド呼び出しは値を返し、実行は期待どおりに続行されるようです。ただし、資格情報が間違っている場合は、ダイアログ ボックスが表示されます。私の同僚は、このイベントを VBA アプリでトラップし、ダイアログを自動的にキャンセルして、元の呼び出し元の関数に制御を返しました。
VBA コードのサンプル:
Private WithEvents m_oServer As Server
Private Sub m_oServer_RequestCredentials(Identification As String, Password As String, Cancel As Boolean)
'Dialog will appear unless we cancel it
Cancel = True
End Sub
Public Function Check_Logon_Credentials() As Boolean
'starts here
If m_oServer.Invoke("ClientApplication", "IdentifyCurrentUser", m_oResult, sibtRecord) Then
Check_Logon_Credentials = True
Else
Check_Logon_Credentials = False
End If
'Do more stuff
End Function
m_oServer_RequestCredentials はコンポーネントによって公開されたイベント ハンドラーであり、VBA がインターセプトしてダイアログをキャンセルできるようです。
問題は、これを ASP アプリケーションにコピーする方法です。(ダイアログをキャンセルできる) イベント ハンドラーを作成する同様の方法はありますか?
または、ダイアログ ボックスをインターセプトできる別のコンポーネントで、このコンポーネントへの呼び出しをラップする必要がありますか?
他の解決策はありますか?