COM组件打开对话框-如何在ASP Classic中处理

COM组件打开对话框-如何在ASP Classic中处理,com,asp-classic,event-handling,Com,Asp Classic,Event Handling,我试图复制一种方法来验证我们的ERP系统的用户,该方法是一位同事在VBA环境中开发的,并在现有的ASP经典应用程序中实现 ERP供应商为其应用程序提供了COM提供商。我们提供用户的ERP凭据,并使用组件确认其有效性 我以为我是在遵循同事的方法,当我提供有效凭据时,它确实起作用,但当我提供无效凭据时,它会锁定应用程序 更深入地说,如果凭据有效,则方法调用将返回一个值,并按预期继续执行。但如果凭据错误,则会出现一个对话框。我的同事在他的VBA应用程序中捕获了这个事件,自动取消了对话框,该对话框将控制

我试图复制一种方法来验证我们的ERP系统的用户,该方法是一位同事在VBA环境中开发的,并在现有的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经典代码处理事件。您需要使用客户端VBScript处理这些类型的事件,但不幸的是,客户端VBScript仅适用于internet explorer。以下是的示例代码:


您可以复制上面的代码并将其粘贴到记事本中,另存为.html文件,然后在IE中打开它。

也许您可以使用WScript.Shell对象从经典asp运行vba/windows脚本,然后使用WScript.Shell的exec方法捕获返回代码?未测试问题是此代码在服务器上运行,因此不可能有用户交互。我需要以某种方式处理该事件,这样我才能阻止打开对话框的尝试。是的,因此您可以尝试在服务器上运行vbs,这会阻止对话框打开,正如我使用wscript.shell对象所理解的那样。我实际上找到了一种使用组件“静默”的方法,因此我的问题得到了解决。然而,这个问题是关于在ASP Classic中处理事件的,所以我暂时不讨论它。
<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">