Nombre del Archivo : ejecutarAccionConLog
---------------------------------
// Configuración general para asignar los valores
var config = {
hojaNombre: "Logs", // Nombre de la hoja donde se guardarán los datos
columnas: {
hora: 1, nombreFuncion: 2, tipoEvento: 3,
mensaje: 4, estado: 5, usuario: 6, error: 7
}
};
// Variables globales
var lastSheetNames = [];
var logsSheet = null;
// Función principal para registrar logs de ejecución
function registrarTodaInformacionDeFunciones() {
try {
ocultarHojaLogs(); // Ocultar la hoja al inicio
var sheet = getLogsSheet();
agregarEncabezado(sheet);
registrarLog(sheet, "registrarTodaInformacionDeFunciones", "Automático", "Inicio de ejecución del script");
ejecutarAccionConLog(sheet);
//ocultarHojaLogs(); // Ocultar la hoja al final
} catch (e) {
registrarLog(getLogsSheet(), "registrarTodaInformacionDeFunciones", "Error", "Error en ejecución: " + e.message, e);
}
}
// Función de ejemplo con log
function ejecutarAccionConLog(sheet) {
try {
var resultado = "Proceso completado exitosamente";
registrarLog(sheet, "ejecutarAccionConLog", "Manual", "Ejecución completada: " + resultado);
} catch (e) {
registrarLog(sheet, "ejecutarAccionConLog", "Error", "Error en ejecución", e);
}
}
// Función para registrar logs en la hoja
function registrarLog(sheet, nombreFuncion, tipoEvento, mensaje, error) {
try {
var hora = new Date();
var estado = error ? "Erróneo" : "Exitoso";
var usuario = Session.getActiveUser().getEmail();
var mensajeError = error ? error.message : "";
sheet.appendRow([hora, nombreFuncion, tipoEvento, mensaje, estado, usuario, mensajeError]);
Logger.log(`Hora: ${hora} | Función: ${nombreFuncion} | Estado: ${estado} | Usuario: ${usuario}`);
} catch (e) {
Logger.log("Error al registrar log: " + e.message);
}
}
// Función para agregar encabezado si no existe
function agregarEncabezado(sheet) {
var encabezado = ["Hora de Ejecución", "Nombre de la Función Ejecutada", "Tipo de Evento", "Mensaje de Ejecución", "Estado", "Usuario", "Mensaje de Error"];
var primeraFila = sheet.getRange(1, 1, 1, encabezado.length).getValues()[0];
if (primeraFila.join() !== encabezado.join()) {
sheet.getRange(1, 1, 1, encabezado.length).setValues([encabezado]);
}
}
// Función para ejecutar Autocrat y registrar logs con verificación de estado
function ejecutarAutocrat() {
try {
var job = AutocratApp.getJob('nombre_del_job'); // Asegúrate de usar el nombre correcto del job
job.run(); // Ejecuta el trabajo
Utilities.sleep(5000); // Espera para dar tiempo al trabajo a completarse
// Verificar el estado de la ejecución del trabajo
var estadoTrabajo = job.getStatus();
// Registro de información adicional
if (estadoTrabajo === 'SUCCESS') {
registrarLog(getLogsSheet(), "ejecutarAutocrat", "Automático", "El trabajo de Autocrat se completó exitosamente.");
} else if (estadoTrabajo === 'ERROR') {
registrarLog(getLogsSheet(), "ejecutarAutocrat", "Error", "Error al ejecutar el trabajo de Autocrat.");
} else {
registrarLog(getLogsSheet(), "ejecutarAutocrat", "Automático", "Estado desconocido: " + estadoTrabajo);
}
// Obtener el historial y registrarlo
var historial = job.getHistory();
registrarLog(getLogsSheet(), "ejecutarAutocrat", "Automático", "Historial: " + JSON.stringify(historial));
} catch (e) {
registrarLog(getLogsSheet(), "ejecutarAutocrat", "Error", "Error al ejecutar Autocrat", e);
}
}
// Obtener la hoja de logs (se obtiene solo una vez)
function getLogsSheet() {
if (!logsSheet) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
logsSheet = ss.getSheetByName(config.hojaNombre);
if (!logsSheet) {
logsSheet = ss.insertSheet(config.hojaNombre);
}
}
return logsSheet;
}
// Evento onEdit para registrar ediciones
function onEdit(e) {
try {
var sheet = e.range.getSheet();
if (sheet.getName() === config.hojaNombre) return;
var rango = e.range;
var valorNuevo = e.value || "";
var valorAntiguo = e.oldValue || "";
if (valorNuevo === "") return;
var usuario = Session.getActiveUser().getEmail();
var hora = new Date();
registrarLog(getLogsSheet(), "onEdit", "Manual", `Hoja: ${sheet.getName()}, Rango: ${rango.getA1Notation()}, Antiguo: ${valorAntiguo}, Nuevo: ${valorNuevo}`);
} catch (e) {
registrarLog(getLogsSheet(), "onEdit", "Error", "Error en edición", e);
}
}
// Función para revisar cambios en las hojas
function checkSheetChanges() {
try {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheets = ss.getSheets();
var currentSheetNames = sheets.map(sheet => sheet.getName());
// Si es la primera ejecución, inicializar lastSheetNames y salir
if (lastSheetNames.length === 0) {
lastSheetNames = currentSheetNames;
return;
}
// Verifica si se ha creado o eliminado una hoja
if (currentSheetNames.length !== lastSheetNames.length) {
var cambio = currentSheetNames.length > lastSheetNames.length ? "Creación" : "Eliminación";
var hojaCambiada = (cambio === "Creación")
? currentSheetNames.find(name => !lastSheetNames.includes(name))
: lastSheetNames.find(name => !currentSheetNames.includes(name));
logSheetChange(cambio, hojaCambiada);
}
// Verifica si hubo un reordenamiento de hojas
if (!arraysEqual(currentSheetNames, lastSheetNames)) {
logSheetChange("Reordenamiento", currentSheetNames.join(", "));
}
// Actualiza la lista de nombres de hojas
lastSheetNames = currentSheetNames;
} catch (e) {
Logger.log("Error en checkSheetChanges: " + e.message);
}
}
// Función para registrar cambios en las hojas
function logSheetChange(changeType, sheetName) {
try {
var sheet = getLogsSheet(); // Hoja donde se guardan los logs
var hora = new Date(); // Hora del cambio
var usuario = Session.getActiveUser().getEmail(); // El usuario que realizó el cambio
// Registrar el cambio en la hoja de logs
registrarLog(sheet, "checkSheetChanges", changeType, `Hoja: ${sheetName}`);
Logger.log(`${changeType}: ${sheetName}`);
} catch (e) {
Logger.log("Error en logSheetChange: " + e.message);
}
}
// Función para comparar si dos arrays son iguales
function arraysEqual(a, b) {
return a.length === b.length && a.every((val, index) => val === b[index]);
}
function ocultarHojaLogs() {
try {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var logsSheet = ss.getSheetByName(config.hojaNombre);
if (logsSheet) {
Logger.log("Hoja de Logs encontrada: " + logsSheet.getName());
logsSheet.hideSheet();
Utilities.sleep(1000); // Pausa de 1 segundo
Logger.log("Hoja de Logs oculta.");
} else {
Logger.log("La hoja de Logs no existe.");
}
} catch (e) {
Logger.log("Error al ocultar la hoja de Logs: " + e.message);
}
}
function onEdit(e) {
try {
var sheet = e.range.getSheet();
if (sheet.getName() === config.hojaNombre) return;
var rango = e.range;
var valorNuevo = e.value || "";
var valorAntiguo = e.oldValue || "";
var usuario = Session.getActiveUser().getEmail();
var hora = new Date();
Logger.log(`Valor Antiguo: ${valorAntiguo}, Valor Nuevo: ${valorNuevo}`); // Registro adicional
if (valorAntiguo && !valorNuevo) {
// Se ha borrado el contenido
registrarLog(getLogsSheet(), "onEdit", "Manual", `Borrado en Hoja: ${sheet.getName()}, Rango: ${rango.getA1Notation()}, Antiguo: ${valorAntiguo}`);
} else if (valorNuevo) {
// Se ha añadido o modificado el contenido
registrarLog(getLogsSheet(), "onEdit", "Manual", `Edición en Hoja: ${sheet.getName()}, Rango: ${rango.getA1Notation()}, Antiguo: ${valorAntiguo}, Nuevo: ${valorNuevo}`);
}
} catch (e) {
registrarLog(getLogsSheet(), "onEdit", "Error", "Error en edición", e);
}
}
function ejecutarAutocrat() {
try {
var job = AutocratApp.getJob('nombre_del_job'); // Asegúrate de usar el nombre correcto del trabajo
if (!job) {
registrarLog(getLogsSheet(), "ejecutarAutocrat", "Error", "Trabajo de Autocrat no encontrado.");
return; // Salir si el trabajo no se encuentra
}
job.run();
Utilities.sleep(10000); // Espera 10 segundos para dar tiempo al trabajo a completarse
var estadoTrabajo = job.getStatus();
if (estadoTrabajo === 'SUCCESS') {
registrarLog(getLogsSheet(), "ejecutarAutocrat", "Automático", "El trabajo de Autocrat se completó exitosamente.");
// Verificar si se generaron archivos correctamente
var historial = job.getHistory();
if (historial && historial.length > 0) {
var ultimoHistorial = historial[0];
if (ultimoHistorial.filesGenerated && ultimoHistorial.filesGenerated.length > 0) {
registrarLog(getLogsSheet(), "ejecutarAutocrat", "Automático", "Archivos generados: " + JSON.stringify(ultimoHistorial.filesGenerated));
} else {
registrarLog(getLogsSheet(), "ejecutarAutocrat", "Advertencia", "No se generaron archivos o no se encontraron registros de archivos generados.");
}
} else {
registrarLog(getLogsSheet(), "ejecutarAutocrat", "Advertencia", "No se encontró historial de ejecución del trabajo.");
}
} else if (estadoTrabajo === 'ERROR') {
registrarLog(getLogsSheet(), "ejecutarAutocrat", "Error", "Error al ejecutar el trabajo de Autocrat.");
// Registrar mensajes de error detallados si están disponibles
var historial = job.getHistory();
if (historial && historial.length > 0) {
var ultimoHistorial = historial[0];
if (ultimoHistorial.errorMessage) {
registrarLog(getLogsSheet(), "ejecutarAutocrat", "Error", "Mensaje de error: " + ultimoHistorial.errorMessage);
}
}
} else {
registrarLog(getLogsSheet(), "ejecutarAutocrat", "Advertencia", "Estado desconocido: " + estadoTrabajo);
}
// Obtener el historial y registrarlo
var historial = job.getHistory();
registrarLog(getLogsSheet(), "ejecutarAutocrat", "Automático", "Historial: " + JSON.stringify(historial));
} catch (e) {
registrarLog(getLogsSheet(), "ejecutarAutocrat", "Error", "Error al ejecutar Autocrat", e);
}
}
function crearActivadoresAutomaticos() {
try {
Logger.log("Iniciando creación de activadores...");
Logger.log("Número de activadores existentes: " + ScriptApp.getProjectTriggers().length);
if (ScriptApp.getProjectTriggers().length > 0) {
Logger.log("Los activadores ya existen. No se crearán duplicados.");
return;
}
Logger.log("Creando activador para registrarTodaInformacionDeFunciones...");
var trigger1 = ScriptApp.newTrigger('registrarTodaInformacionDeFunciones')
.timeBased()
.everyHours(1);
Logger.log("Objeto de activador 1: " + trigger1);
trigger1.create();
Logger.log("Activador para registrarTodaInformacionDeFunciones creado.");
Logger.log("Creando activador para checkSheetChanges...");
var trigger2 = ScriptApp.newTrigger('checkSheetChanges')
.timeBased()
.everyHours(1);
Logger.log("Objeto de activador 2: " + trigger2);
trigger2.create();
Logger.log("Activador para checkSheetChanges creado.");
Logger.log("Creando activador para ejecutarAutocrat...");
var trigger3 = ScriptApp.newTrigger('ejecutarAutocrat')
.timeBased()
.everyHours(1);
Logger.log("Objeto de activador 3: " + trigger3);
trigger3.create();
Logger.log("Activador para ejecutarAutocrat creado.");
} catch (e) {
Logger.log("Error al crear activadores: " + e.message);
}
}