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 VBA : Sélectionner tout - Visualiser dans une fenêtre à part
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 VBA : Sélectionner tout - Visualiser dans une fenêtre à part
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 VBA : Sélectionner tout - Visualiser dans une fenêtre à part
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
mais il est possible que la ligne Set prjObject = app.Open(prjName,"") soit importante aussi.
Code : Sélectionner tout - Visualiser dans une fenêtre à part containerObject.Run
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+
Partager