[asp] .vbs creert bestand maar FSO ziet hem niet

Pagina: 1
Acties:
  • 284 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • coldasice
  • Registratie: September 2000
  • Laatst online: 15:39
Het script is bedoeld om een rapport(html bestand) te creeeren die ik vervolgens in een variabele stop die ik via CDONTS rondmail. Door het creeeren van het html bestand in een vbs heb je hier oneindige mogelijkheden om het rapport aan te passen.


Nu heb ikeen probleem met de FSO. Ik creeer een bestand in de vbs die ik vervolgens wil gebruiken met FSO. Ik heb in regel 15 een extra controle toegevoeg die een pop up laat zien met de waarde 0. Hiermee geeft hij in principe het bestand vrij en dat het goed is aangemaakt. Als ik met de verkenner naar het bestand ga is het bestand vrijgegeven en kan ik het bewerken.

Maar als het script met regel 19 verder gaat, ziet die het bestand niet en kan ik hem ook niet inladen. Waarschijnlijk omdat hij het bestand tijdens het aanmaken van het FSO object nog niet bestond. Ik heb geprobeerd dit anders te doen door het bestand al aan te maken van te voren en te appenden maar ook dan ziet hij het oude bestand en niet het aangevulde html bestand.

Ik kan dit oplossen door een meta refresh te doen naar een nieuwe asp file en daar de file op te halen en in een variabele te stoppen maar dat vind ik een lelijke oplossing.

Kan iemand me hiermee helpen? _/-\o_


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Function RunVBS (rolnummer,textbody)
'copieer res file naar temp.res
     set FSo = CreateObject("Scripting.FileSystemObject")
     
     completefilename="E:\.....\Zonnesimulator\DataJV\ROLL-TO-ROLL\" & Rolnummer & "\" & Rolnummer & ".res"
     newname="c:\...\helianthosintranet\rapport\temp.res"
     FSo.CopyFile completefilename,newname,true
%>
<script language="VBScript">

        dim oWSH
        Set oWSH= CreateObject("WScript.Shell")
        command="cscript.exe \\ahrn28\rapport$\rolrapport.vbs " 
        x=oWSH.Run (command, 0,true)
        msgbox x

</script>
<%
  set FSo2 = CreateObject("Scripting.FileSystemObject")  
Set f=fso2.OpenTextFile("\\ahrn28\rapport$\test.html", 1)
textbody = textbody & f.ReadAll
f.close
fso2.DeleteFile(newname)
End Function

Acties:
  • 0 Henk 'm!

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Maakt het bestand eens aan in c:\temp ipv van op een netwerk share. Daarmee kun je controleren of je script zelf correct is. Als het script eenmaal werkt kun je het bestand weer op de netwerk share plaatsen. Je hebt ook nog kans dat VBS de share niet mag benaderen (vanwege sandbox). Map dan de share eens als een drive letter. Je maakt hier gebruik van een 'hidden' share. Ook daar kan het probleem optreden.

If it isn't broken, fix it until it is..


Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 17:13

gorgi_19

Kruimeltjes zijn weer op :9

Heeft het IUSR_acco8unter er uberhaupt wel rechten toe?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • coldasice
  • Registratie: September 2000
  • Laatst online: 15:39
Niemand_Anders schreef op donderdag 11 oktober 2007 @ 13:26:
Maakt het bestand eens aan in c:\temp ipv van op een netwerk share. Daarmee kun je controleren of je script zelf correct is. Als het script eenmaal werkt kun je het bestand weer op de netwerk share plaatsen. Je hebt ook nog kans dat VBS de share niet mag benaderen (vanwege sandbox). Map dan de share eens als een drive letter. Je maakt hier gebruik van een 'hidden' share. Ook daar kan het probleem optreden.
het bestand wordt netjes aangemaakt want ik kan hem vervolgens benaderen via de verkenner...als ik een copy maak in de verkenner van het bestand en dit bijvoorbeeld temp2.html noem en dit open in regel 20 maar wel temp.html genereer in de .vbs gaat het allemaal goed....het is dus ergens een timing probleem tussen de FSO en Cscript. Daarom heb ik geprobeerd een nieuw FSO object aan te maken in regel 19 om te kijken of het daar aan lag....helaas

Acties:
  • 0 Henk 'm!

  • 4of9
  • Registratie: Maart 2000
  • Laatst online: 13-12-2024
Ik weet niet of ik nu iets geks zeg hoor maar dat gene dat tussen <script> tags staat lijkt mij op de client uitgevoert te worden en dat gene dat tussen de <% op de server.

Aspirant Got Pappa Lid | De toekomst is niet meer wat het geweest is...


Acties:
  • 0 Henk 'm!

  • coldasice
  • Registratie: September 2000
  • Laatst online: 15:39
code:
1
2
3
4
5
6
7
     FSo.CopyFile completefilename,newname,true
%>
<script language="VBScript">

</script>
<%
fso2.DeleteFile(newname)


