код для списка заказов в SAS/расписание списка заказов

Я использую SAS EG и пытаюсь планировать ежедневную работу.

  1. Есть ли способ запланировать список заказов вместо планирования всего процесса?
  2. если нет, я ищу код, который может выполнять список заказов, чтобы я мог планировать только эту программу...

person Zhefu Chen    schedule 12.02.2016    source источник


Ответы (2)


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

person Keneni    schedule 12.02.2016

Если вы хотите немного написать сценарий на 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
person Joe    schedule 12.02.2016