Я использую SAS EG и пытаюсь планировать ежедневную работу.
- Есть ли способ запланировать список заказов вместо планирования всего процесса?
- если нет, я ищу код, который может выполнять список заказов, чтобы я мог планировать только эту программу...
Я использую SAS EG и пытаюсь планировать ежедневную работу.
http://support.sas.com/kb/19/020.html
По задумке опция планирования упорядоченного списка не включена. Чтобы обойти эту проблему, выберите и скопируйте объекты из проекта и вставьте их в новый поток процессов. Затем расположите их в желаемом порядке и, наконец, запланируйте ход процесса.
Подробную информацию обо всех способах планирования заданий в EG можно найти в этих двух документах. : http://blogs.sas.com/content/sasdummy/2012/04/17/doing-more-with-sas-enterprise-guide-automation/ http://support.sas.com/документация/onlinedoc/guide/examples/SASGF2012/Hemedinger_298-2012.pdf
Если вы хотите немного написать сценарий на VBScript, Powershell или .Net, это возможно. Однако это не рекомендуется, потому что, как отмечает Кени, SAS явно не делала это возможным и так говорит (в отличие от того, что просто забыла сделать это). Поэтому я не уверен, почему это так, и поэтому возможно, что это может привести к проблемам.
Однако: это возможно. Хуки в API существуют для запуска упорядоченного списка, по крайней мере, с технической точки зрения. Опять же - я не знаю, может ли это привести к конфликтам или чему-то еще, и вы можете рассмотреть возможность публикации на форуме сообщества SAS, чтобы узнать, может ли Крис Х или кто-то из других участников этого форума подсказать вам, почему это не так. стало возможным в среде IDE.
По сути, вы можете получить доступ к упорядоченному списку через API через ContainerCollection, который является частью проекта. Внутри этой коллекции контейнеров находится контейнер под названием «Упорядоченные списки». Внутри этого контейнера находится контейнер для каждого упорядоченного списка в проекте. Таким образом, вы можете получить доступ к этому через project.ContainerCollection.Item(i).Items.Item(j)
, где i
кажется постоянно равным 0 в моем первоначальном тестировании (но не полагайтесь на это, я не уверен, что это всегда 0), а j
— это номер конкретного упорядоченного списка, который вы бежим.
Для этого я создал копию VBScript, которую EGuide создает, когда вы просите его запланировать поток процессов, и настроил его, чтобы найти упорядоченный список. Это очень глупо — отчасти потому, что мои знания VBScript посредственны и стары, а отчасти из-за желания сделать это быстрее. Возможно, вам придется внести изменения, чтобы это заработало (кроме настройки пути к проекту и имени файла проекта в переменной prjName и переменной containerName (которая должна быть именем ваших упорядоченных списков).
Что он делает, так это перебирает все контейнеры в ContainerCollection и проверяет, называются ли они «Упорядоченными списками». Затем он перебирает контейнеры в этом контейнере и проверяет, названы ли они так, как вы поместили в переменную containerName (имя вашего упорядоченного списка). Когда он находит такой, он выходит из цикла for и запускает этот контейнер (т. е. запускает этот упорядоченный список).
Затем это можно запланировать или запустить напрямую (либо двойным щелчком в Windows, либо с помощью cscript.exe
в консоли). Если вы используете EG в среде, отличной от Windows, возможно, это все еще может работать (если у вас есть компилятор VBScript), но я не уверен, работает ли API так же или нет. (Ваша среда SAS не должна иметь значения, только среда EG.)
Option Explicit
Dim app ' As SASEGuide.Application
Call dowork
'shut down the app
If not (app Is Nothing) Then
app.Quit
Set app = Nothing
End If
Sub dowork()
On Error Resume Next
'----
' Start up Enterprise Guide using the project name
'----
Dim prjName ' As String
Dim prjObject ' As SASEGuide.Project
Dim containerName ' As String
Dim containerObject ' As SASEGuide.Container
Dim containerColl ' As SASEGuide.ContainerCollection
dim orderedListObject ' as SASEguide.Container
prjName = "\\pathtoproject\test project.egp" ' Project Name
containerName = "My Ordered List" ' Name of the Ordered List
Set app = CreateObject("SASEGObjectModel.Application.7.1")
If Checkerror("CreateObject") = True Then
Exit Sub
End If
Set prjObject = app.Open(prjName,"")
If Checkerror("App.Open") = True Then
Exit Sub
End If
'-----
'Get The Container Collection and Object
'-----
Set containerColl = prjObject.ContainerCollection
If Checkerror("Project.ContainerCollection") = True Then
Exit Sub
End If
Dim i ' As Long
Dim j ' As Long
Dim count ' As Long
Dim count_OL ' as Long
count = containerColl.count
For i = 0 To count - 1
Set containerObject = containerColl.Item(i)
If Checkerror("ContainerCollection.Item") = True Then
Exit Sub
End If
If (containerObject.Name = "Ordered Lists") Then
count_OL = containerObject.items.count
For j = 0 to count_OL - 1
If Checkerror("ContainerCollection.Item") = True Then
Exit Sub
End If
Set orderedListObject = containerObject.items.item(j)
If (orderedListObject.name = containerName) then
exit for
Else
Set orderedListObject = Nothing
end if
Next
Exit For
Else
Set containerObject = Nothing
Set orderedListObject = Nothing
End If
Next
If not (orderedListObject is nothing) Then
'----
' Run the Container
'----
orderedListObject.Run
If Checkerror("Container.Run") = True Then
Exit Sub
End If
Else
wscript.echo "Not Found"
End If
'-----
' Save the new project
'-----
prjObject.Save
If Checkerror("Project.Save") = True Then
Exit Sub
End If
'-----
' Close the project
'-----
prjObject.Close
If Checkerror("Project.Close") = True Then
Exit Sub
End If
End Sub
Function Checkerror(fnName)
Checkerror = False
Dim strmsg ' As String
Dim errNum ' As Long
If Err.Number <> 0 Then
strmsg = "Error #" & Hex(Err.Number) & vbCrLf & "In Function " & fnName & vbCrLf & Err.Description
MsgBox strmsg 'Uncomment this line if you want to be notified via MessageBox of Errors in the script.
Checkerror = True
End If
End Function