2012-05-10 54 views
1

我試圖複製一個同事在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應用程序中 - 是否有類似的方式創建事件處理程序(可以取消對話框)?

或者我將不得不將這個組件的調用包裝到另一個組件中,其中可以通過攔截對話框?

其他解決方案?

+0

也許你可以從經典的asp與WScript.Shell對象運行該vba/windows腳本,然後用WScript.Shell的exec方法捕獲返回代碼? (未測試過) – ulluoink

+0

問題是,此代碼正在服務器上運行,因此不會有用戶交互。我需要以某種方式處理事件,所以我可以阻止嘗試打開對話框。 – CJM

+0

是的,因此你可以嘗試在服務器上運行那個vbs(這可以防止打開對話框,因爲我瞭解它)與wscript.shell對象。 – ulluoink

回答

0

您無法使用純服務器端asp經典代碼處理事件。您需要使用客戶端VBScript處理這些類型的事件,但不幸的是,客戶端VBScript僅適用於Internet Explorer。這裏是client-side 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瀏覽器中打開它。