var output = {}; var outMessages = []; var outMsg = {}; var outStatus = "success"; var myDebug = {}; var serviceName = "eon.virta.v1.reloadfields.xsjs"; var serviceVersion = '1.0'; var startTS = new Date(); var debugLevel = 0; switch ($.request.parameters.get("debug")) { case "true": case "yes": case "1": debugLevel = 1; break; case "full": case "2": debugLevel = 2; break; } if (debugLevel > 0) { output.requestParams = $.request.parameters; } function setOutputMessage() { output.status = outStatus; output.durationSeconds = Math.floor((new Date() - startTS)/1000); if (debugLevel > 0) { output.debugInfos = myDebug; } output.messages = outMessages; $.response.contentType = "application/json"; $.response.setBody(JSON.stringify(output)); //$.response.status = $.net.http.OK; } function exceptionHandler(ex) { if (outMsg.method && outMessages.indexOf(outMsg) === -1) { outMsg.status = "canceled"; outMessages.push(outMsg); } outMsg = {}; outMsg.method = "exceptionHandler"; outMsg.status = "error"; outMsg.message = ex.toString(); if (debugLevel > 0) { outMsg.exceptionInfo = {}; outMsg.exceptionInfo.name = ex.name; outMsg.exceptionInfo.message = ex.message; outMsg.exceptionInfo.fileName = ex.fileName; outMsg.exceptionInfo.lineNumber = ex.lineNumber; outMsg.exceptionInfo.columnNumber = ex.columnNumber; outMsg.exceptionInfo.stack = ex.stack; //outMsg.exceptionInfo.source = ex.toSource(); } outMessages.push(outMsg); outStatus = "error"; output.status = outStatus; if (debugLevel > 0) { output.debugInfos = myDebug; } output.messages = outMessages; var errbody = JSON.stringify(output); $.response.contentType = 'application/json'; $.response.setBody(errbody); //$.response.status = $.net.http.INTERNAL_SERVER_ERROR; // Workaround, weil CRM scheinbar Probleme mit anderen Statuscodes hat $.response.status = $.net.http.OK; } function checkParams() { var isValid = true; var missingParams = []; try { if (!$.request.parameters.get("field")) { missingParams.push("field"); isValid = false; } } catch (e) { exceptionHandler(e); isValid = false; } if (!isValid) { outMsg = {}; outMsg.method = "checkParams"; outMsg.status = "error"; outStatus = "error"; outMsg.message = "missing mandatory parameters: " + missingParams.join(); outMessages.push(outMsg); $.response.status = $.net.http.BAD_REQUEST; } return isValid; } function getEmpTransactionData() { var limit = 1000; var offset = 0; outMsg = {}; outMsg.method = "getEmpTransactionData"; outMsg.status = "error"; var resultData = {}; var resultSet = []; var conn = $.hdb.getConnection(); do { if (debugLevel > 1) { outMsg.limit = limit; outMsg.offset = offset; } var queryResult = conn.executeQuery( "select UUID, JSONRAW \ from VIRTAPORTAL.EMP_TRANSACTIONS \ where STARTTIME >= '20220101' and JSONRAW is not null \ order by UUID \ limit ? offset ?", limit, offset); var iterator = queryResult.getIterator(); while (iterator.next()) { resultSet.push(iterator.value()); } offset += limit; } while (queryResult.length === limit) conn.close(); resultData = { count: resultSet.length, rows: resultSet }; outMsg.status = "success"; outMsg.result = resultData; if (debugLevel > 0 || outMsg.status === "error") { outMessages.push(outMsg); } return resultData; } function updateEmpFreeMinutes() { var empTransData = getEmpTransactionData(); var completeData = []; if (empTransData.count > 0) { completeData = empTransData.rows.map(function(row) { var parsedData = {}; var valid = true; try { parsedData = JSON.parse(row.JSONRAW); if (!parsedData.hasOwnProperty('empFreeMinutes')) { valid = false; } } catch (e) { valid = false; } return { UUID: row.UUID, FREEMINUTES: parsedData.empFreeMinutes, valid: valid }; }); } // myDebug.completeData = completeData; /*var updateData = completeData.filter(function(row) { return row.valid; }).map(function(row) { return { UUID: row.UUID, FREEMINUTES: row.parsedData.empFreeMinutes }; });*/ //myDebug.updateData = updateData; if (completeData.some(function(row) {return row.valid;})) { var paramList = completeData.filter(function(row) {return row.valid;}).map(function(row) { return [row.FREEMINUTES, row.UUID]; }); outMsg = {}; outMsg.method = "updateData"; outMsg.status = "error"; var resultData = {}; var conn = $.hdb.getConnection(); var statement = "update VIRTAPORTAL.EMP_TRANSACTIONS \ set FREEMINUTES = ? \ where UUID = ?"; if (debugLevel > 1) { outMsg.statement = statement; outMsg.paramList = paramList; } var affectedRows = conn.executeUpdate(statement, paramList); conn.commit(); conn.close(); resultData = { count: affectedRows.reduce(function(cur, acc) {return cur + acc;}, 0) }; outMsg.status = "success"; outMsg.result = resultData; outMessages.push(outMsg); } } function chooseMode(field) { switch (field) { case 'empfreeminutes': updateEmpFreeMinutes(); break; default: exceptionHandler(new Error("unsupported mode: field=" + field)); } } try { if (checkParams()) { chooseMode($.request.parameters.get("field")); } } catch (e) { exceptionHandler(e); } setOutputMessage();