SAS plante dans un batch et bloque les autres demandes d'exécutions, que faire ?
Bonjour à tous et merci de votre temps et de votre aide.
Avant toute chose, je ne connais presque rien à SAS et mon équipe connait assez peu les rouages internes de SAS donc s'il vous plait détaillez pas à pas dans vos réponses.
Et il est probable que je n'utilise pas les bons termes pour désigner les éléments de SAS.
Nous rencontrons un problème assez ennuyant avec des tâches planifiées qui appellent des scripts VB Script qui eux-mêmes appellent des projets SAS (fichier .egp).
Parfois le projet SAS plante lors de l'exécution et SAS semble rester bloqué là. Le script semble ne se rendre compte de rien et poursuit sa tâche comme si le projet SAS avait fini normalement.
Le problème est que SAS reste dans un état qui empêche les autres projets SAS de s'exécuter, entrainant une cascade d'erreur pour les autres tâches planifiées.
Ici un exemple de script :
Code:
1 2 3 4 5 6 7 8 9 10
| 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 |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
| 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
prjName = "\\MonServeur\MonChemin\MonProjetSAS.egp" ' Project Name
containerName = "Flux de processus" ' Container Name
Set app = CreateObject("SASEGObjectModel.Application.6.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 count ' 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 = containerName) Then
Exit For
Else
Set containerObject = Nothing
End If
Next
If not (containerObject Is Nothing) Then
'----
' Run the Container
'----
containerObject.Run
If Checkerror("Container.Run") = True Then
Exit Sub
End If
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 |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| 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 |
Si j'ai bien compris, l'exécution se produit ici à l'instruction
Code:
containerObject.Run
mais il est possible que la ligne Set prjObject = app.Open(prjName,"") soit importante aussi.
Mes questions sont les suivantes :
- Y-t'il un moyen de s'assurer que SAS se ferme si une erreur survient quelle que soit cette erreur ?
J'ai trouvé quelque chose ici (http://support.sas.com/documentation...a000993436.htm) à propos de ERRORABEND mais cela semble relié à des fichiers .sas pas .egp donc je ne sais pas si cela s'applique.
Et en plus c'est pour la version 9.2 or nous utilisons les versions 6 et 7. - Y-a-t'il quelque par de la doc sur les paramètres qu'on peut passer à l'ouverture ou/et à la demande d'exécution ?
A+