Skip to main content
Announcements
Global Transformation Awards! Applications are now open. Submit Entry
cancel
Showing results for 
Search instead for 
Did you mean: 
charlyduverger
Partner - Contributor
Partner - Contributor

Lancer .bat via un QVW depuis la QMC (QV 12.0.2)

Bonjour à tous,

J'utilise pour un client la version NPrinting Novembre 2018 et pour importer mes recipients, il faut le faire via un fichier Excel (3 onglets).

Une partie des recipients sont créés via une source de donnée donc j'ai dû créer ce fichier recipients via une application QVW et un module VBscript dans ce QVW (lancer en auto via un déclencheur après le reload du QVW) :

 

Sub ExportFichierExcel()

Path = Left(ActiveDocument.GetProperties.MyWorkingDirectory,InstrRev(ActiveDocument.GetProperties.MyWorkingDirectory,"\")) & "3 - IMPORT EXCEL\"
FileName = "ImportExcelNP" & ".xlsx"
Set XLApp = CreateObject("Excel.Application")
XLApp.Visible = False
set XLDoc = XLApp.Workbooks.Add

XLApp.DisplayAlerts = True
XLApp.EnableEvents = True

'Partie Filtres
ActiveDocument.GetSheetObject("FILTRE").CopyTableToClipboard true
XLDoc.Sheets(1).Paste()
XLDoc.Sheets(1).Columns("A:H").EntireColumn.AutoFit

XLDoc.Sheets(1).Range("A1").value = "Name"
XLDoc.Sheets(1).Range("B1").value = "Description"
XLDoc.Sheets(1).Range("C1").value = "App"
XLDoc.Sheets(1).Range("D1").value = "Enabled"
XLDoc.Sheets(1).Range("E1").value = "Connection"
XLDoc.Sheets(1).Range("F1").value = "Values"
XLDoc.Sheets(1).Range("G1").value = "Numeric Values"
XLDoc.Sheets(1).Range("H1").value = "Formulas"

XLDoc.Sheets(1).Name = "Filters"


'Partie Utilisateurs
ActiveDocument.GetSheetObject("UTILISATEUR").CopyTableToClipboard true
XLDoc.Sheets(2).Paste()
XLDoc.Sheets(2).Columns("A:P").EntireColumn.AutoFit

XLDoc.Sheets(2).Range("A1").value = "E-mail"
XLDoc.Sheets(2).Range("B1").value = "Username"
XLDoc.Sheets(2).Range("C1").value = "Password"
XLDoc.Sheets(2).Range("D1").value = "Domain Account"
XLDoc.Sheets(2).Range("E1").value = "Enabled"
XLDoc.Sheets(2).Range("F1").value = "Time Zone"
XLDoc.Sheets(2).Range("G1").value = "Locale"
XLDoc.Sheets(2).Range("H1").value = "Nickname"
XLDoc.Sheets(2).Range("I1").value = "Title"
XLDoc.Sheets(2).Range("J1").value = "Company"
XLDoc.Sheets(2).Range("K1").value = "Job Title"
XLDoc.Sheets(2).Range("L1").value = "Department"
XLDoc.Sheets(2).Range("M1").value = "Office"
XLDoc.Sheets(2).Range("N1").value = "Filters"
XLDoc.Sheets(2).Range("O1").value = "Groups"
XLDoc.Sheets(2).Range("P1").value = "Roles"

XLDoc.Sheets(2).Name = "Utilisateurs"


'Partie Groupes
ActiveDocument.GetSheetObject("GROUPE").CopyTableToClipboard true
XLDoc.Sheets(3).Paste()
XLDoc.Sheets(3).Columns("A:B").EntireColumn.AutoFit

XLDoc.Sheets(3).Range("A1").value = "Name"
XLDoc.Sheets(3).Range("B1").value = "Description"

XLDoc.Sheets(3).Name = "Groups"


'Supprimer les messages d'alerte (pour sauvegarder et remplacer le fichier Excel)

XLApp.DisplayAlerts = False 


'Sauvegarde et fermeture du fichier
XLApp.EnableEvents = False

XLDoc.SaveAs Path & FileName
XLDoc.Close True

XLApp.EnableEvents = True


'Remettre les messages d'alerte
XLApp.DisplayAlerts = True

'MsgBox("Import OK")


'Supprimer la tâche de l'application Excel
XLApp.Quit

Set XLDoc = Nothing
Set XLApp = Nothing

End Sub

 

Après des recherches sur internet, j'ai compris que le module VBscript ne se lancerais pas via la QMC, du coup, j'ai créé un .bat pour lancer mon QVW qui contient le module VBscript :

 

ECHO OFF
"\\NomServeur\C$\Program Files\QlikView\qv.exe" /NoSecurity /r "\\NomServeur\Data\Nprinting\DEV\2 - APPLICATIONS\1 - NPRINTING_IMPORT_EXCEL.qvw"
exit

 

Pour lancer le .bat, j'ai créé un autre QVW pour le lancer avec un EXECUTE :

Execute cmd.exe /C "\\irntsv-dvqlikv2\Data\Nprinting\DEV\0 - CommandeExterne\Run_QVW.bat";

 

J'ai modifié les sécurités :

- Script ==> cocher "Permettre l'exécution des programmes externes" sur les 2 QVW

- Préférences utilisateurs ==> cocher "Script" et "Module" dans l'onglet sécurité pour mon compte et le compte de service (utilisé par la QMC)

- Modifiction de la ligne "AllowExecuteCommand" égal à 1 dans le fichier C:\Windows\System32\config\systemprofile\AppData\Roaming\QlikTech\QlikViewBatch\Settings.ini

 

Au final, quand je lance mon QVW (celui qui lance mon .bat) sur le client lourd, ça marche et ça me créer mon fichier Excel quand j'utlise mon compte et le compte de service.

Par contre, cela ne marche pas quand je lance depuis la QMC, cela tourne en boucle sans se mettre en échec (sauf si je laisse la tâche jusqu'au TimeOut). Quand je regarde les processus ouverts, le .bat à l'air de se lancer et d'ouvrir le QVW (celui avec le module VBscript) car pour stopper la tâche QMC, je dois killer le processus cmd.exe ce qui arrête la tâche et la met en succès puis je dois killer le QV.exe car sinon le QVW reste ouvert et je n'arrive plus à le sauvegarder si je l'ouvre sur le client lourd.

 

Est-ce que quelqu'un aurait une idée sur mon problème ? Ou une autre solution ?

Merci d'avance pour votre aide.

0 Replies