Получение vbscript для ожидания появления файла - PullRequest
0 голосов
/ 16 октября 2011

Я пытаюсь написать приложение, которое отправляет и принимает сервисные вызовы с компьютера на мобильный телефон.

Я использую программу под названием Mobile Data Studio, чтобы сделать большую часть работы.

В основном программа генерирует веб-страницу в качестве своего отчета для клиента, и она отправляется клиенту по почте системой, с которой я работаю

Проблема заключается в том, что система не ждет, покафайл генерируется до того, как он пытается отправить его как вложение, и я получаю сообщение об ошибке:

CDO.Message1

Системе не удается найти указанный файл.

Position: 58.0

это код:

objmessage.Addattachment sFile

После того, как я нажму OK на ошибке, файл будет создан, и если я снова запустлю скрипт, он обработает почтуи вложение и открывает файл, если факс также установлен на «да».

Это весь код:

' Process incoming sessions from Pocket PCs

Function OnIncomingSession (theSession)             
' Check if the user indicated a confirmation was desired
If theSession("SendEmail") = "Yes" Then    
 sendobjMessage theSession     
    ElseIf theSession("SendFax") = "Yes" Then      
 sendobjfax theSession               
 End If

   ' Set the return value to true to indicate that normal
' processing should continue
OnIncomingSession = True 

End Function

Sub sendobjMessage (theSession)
' Get the email address from the session
 sEmail = theSession ( "EmailAddress" )

 'Get the file name from the session
 sFile = "C:\htm\"& theSession("ORN")&"."&"htm"   

Const cdoSendUsingPickup = 1 'Send message using the local SMTP service pickup directory. 
Const cdoSendUsingPort = 2 'Send the message using the network (SMTP over the network). 

Const cdoAnonymous = 0 'Do not authenticate
Const cdoBasic = 1 'basic (clear-text) authentication
Const cdoNTLM = 2 'NTLM

Set objMessage = CreateObject("CDO.Message") 
objMessage.Subject = "Our Company  - Service Report" & " " & theSession("rdate")  
objMessage.From = """Service Department"" <user@mydomain>" 
objMessage.To = sEmail
objMessage.TextBody = "Hi " & theSession("sname") & ","
objmessage.Addattachment sFile

Set objfax = CreateObject("WScript.Shell")
objfax.Run sFile 

'==This section provides the configuration information for the remote SMTP server.

objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 

'Name or IP of Remote SMTP Server
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.mydomain.com"

'Type of authentication, NONE, Basic (Base64 encoded), NTLM
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = cdoBasic

'Your UserID on the SMTP server
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendusername") = "user@mydomain"

'Your password on the SMTP server
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "password"

'Server port (typically 25)
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25 

'Use SSL for the connection (False or True)
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = False

'Connection Timeout in seconds (the maximum time CDO will try to establish a connection to the SMTP server)
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60

objMessage.Configuration.Fields.Update

'==End remote SMTP server configuration section==

objMessage.Send 

End Sub 

Ответы [ 2 ]

0 голосов
/ 29 октября 2011
Option Explicit
Dim retval, fso, file
Set fso = CreateObject ("scripting.filesystemobject")

file = "c:\temp\myfile.txt"
retval = waitTilExists (file, true)
MsgBox "return value: " & retval


Function waitTilExists (ByVal file, withRepeat)
    ' Sleeps until the file exists
    ' The polling interval will increase gradually, but never rises above MAX_WAITTIME
    ' Times out after TIMEOUT msec. Will return false if caused by timeout.
    Dim waittime, totalwaittime, rep, doAgain
    Const INIT_WAITTIME = 20
    Const MAX_WAITTIME = 1000
    Const TIMEOUT = 5000
    Const SLOPE = 1.1
    doAgain  = true
    Do While doAgain
        waittime = INIT_WAITTIME
        totalwaittime = 0
        Do While totalwaittime < TIMEOUT
            waittime = Int (waittime * SLOPE)
            If waittime>MAX_WAITTIME Then waittime=MAX_WAITTIME
            totalwaittime = totalwaittime + waittime
            WScript.sleep waittime
            If fso.fileExists (file) Then
                waitTilExists = true
                Exit Function
            End If
        Loop
        If withRepeat Then
            rep = MsgBox ("This file does not exist:" & vbcr & file & vbcr & vbcr & "Keep trying?", vbRetryCancel+vbExclamation, "File not found")
            doAgain = (rep = vbRetry)
        Else
            doAgain = false
        End If
    Loop

    waitTilExists = false
End Function
0 голосов
/ 16 октября 2011

У меня могут быть некоторые полезные инструменты.
У меня сложилось впечатление, что вам нужно:

  1. Подпрограмма, которая создает задержку или паузу на определенный период времени
  2. Подпрограммакоторый проверяет существование файла.

Вот процедура для создания задержки или паузы:

Sub subSleep(strSeconds) ' subSleep(2)
    Dim objShell
    Dim strCmd
    set objShell = CreateObject("wscript.Shell")
    'objShell.Run cmdline,1,False

    strCmd = "%COMSPEC% /c ping -n " & strSeconds & " 127.0.0.1>nul"     
    objShell.Run strCmd,0,1 
End Sub

Вот процедура для проверки существования файла:

Function fnFileExists_Bln(strFULLNamee)
    Dim strFULLName
    strFULLName = strFULLNamee

    Dim objFSO
    Set objFSO = CreateObject("scripting.filesystemobject")

    fnFileExists_Bln = objFSO.FileExists(strFULLName)
End Function ' Function fnFileExists_Bln(strFULLNamee)

Я надеюсь, что этопомогает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...