2016-06-01 18 views
0

Ich habe ein sehr seltsames Problem mit einem VBScript: Es funktioniert gut, abhängig von dem Server, wo das Web befindet.VBScript läuft nicht abhängig vom Webserver

Ich habe die gleiche Webanwendung auf zwei Servern mit IIS 7.5. In jedem Server ist der Code genau gleich.

Das VBScript führt einige Excel-Zeilen aus und es aktualisiert einige Informationen in der Webanwendung. Das Problem tritt auf, wenn diese Informationen aktualisiert werden. In einem der Server, gibt es kein Problem, aber in der anderen, erhalte ich den Fehler unten:

Error running the script

Wie das Skript, wie es läuft tun würde, ich denke, es gibt keine Syntaxfehler

Der Code den Fehler zu werfen ist:

With objIE 
    If (testing) Then 
     .Navigate URLtesting 
    Else 
     .Navigate URL 
     WScript.Sleep 2000 
    End If 

    WaitWebLoad() 
    .document.getElementById(user).Value = userScript 
    .document.getElementById(password).Value = passwordScript 
    .document.getElementById(logInButton).Click() 
    WaitWebLoad() 
    .document.getElementByID(loretoLink).Click() 
    WaitWebLoad() 
    .document.getElementByID(updatePLLink).Click() 
    WaitWebLoad() 

    Do 
     lastRow = activeSheet.Cells(rowIndex, columnPL_ID).Value 
     dateAssociated = activeSheet.Cells(rowIndex, columnArrivalDate).Value 
     concesion = activeSheet.Cells(rowIndex, columnConcesion).Value 
     If lastRow <> "" Then 
      .document.getElementByID(searchPL_TB).Value = lastRow 
      .document.getElementByID(searchPL_Button).Click() 
      WaitWebLoad() 
      If (Not (.document.getElementByID(errorLookingPL)) Is Nothing Or Not (.document.getElementByID(noSearchResult) Is Nothing)) Then 
       'PL not found 
       recordsNotFound = recordsNotFound + 1 
       WriteOpenFileText(logFilePath), (Now & vbTab & "***PL not found: " & lastRow & " - [" & dateAssociated & "]" & " - " & concesion & vbCrLf) 
      Else ... 

die Zeilennummer 295 ist:

If (Not (.document.getElementByID(errorLookingPL)) is Nothing Or Not (.document.getElementByID(noSearchResult) is Nothing)) Then 

Die WaitWebLoad Funktionscode ist:

Function WaitWebLoad() 
    Dim timer 
    timer = 0 

    With objIE 
     Do While .Busy 
      If timer < timerWebLoad Then 
       WScript.Sleep 100 
       timer = 100 
      Else 
       'Error loading the web 
       objExcel.Workbooks.close 
       objExcel.quit 
       objIE.quit 
       DeleteFile(pathTemp) 
       endScriptStamp = Now 

       WScript.Echo("Error." & vbCrLf & "Total runtime is: " & DateDiff("s", startScriptStamp, endScriptStamp) & " seconds.") 
       WScript.quit 
      End If 
     Loop 
    End With 
End Function 

Ich denke, das Problem ist, dass das Skript, wenn der Server ausgeführt wird, wo der Fehler auftritt, verliert das objIE Objekt, aber ich weiß nicht, warum es immer nur in einem der Server verloren.

+0

Ich bin mir nicht sicher, was IIS damit zu tun hat, Code Ihres Laufes VBS, die clientseitige * ist (der Server in diesem Fall des Kunde sein) *, es keinen Einfluss auf IIS hat so weit wie Ich kann es sehen?? – Lankymart

+1

Es ist wahrscheinlich, dass auf keinem der Server Excel oder zumindest die COM-Komponenten installiert sind. In beiden Fällen müssen Sie ein Debugging durchführen, um herauszufinden, welches Objekt nicht festgelegt ist. – Lankymart

+0

@Lankymart Es ist korrekt. Der Server hat damit nichts zu tun: Das Skript ist wie eine Person, die einige Aktionen in einer Webanwendung ausführt. Aber abhängig von dem Server, den ich auf die Web-App zugreife, funktioniert es gut oder nicht. Der Server muss nicht über Excel oder die COM-Komponenten verfügen, denn wenn ich auf das Web zugreifen, das sich auf dem Server befindet, auf dem das Skript ausgeführt wird, ist die Webanwendung durch menschliche Interaktion vollständig nützlich. – Carlos

