1

同僚が 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 アプリケーションにコピーする方法です。(ダイアログをキャンセルできる) イベント ハンドラーを作成する同様の方法はありますか?

または、ダイアログ ボックスをインターセプトできる別のコンポーネントで、このコンポーネントへの呼び出しをラップする必要がありますか?

他の解決策はありますか?

4

1 に答える 1

0

純粋なサーバー側の ASP クラシック コードでイベントを処理することはできません。これらのタイプのイベントはクライアント側の VBScript で処理する必要がありますが、残念ながらクライアント側の VBScript は Internet Explorer でしか機能しません。クライアント側 VBScriptのサンプル コードは次のとおりです。

<script language="VBScript">
    function mybutton_OnClick()
        answer = MsgBox("2+2=4?",vbYesNo,"Math Test")
        if answer=vbYes then
            MsgBox "Congratulations!",vbOkOnly+vbInformation,"True!" 
        else
            MsgBox "Go learn Math!",vbOkOnly+vbCritical,"Wrong!" 
        end if
    end function
</script>
<input type="button" value="Math Test" name="mybutton">

上記のコードをコピーしてメモ帳に貼り付け、「.html」ファイルとして保存し、IE で開くことができます。

于 2012-07-08T09:06:47.577 に答える