Datacycle Reporting en sus versiones empresariales, permite la ejecución de scritps a través de la tarea Código Script dentro de un proceso. Este script puede ser programado tanto en lenguaje VBScript como en JScript.
Para crear un proceso que ejecute la tarea código script:
1. Desde Todos los procesos, crear un nuevo proceso compuesto (si el proceso no generará el fichero a imprimir)
2. Indicar el nombre en Datos Básicos
3. Desde las Tareas del Proceso, insertar tarea tipo Código Script.
4. Indicar un título a la tarea y configurar los parámetros requeridos.
5. Colocar el código script correspondiente. Crear parámetros si fuese necesario.
6. Aceptar y guardar el proceso.
Ejemplos:
Acontinuación tenemos varios ejemplos en Visual Basic Script que nos permiten realizar diferentes funciones directamente desde DataCycle Reporting.
* Lenguaje: VBScript
* Función de inicio de la ejecución: seleccionar el nombre de la función del desplegable
* Valor en caso de retorno en caso de éxito: 0
Nota: Podemos usar parámetros dentro del proceso que remplacen los nombres de fichero y rutas origen
Crear un acceso directo a un informe Exel desde el escritorio:
Utiliza una variable del proceso @PAR(TARGET_FILE_FULLPATH) que contiene el directorio y el nombre del informe que se generará, esto será útil para crear el acceso directo.
La constante NETHOOD con valor &H10& indica el directorio donde queremos que nos cree el acceso directo, en este caso el escritorio, y por último nuestro acceso directo tendrá el nombre: InformeDatacycle
Sub CrearAccesoDirecto
dim objWSHShell
dim objShell
dim objFolder
dim objFolderItem
dim strNetHood
dim strShortcutName
dim strShortcutPath
dim objShortcut
Const NETHOOD = &H10&
Set objWSHShell = CreateObject("Wscript.Shell")
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(NETHOOD)
Set objFolderItem = objFolder.Self
strNetHood = objFolderItem.Path
strShortcutName = "InformeDatacycle"
strShortcutPath = "@PAR(TARGET_FILE_FULLPATH)"
Set objShortcut = objWSHShell.CreateShortcut (strNetHood & "\" & strShortcutName & ".lnk")
objShortcut.TargetPath = strShortcutPath
objShortcut.Save
End Sub
Eliminar los ficheros Excel de una carpeta:
Elimina todos los ficheros .xls de la carpeta c:\scripts en la máquina actual que tienen una antigüedad de más de 7 días:
Sub EliminarFicherosMasDe7Dias
Dim dtmDate,strDay,strMonth,strYear,strTargetDate,strComputer,strDate
dtmDate = Date - 7
strDay = Day(dtmDate)
If Len(strDay) < 2 Then
strDay = "0" & strDay
End If
strMonth = Month(dtmDate)
If Len(strMonth) < 2 Then
strMonth = "0" & strMonth
End If
strYear = Year(dtmDate)
strTargetDate = strYear & strMonth & strDay
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set FileList = objWMIService.ExecQuery _
("ASSOCIATORS OF {Win32_Directory.Name='C:\Scripts'} Where " _
& "ResultClass = CIM_DataFile")
For Each objFile In FileList
strDate = Left(objFile.CreationDate, 8)
If strDate < strTargetDate The
If objFile.Extension = "xls" Then
objFile.Delete
End If
End If
Next
End Sub
Eliminar una carpeta:
Elimina la carpeta Y:\Informes\Diario en la máquina actual (la unidad Y puede ser mapeada)
Sub EliminarCarpetas
Dim strComputer
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set FileList = objWMIService.ExecQuery _
("ASSOCIATORS OF {Win32_Directory.Name='Y:\Informes\Diario'} " _
& "WHERE AssocClass = Win32_Subdirectory " _
& "ResultRole = PartComponent")
For Each objFile In FileList
objFile.Delete
Next
End Sub
Mapear una unidad de red, copiar un fichero en esa unidad y desmapear la unidad:
Mapea la unidad M:\ contra el directorio Informes de la máquina SERVIDOR1 y copia el archivo test.txt del directorio c:\Scripts de la máquina desde donde se ejecuta Datacycle.
Sub MapearUnidad
Set objNetwork = CreateObject("Wscript.Network")
objNetwork.MapNetworkDrive "M:", "\\SERVIDOR1\Informes"
Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.CopyFile "C:\Scripts\Test.txt", "M:\"
objNetwork.RemoveNetworkDrive "M:"
End Sub
Usar información de un Excel para renombrar un conjunto de directorios:
Paso 1
Definir en un libro Excel llamado test.xls en la primera hora 2 columnas. La primera columna contiene una lista de directorios existentes con los nombres antiguos y la segunda columna contiene los nuevos nombres que se asignarán a cada directorio.
Paso 2:
Script que ejecutará la tarea de renombrar los subdirectorios de la carpeta C:\Scripts de la máquina donde se ejecuta Datacycle partiendo de la información del fichero c:\scripts\test.xls
Sub RenombrarCarpetas
dim strComputer,objWMIService,objExcel,objWorkbook,strOldFolderName
dim strNewFolderName,errResults,i
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set objExcel = CreateObject("Excel.Application")
Set objWorkbook = objExcel.Workbooks.Open("C:\Scripts\Test.xls")
objExcel.Visible = FALSE
i = 1
Do Until objExcel.Cells(i, 1).Value = ""
strOldFolderName = objExcel.Cells(i, 1).Value
strNewFolderName = objExcel.Cells(i, 2).Value
strOldFolderName = Replace(strOldFolderName, "\", "\\")
Set colFolders = objWMIService.ExecQuery _
("Select * from Win32_Directory where Name = '" & strOldFolderName & "'")
For Each objFolder in colFolders
errResults = objFolder.Rename(strNewFolderName)
Next
i = i + 1
Loop
End Sub
Crear una nueva carpeta dentro de un directorio
Uutiliza la fecha actual para crear el nombre de la carpeta: NuevaCarpeta en el directorio c:\Scripts
Sub CrearNuevaCarpeta
Dim strMonth,strDay,strYear,strFolderName
strMonth = Month(Date)
If Len(strMonth) = 1 Then
strMonth = "0" & strMonth
End If
strDay = Day(Date)
If Len(strDay) = 1 Then
strDay = "0" & strDay
End If
strYear = Year(Date)
strFolderName = "C:\Scripts\NuevaCarpeta_" & strMonth & "-" & strDay & "-" & strYear
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.CreateFolder(strFolderName)
End Sub
La tarea Código Script está disponible en nuestras ediciones empresariales Workgroup y Entrerprise.
0 Comentarios