SAS Enterprise Guide с использованием VBScript. Цикл программ SAS застревает - PullRequest
0 голосов
/ 07 января 2020

Я столкнулся со случайной проблемой. При выполнении программ SAS с VBScript и SASEGObjectModel.Application.7.1 циклическое выполнение CodeCollection иногда застревает, даже если выполнение программы завершилось успешно (конечные базы данных правильно созданы на нашем сервере). Простой сценарий не go для следующей программы CodeCollection (запрос на выполнение сценария все еще открыт ... до бесконечности). Программа SAS бывает случайно, тоже частота. Я собираюсь что-то вроде этого:

Dim oSasApp

Set oSasApp = CreateObject("SASEGObjectModel.Application.7.1")
oSasApp.SetActiveProfile("some-profile")

Dim oSasProj
Set oSasProj = oSasApp.Open("some-project.egp", "")

Dim oProgramList
Set oProgramList = oSasProj.CodeCollection

Dim programOrder
Set programOrder = ...here I assign the SAS programs order array reading from a .txt...

For Each program in programOrder
       For Each sasProgram in oProgramList
              If sasProgram.Name = program Then
                     sasProgram.Run
                     sasProgram.Log.SaveAs "some-folder/" & sasProgram.Name & ".txt"
              End If
       Next
Next

oSasProj.Close
oSasApp.Quit

Проблема не в сохранении журнала, так как файл журнала txt застрявшей программы также правильно создан.

Есть идеи? Может быть, проблемы в нашем сервере SAS? Должен ли я объявить какие-то опции?

Версия SAS Guide: 7.15 Windows: 10

Tks

1 Ответ

0 голосов
/ 17 января 2020

Итак ... для людей, сталкивающихся с той же проблемой. Как я прокомментировал выше, если я нажму клавишу ввода, запрос снова начнет выполняться. Так что он ждет моего вклада по причинам, которые я не могу сказать. Я сделал 2 вещи, чтобы обойти это. Не уверен, что все они необходимы, или если только один решает это, но здесь это идет:

Во-первых, с помощью VBScript я отключил список поколений и применил задержку после запуска программы SAS:

For Each program in programOrder
       For Each sasProgram i oProgramList
              If sasProgram.Name = program Then
                     sasProgram.GenSasReport = False
                     sasProgram.GenHTML = False
                     sasProgram.GenListing = False
                     sasProgram.GenPDF = False
                     sasProgram.GenRTF = False
                     sasProgram.Run
                     WScript.Sleep(2000)
                     sasProgram.Log.SaveAs "some-folder/" & sasProgram.Name & ".txt"
              End If
       Next
Next

В моем пакетном файле, который я использую для вызова VBScript с помощью команды "cscript", я установил его для применения "y" к каждому отдельному сообщению, которое может спросить VBScript:

cd ./script-folder
echo y | cscript script-file-name.vbs

И это все.

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