У нас есть поставщик, который отправляет нам файлы индекса CSV для использования с нашим программным обеспечением для импорта документов OnBase. Если файл CSV был создан с использованием одной из наших институциональных форм, OnBase принимает их без ошибки, поскольку мы настроили соответствующие типы документов, которые соответствуют 1-му значению с разделителями в файле CSV. Однако, если файл CSV был создан с использованием формы поставщика, 1-е значение с разделителями немного отличается и создает ошибки индексации OnBase. Наш поставщик использует этот формат CSV для многих своих клиентов и указал, что его нельзя настроить в соответствии с нашими текущими типами документов OnBase (без $$$).
Мне было поручено определить обходной путь, и я нашел другое учреждение, использующее VBScript для создания файлов индекса CSV перед обработкой OnBase. После некоторого сотрудничества я смог закодировать подобный подход, используя VBScript. Однако, поскольку мы уже получаем индексные файлы, наш подход определяет, сколько CSV-файлов находится в целевой папке, с помощью цикла, открывающего каждый, идентифицирует 1-е значение с разделителями в CSV-файле, сравнивает это значение с помощью метода регистра переключателя, обновляет 1-е значение CSV с разделителями, основанное на методе регистра, затем сохраняет файл до завершения цикла (значение цикла = количество файлов в целевой папке - 1 ... для учета файла VBS). Когда я нажимаю на файл VBS, он работает как шарм!
Вот тут и начинается беда. Если я пытаюсь запустить файл VBS из другого файла VBS, сценарий выдает ошибки: Файл не найден. Я включил некоторый код отладки, и я вижу, что он правильно подсчитывает количество файлов в целевой папке и т. Д. Когда я подумал, что целевая папка не найдена, я учел это путем точного определения пути во время тестирования. Даже когда я уверен, что он находит нужную целевую папку, я получаю ту же ошибку File Not Found. Если дважды щелкнуть тот же файл VBS, он работает без ошибок, и все файлы CSV корректно обновляются.
Обновление @Ansgar Wiechers решил проблему с поиском и сохранением правильного значения пути к файлу. Но я все еще получаю сообщение об ошибке «Файл не найден» в строке 163.
Строка 163
Чар 1
Ошибка: файл не найден
Код: 800A0035
Источник: ошибка выполнения Microsoft VBScript
В дополнение к этому, я также заметил, что мой скрипт vbs будет запускаться только один раз, прежде чем вам придется скопировать / вставить новый экземпляр в целевую папку, прежде чем запускать его снова. Это заставляет меня думать, что мой цикл никогда не заканчивался, поэтому я включил отладку MsgBox
, которая отображается после того, как цикл закончился (или думаю, что он закончился) и прямо перед командой WScript.Quit
. Это две последние строки в скрипте, и окно сообщения успешно отображается. Я включу код ниже из обоих моих файлов VBS.
VBScript файл № 1 (звездочки, маскирующие личную информацию):
Dim CurrentDirectory
Set FSO = CreateObject("Scripting.FileSystemObject")
CurrentDirectory = "C:\Users\*******\Desktop\ProVerify\Testing\ERROR_FILES\"
FSO.CopyFile "C:\Users\*******\Desktop\ProVerify\Testing\Old Source Files\VBScript_PV_Form_conversion.vbs", CurrentDirectory
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "C:\Users\*******\Desktop\ProVerify\Testing\ERROR_FILES\VBScript_PV_Form_conversion.vbs"
WshShell.Popup "VBS file will be deleted in 10 seconds...", 10
FSO.DeleteFile "C:\Users\*******\Desktop\ProVerify\Testing\ERROR_FILES\VBScript_PV_Form_conversion.vbs"
WScript.Quit
Файл VBScript # 2 (в целевой папке с CSV-файлами; удален код регистра переключателя для этого поста для экономии места):
' Declare vars
Dim intDebug, sFile, strDirectory, numFiles, sLine, aLine
intDebug = 1
' Find path of folder where script file resides & Set Object vars
Set objFSO = CreateObject("Scripting.FileSystemObject")
strDirectory = objFSO.GetParentFolderName(WScript.ScriptFullName)
Set objFolder = objFSO.GetFolder(strDirectory)
' Count number of files in folder
numFiles = objFolder.Files.Count - 1
If intDebug = 1 Then
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Popup "File Count: " & numFiles, 2
WshShell.Popup "File Path: " & strDirectory, 2
Else
End If
If numFiles <= 1 Then
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Popup "No Files to Process", 2
WScript.Quit
Else
End If
'Loop through each file in folder
For Each folderIdx In objFolder.Files
Set oStream = folderIdx.OpenAsTextStream
'Read file and capture first delimeted value
sLine = oStream.ReadLine
oStream.Close
aLine = Split(sLine, ",")
' Compare delimeted value & update to OnBase DocType naming convention
Select Case aLine(0)
[*****case method here*****]
End Select
' Create replacement delimited value
sLine = ""
For i = LBound(aLine) To UBound(aLine)
sLine = sLine + aLine(i) + ","
Next
'Open file and replace updated delimeted value
Set oStream = objFSO.OpenTextFile(folderIdx.Name, 2)
oStream.WriteLine Left(sLine, Len(sLine)-1) ' Remove comma from updated delimeted value
oStream.Close
Next
'Reset Object vars
Set oStream = Nothing
Set objFSO = Nothing
Set objFolder = Nothing
If intDebug = 1 Then
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Popup "Conversion Complete", 2
Else
End If
WScript.Quit
В итоге:
Этот код работает хорошо (один раз), когда я дважды щелкаю; затем новый экземпляр необходимо скопировать / вставить в целевую папку, прежде чем двойной щелчок снова запустит файл.
Код выдает ошибку при запуске через другой VBS-файл, строка 163, Файл не найден.
Я почти уверен, что этого можно достичь в OnBase, но наш администратор системы OnBase настаивает, что я ошибаюсь. 51 руководство пользователя OnBase, ссылающееся на VBScipting более 1500 раз, говорит мне об обратном. Тем не менее, сейчас я поставил задачу найти решение за пределами OnBase. Не стесняйтесь комментировать и эту тему.