我試圖複製一個同事在VBA環境中開發的方法(用於驗證我們的ERP系統的用戶),並在現有的ASP Classic應用程序中實現它。COM組件打開對話框 - 如何在ASP經典中處理
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應用程序中 - 是否有類似的方式創建事件處理程序(可以取消對話框)?
或者我將不得不將這個組件的調用包裝到另一個組件中,其中可以通過攔截對話框?
其他解決方案?
也許你可以從經典的asp與WScript.Shell對象運行該vba/windows腳本,然後用WScript.Shell的exec方法捕獲返回代碼? (未測試過) – ulluoink
問題是,此代碼正在服務器上運行,因此不會有用戶交互。我需要以某種方式處理事件,所以我可以阻止嘗試打開對話框。 – CJM
是的,因此你可以嘗試在服務器上運行那個vbs(這可以防止打開對話框,因爲我瞭解它)與wscript.shell對象。 – ulluoink