dat server client verhaal heeft me iig aan het denken gezet. Nadat ik de deletefile active had gemaakt in de laatste coderegel werkte het genereren van de html niet meer goed. Wat blijkt is dat de file wordt aangemaakt vervolgens wordt de vbs geactiveerd maar voordat die goed en wel iets doet is het newname bestand (tijdelijke datafile) alweer verdwenen. Dus het script loopt gewoon door en wacht niet voordat de vbs klaar is. Hiermee is dus ook verklaart dat meteen na het initieren van de vbs het resultaat nog niet aanwezig is.

Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 13:36

Creepy

Tactical Espionage Splatterer

Nogal logisch aangezien het server deel eerst volledig runt en dan pas het resultaat aan de client wordt weergegeven welke zaken in die VBScript probeert uit te voeren. Met %> beeindig je een server deel en dan boeit het echt niet dat het toevallig in een function staat. De server kant slaat dat gewoon over. De client kan ziet die hele function niet eens en ziet alleen de script tags en alles wat daar tussen zit.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • coldasice
  • Registratie: September 2000
  • Laatst online: 15:39
ik heb het volgende voorbeeld van experts exchange gevonden die eenzelfde probleem heeft opgelost:

deze code initieert een nieuwe pagina met link en wacht vervolgens tot die geladen is daarna het geheel overneemt. Hij maakt daarbij gebruik van de readystate van de browser. Is het mogelijk om een readystate van cscript te gebruiken in vbscript asp?

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
<html>
<head>
<SCRIPT LANGUAGE="vbscript" > 
      dim oBrowser
     function bUpdateAll()
          document.all.whatsup.innerHTML = "starting"
          sUrl = "http://www.aspfree.com"

          const READYSTATE_COMPLETE = 4
          on error resume next

          Set oBrowser = CreateObject("InternetExplorer.Application")

          if err.number <> 0 then          
               document.all.whatsup.innerHTML = "set your ie default tools-options-security-default level to 'low'"
               exit function
          end if

          on error goto 0

          oBrowser.Width = 600
          oBrowser.Height = 400
          oBrowser.Left = 50
          oBrowser.Top = 50
          oBrowser.Visible = true     
          oBrowser.Silent = true

          oBrowser.Navigate(sUrl)
         bSleep(1) 'Call js function that sleeps 
          
          document.All.whatsup.innerHTML = "done"
     end function

      function FWake(linkcase)
            document.all.whatsup.innerHTML = "Im awake: " '& oBrowser.readyState
            EndTime = Now() + 5.0 / (3600.0 * 24.0)
            Do While Now() < EndTime and Not (oBrowser.readyState = READYSTATE_COMPLETE)
                  ' Empty loop forces script to wait.                  
            Loop
            if linkcase = 1 then
                  bTemp = bClickLink("utilize")
                  bSleep(2)
            else
                  document.all.whatsup.innerHTML = oBrowser.Document.body.innerHTML
            end if
      end function


      Function bClickLink(sHrefFrag) 
            bComplete = true
            bClickLink = false
            Dim x , i
            x = oBrowser.Document.links.Length
            Dim s , sTheLink 
            For Each oLink In oBrowser.Document.links
                  sTemp = sTemp & "<br/>link: " & oLink.getAttribute("href")
                  If InStr(1, oLink.getAttribute("href"), sHrefFrag, vbTextCompare) > 0 Then
                        document.All.whatsup.innerHTML = "<p>clicked: " & oLink.getAttribute("href")
                        oLink.Click
                        bClickLink = True
                        Exit For
                  End If
            Next
      End Function
</script>
<SCRIPT LANGUAGE="javascript" > 
      function bSleep(theCase){
            sFunc = "FWake(" + theCase + ")";
            document.all.whatsup.innerHTML = "Sleeping";
            window.setTimeout( sFunc, 5000);
      }
</SCRIPT>
</head>
<body onload="call bUpdateAll()">
     <div id="whatsup">Nothing</div>
</body>
</html>

Acties:
  • 0 Henk 'm!

  • coldasice
  • Registratie: September 2000
  • Laatst online: 15:39
Creepy schreef op donderdag 11 oktober 2007 @ 14:43:
Nogal logisch aangezien het server deel eerst volledig runt en dan pas het resultaat aan de client wordt weergegeven welke zaken in die VBScript probeert uit te voeren. Met %> beeindig je een server deel en dan boeit het echt niet dat het toevallig in een function staat. De server kant slaat dat gewoon over. De client kan ziet die hele function niet eens en ziet alleen de script tags en alles wat daar tussen zit.
Ja oke...dat was mijn conclusie inmiddels ook maar hoe zou ik dit kunnen oplossen?

Acties:
  • 0 Henk 'm!

  • coldasice
  • Registratie: September 2000
  • Laatst online: 15:39
Ik heb het probleem opgelost door een meta refresh naar een nieuwe pagina aan te maken en vanaf daar de file op te halen en via een mail rond te sturen. Het zou eventueel nog opgelost kunnen worden door een Shell.Application object aan te maken maar dit is vooralsnog niet gelukt. Hiermee is mijn probleem in ieder geval opgelost, voor mensen waarvoor het niet afdoende is zou ik die route verder bewandelen. Succes alvast!
Pagina: 1