Antwort

1

getElementById Die Methode gibt die erste Objekt mit demselben ID Attribut als der festgelegte Wert oder null wenn die id nicht gefunden werden kann. Referenz: .NET Framework und Document Object Model (DOM).
Auf der anderen Seite, Is operator vergleicht zwei Objekt Referenzvariablen und Null ist kein Objekt; Es zeigt an, dass eine Variable keine gültigen Daten enthält.
Außerdem verwendet, wenn in VBScript, getElementById Methode könnte 800A01A8 (= dezimal -2146827864) Microsoft VBScript-Laufzeitfehler erhöhen: Object required verwendet, wenn sie unsachgemäß: zum Beispiel, wie Sie Set objAny = Null nicht schreiben können!

Hier ist eine Abhilfe:

On Error Resume Next            ' enable error handling 
    Set oerrorLookingPL = .document.getElementByID(errorLookingPL) ' try 
    If Err.Number <> 0 Then Set oerrorLookingPL = Nothing   ' an error occurred? 
    Err.Clear 
    If Vartype(oerrorLookingPL) = 1 Then Set oerrorLookingPL = Nothing ' Null => Nothing 
    Set onoSearchResult = .document.getElementByID(noSearchResult) 
    If Err.Number <> 0 Then Set onoSearchResult = Nothing 
    Err.Clear 
    If Vartype(onoSearchResult) = 1 Then Set onoSearchResult = Nothing 
On Error Goto 0             ' disable error handling 
If (Not (oerrorLookingPL Is Nothing) Or Not (onoSearchResult Is Nothing)) Then 

ich nicht immer condition-True gegeben auswertet weltweite Nutzung von On Error Resume Next als If condition Then … Aussage empfehlen kann, wenn ein Laufzeitfehler, während es beim nächsten Beispiel Auswertung stattfindet, finden Sie unter:

On Error Resume Next 
' show Variant subtype information about Null and Nothing 
Wscript.Echo VarType(Null) & " Null " & TypeName(Null) 
Wscript.Echo VarType(Nothing) & " Nothing " & TypeName(Nothing) 
' all conditions as well as their negations are evaluated to `True` 
if  (Null = Nothing) then Wscript.Echo "  Null = Nothing" 
if NOT (Null = Nothing) then Wscript.Echo "not (Null = Nothing)" 
if  (Null is Nothing) then Wscript.Echo "  Null is Nothing" 
if NOT (Null is Nothing) then Wscript.Echo "not (Null is Nothing)" 
' show runtime error 
On Error GoTo 0 
if  (Null is Nothing) then Wscript.Echo "  Null is Nothing" 

Sowohl Null = Nothing als auch Null is Nothing Bedingungen werden zu True ausgewertet, sowie deren Negationen!

==> cscript D:\VB_scripts\SO\37563820.vbs 
1 Null Null 
9 Nothing Nothing 
    Null = Nothing 
not (Null = Nothing) 
    Null is Nothing 
NOT (Null is Nothing) 
==> D:\VB_scripts\SO\37563820.vbs(12, 1) Microsoft VBScript runtime error: Object required 
+0

Warum der Verweis auf .NET-Methoden? Auch wo in den OPs Code haben sie sogar versucht, "Null" zu vergleichen? Ich bin mir nicht ganz sicher, was Sie mit der Frage anfangen. Fehlende Objektreferenzen sind in der Regel auf Abhängigkeiten * (COM etc.) * Zurückzuführen, die nicht in der Umgebung festgelegt sind. Das OP sagt sogar, dass es an einem und nicht am anderen arbeitet. Worum geht es also? – Lankymart

+0

@Lankymart _wo im OPs-Code haben sie sogar versucht, 'Null' zu vergleichen? _ Was auch immer' .document.getElementByID (...) 'in der Zeilennummer 295 _must_ return' Null': Beachten Sie, dass meine letzte Code-Ausschnitt genau das gleiche zeigt Error. Auf der anderen Seite könnte der Erste einen Weg zeigen, wie man mit seinem Hinweis beginnt: _Einige Weise, die Sie ein Debugging durchführen müssen, um herauszufinden, welches Objekt nicht gesetzt ist_. – JosefZ

+0

Es funktioniert !! Aber ich verstehe nicht, warum mein ursprünglicher Code mit der Seite in einem der Server funktioniert und nicht in der anderen ... – Carlos