importPackage(com.itac.mes.api.custom); importPackage(java.lang); importPackage(java.util); importPackage(java.text); importPackage(com.itac.mes.imsapi.domain.container); importPackage(com.itac.persistence.producer); importPackage(javax.inject.inject); importPackage(javax.naming); importPackage(java.io); importPackage(javax.resource); importPackage(javax.sql); importPackage(javax.naming); function getFailuresForStation(stationNumber){ var failureDataResultKeys =["FAILURE_TYPE_CODE","FAILURE_TYPE_DESC" ] var result_mdataGetFailureDataForStation = imsApiService.mdataGetFailureDataForStation(imsApiSessionContext, stationNumber, 0, failureDataResultKeys) var result = _createStructuredResults(result_mdataGetFailureDataForStation.failureDataResultValues, failureDataResultKeys); var resultjson = JSON.stringify(result); return _getErrorForText("0", "Done", [resultjson]); } function getActivities(stationNumber, workorder){ var workplanFilter = new Array( new KeyValue("FUNC_MODE", 0), new KeyValue("WORKORDER_NUMBER", workorder), new KeyValue("STATION_BASED_WORKSTEPS", 0) ); var workplanDataResultHMI = [ "AVO", "Arbeitsschritt", "Prozesschritt", "Beschreibung", "Rueckmeldepflichtig", "Artikelnummer", "Skill"]; var workplanDataResultKeys = [ "WORKSTEP_AVO", "WORKSTEP_NUMBER", "PROCESS_LAYER", "WORKSTEP_DESC", "OBLIGATORY_CONFIRM_FLAG", "PART_NUMBER", "SKILL_LEVEL"]; var result_mdataGetWorkplanData = imsApiService.mdataGetWorkplanData( imsApiSessionContext, stationNumber, // String workplanFilter, // KeyValue[] workplanDataResultKeys // String[] ); var result = _createStructuredResults(result_mdataGetWorkplanData.workplanDataResultValues, workplanDataResultHMI); var resultWorkplan = JSON.stringify(result); var partNumber = result[0].Artikelnummer; var recipe = _getRecipe(stationNumber, partNumber) var resultrecipe = JSON.stringify(recipe); return _getErrorForText("0", "Done", [resultWorkplan, resultrecipe]); } function _getRecipe(stationNumber, part){ var recipeResult=[ "MEASURE_NAME", "FUNCTION", "FUNCTION_DESC", "FUNCTION_STEP", "FUNCTION_STEP_DESC", "LOWER_LIMIT", "UPPER_LIMIT", "NOMINAL", "UNIT" ] var recipeResultKeys =[ "MEASURE_NAME", "FUNCTION", "FUNCTION_DESC", "FUNCTION_STEP", "FUNCTION_STEP_DESC", "MIN_VALUE", "MAX_VALUE", "NOMINAL", "UNIT" ] var resultRezept = imsApiService.mdaGetRecipeData( imsApiSessionContext, stationNumber, // String "-1", "-1", "-1", "-1", "-1", "-1", "-1", "1", [new KeyValue("PART_NUMBER", part), new KeyValue("STATION_NUMBER", stationNumber)], recipeResultKeys) var tempresult = _createStructuredResults(resultRezept.recipeResultValues, recipeResult) return tempresult; }; function _errorText(retCode){ result = imsApiService.imsapiGetErrorText(imsApiSessionContext, retCode); return result.errorString; } function _getErrorForText(returnValue, errorString, outArgs) { var returnvalue = parseInt(returnValue); var result = new Result_customFunctionCommon(); result.outArgs = new Array(outArgs.length); result.return_value = returnvalue; result.errorString = errorString; for (var i = 0; i < outArgs.length; i++) { result.outArgs[i] = outArgs[i]; } return result; } function _createStructuredResults(valuesArray, resultKeys) { var structuredResults = []; // Fall: Objekt mit numerischen Keys, das in ein Array gewandelt werden muss if (typeof valuesArray === "object" && !Array.isArray(valuesArray) && valuesArray !== null) { logHandler.logMessage("valuesArray ist ein Objekt - Versuch, daraus flaches Array zu generieren mit resultKeys."); var tempArray = []; for (var i = 0; valuesArray.hasOwnProperty(i); i++) { tempArray.push("" + valuesArray[i]); // Werte als Strings sichern } // JSON-Struktur aufbauen, wenn resultKeys vorhanden sind if (Array.isArray(resultKeys) && resultKeys.length > 0) { var entrySize = resultKeys.length; for (var i = 0; i < tempArray.length; i += entrySize) { var entry = {}; for (var j = 0; j < entrySize && (i + j) < tempArray.length; j++) { entry[resultKeys[j]] = "" + tempArray[i + j]; } structuredResults.push(entry); } logHandler.logMessage("JSON wurde direkt aus Object und resultKeys generiert."); return structuredResults; } else { logHandler.logMessage("Keine resultKeys vorhanden - Rückgabe als flaches Array."); return tempArray; } } // Fall: Bereits ein Array von Objekten if (Array.isArray(valuesArray) && valuesArray.length > 0 && typeof valuesArray[0] === "object") { return valuesArray; } // Fall: Flaches echtes Array mit resultKeys if (Array.isArray(valuesArray) && valuesArray.length > 0 && Array.isArray(resultKeys) && resultKeys.length > 0) { var entrySize = resultKeys.length; for (var i = 0; i < valuesArray.length; i += entrySize) { var entry = {}; for (var j = 0; j < entrySize && (i + j) < valuesArray.length; j++) { entry[resultKeys[j]] = "" + valuesArray[i + j]; } structuredResults.push(entry); } return structuredResults; } logHandler.logMessage("valuesArray ist leer oder unbrauchbar."); return []; } function getToDOs(stationNumber, serialNumber) { /////////////////////////////////////////////////////////////// // Helper (iTAC-safe) /////////////////////////////////////////////////////////////// function safeResults(values, keys) { if (!values || !values.length) return []; return _createStructuredResults(values, keys); } function safeStringify(obj) { try { return JSON.stringify(obj || []); } catch (e) { return "[]"; } } try{ /////////////////////////////////////////////////////////////// // Result Keys /////////////////////////////////////////////////////////////// var bookingResultKeys = [ "SERIAL_NUMBER","SERIAL_NUMBER_POS","STATION_DESC","STATION_DIAG_NUMBER", "STATION_NUMBER","WORKORDER_NUMBER","WORKSTEP_DESC","WORKSTEP_NUMBER", "BOOK_DATE","BOOK_STATE","CYCLE_TIME","PROCESS_LAYER" ]; var failureDataResultKeys = [ "BOOK_REFERENCE","COMP_NAME","FAILURE_ACTION_CODE","FAILURE_ACTION_INFO", "FAILURE_CAUSE_CODE","FAILURE_CAUSE_DESC","FAILURE_CAUSE_INFO", "FAILURE_IMAGE_CODE","FAILURE_IMAGE_DESC","FAILURE_MEASURE_CODE", "FAILURE_MEASURE_INFO","FAILURE_SEQUENCE_NUMBER","FAILURE_TYPE_CODE", "FAILURE_TYPE_DESC","FAILURE_TYPE_INFO","INFO","INFO_TXT_REPAIR", "MAJOR_FAILURE","PART_DESC","PART_NUMBER","REPAIRED","REPAIRED_DATE", "SERIAL_NUMBER","SERIAL_NUMBER_POS","STATION_DIAG_NUMBER", "STATION_NUMBER","STATION_REPAIR_DESC","WORKORDER_NUMBER" ]; var failureSlipDataResultKeys = [ "BOOK_DATE","BOOK_REFERENCE","COMP_NAME","FAILURE_SLIP_REFERENCE", "SEQUENCE_NUMBER","STATION_NUMBER","TEST_STEP_NAME", "WORKORDER_NUMBER","WORKSTEP_NUMBER" ]; var measureDataResultKeys = [ "FUNCTION","FUNCTION_DESC","FUNCTION_STEP","LOWER_LIMIT", "MEASURE_FAIL_CODE","MEASURE_NAME","MEASURE_TYPE","MEASURE_VALUE", "NOMINAL","SEQUENCE_NUMBER","SERIAL_NUMBER","SERIAL_NUMBER_POS", "STATION_DESC","STATION_NUMBER","TOLERANCE","UNIT","UPPER_LIMIT", "WORKORDER_NUMBER","WORKSTEP_NUMBER" ]; var mergedPartsKeys = [ "SERIAL_NUMBER","SERIAL_NUMBER_POS","SERIAL_SLAVE_NUMBER", "PART_NUMBER","PART_DESC","BOM_VERSION","BOM_VARIANT", "STATION_NUMBER","WORKORDER_NUMBER" ]; var setupResultKeys = [ "COMP_NAME","PART_NUMBER","MATERIAL_BIN_NUMBER","BOOK_DATE", "SETUP_POSITION", "WORKSTEP_NUMBER","STATION_NUMBER","STATION_DESC","WORKORDER_NUMBER" ]; /////////////////////////////////////////////////////////////// // Serial History /////////////////////////////////////////////////////////////// var result = imsApiService.trGetSerialNumberHistoryData( imsApiSessionContext, stationNumber, serialNumber, -1, // serialNumberPos 2, // processLayer 1, // desolvingSerialNumber 0, // desolvingLevel bookingResultKeys, failureDataResultKeys, failureSlipDataResultKeys, measureDataResultKeys ); var layer =_getConfig(stationNumber); var result_setupGetSetupDataBySerialNumber =imsApiService.setupGetSetupDataBySerialNumber( imsApiSessionContext, stationNumber, serialNumber,"-1", "-1", "-1", setupResultKeys ); /////////////////////////////////////////////////////////////// // Safe Result Parsing /////////////////////////////////////////////////////////////// var bookingResult = safeResults(result.bookingResultValues, bookingResultKeys); var failureResult = safeResults(result.failureDataResultValues, failureDataResultKeys); var failureSlip = safeResults(result.failureSlipDataResultValues, failureSlipDataResultKeys); var measurement = safeResults(result.measureDataResultValues, measureDataResultKeys); var setup = safeResults(result_setupGetSetupDataBySerialNumber.setupResultValues, setupResultKeys); var attributes = _attributes(stationNumber, result.workOrderNumber); var attributesSNR = _attributesSNR(stationNumber,serialNumber); var snrHist = _getSerialNumberHistoryDataBySql(serialNumber); var workorder = result.workOrderNumber; if (!workorder) { return _getErrorForText(result.return_value, _errorText(result.return_value), []); } /////////////////////////////////////////////////////////////// // Workplan /////////////////////////////////////////////////////////////// var workplanFilter = [ new KeyValue("FUNC_MODE", 0), new KeyValue("WORKORDER_NUMBER", workorder), new KeyValue("WORKSTEP_FLAG", 1) ]; var workplanDataResultHMI = [ "AVO","Arbeitsschritt","Prozesslage", "Beschreibung", "Rueckmeldepflichtig","Artikelnummer","Skill" ]; var workplanDataResultKeys = [ "WORKSTEP_AVO","WORKSTEP_NUMBER","PROCESS_LAYER", "WORKSTEP_DESC", "OBLIGATORY_CONFIRM_FLAG","PART_NUMBER","SKILL_LEVEL" ]; var wpResult = imsApiService.mdataGetWorkplanData( imsApiSessionContext, stationNumber, workplanFilter, workplanDataResultKeys ); var resultwp = safeResults(wpResult.workplanDataResultValues, workplanDataResultHMI); if (!resultwp.length) { return _getErrorForText(wpResult.return_value, _errorText(wpResult.return_value), []); } /////////////////////////////////////////////////////////////// // Recipe (safe) /////////////////////////////////////////////////////////////// var partNumber = resultwp[0].Artikelnummer; var recipe = []; try { if (partNumber) { recipe = _getRecipe(stationNumber, partNumber); } } catch (e) { recipe = []; logHandler.logMessage("getRecipe failed: " + e); } /////////////////////////////////////////////////////////////// // SetupCheck /////////////////////////////////////////////////////////////// //var result_setupCheck = imsApiService.setupCheck( // imsApiSessionContext, // stationNumber, // "-1", // "-1", // workorder, // "-1", // 0, // 2 // ); var result_setupCheck = imsApiService.setupGetMaterialSetup( imsApiSessionContext, stationNumber, "-1", 0, "-1", "-1", [ "PART_NUMBER", "MATERIAL_BIN_NUMBER", "MATERIAL_BIN_QTY_ACTUAL", "MATERIAL_BIN_STATE", "EXPIRATION_DATE", "SETUP_POSITION" ], [] ); var setupOutput = []; if ( result_setupCheck.setupResultValues && result_setupCheck.setupResultValues.length > 0 ) { var values = result_setupCheck.setupResultValues; var COLS = 6; // Anzahl der ResultKeys if (values.length % COLS !== 0) { throw "setupGetMaterialSetup: Value count mismatch"; } for (var i = 0; i < values.length; i += COLS) { setupOutput.push({ partNumber: String(values[i]).trim(), materialBinNumber: String(values[i + 1]).trim(), materialBinQtyActual: String(values[i + 2]).trim(), materialBinState: String(values[i + 3]).trim(), expirationDate: String(values[i + 4]).trim(), setupPosition: String(values[i + 5]).trim() }); } } var bomDataResultKeys = ["COMP_NAME", "PART_NUMBER", "PART_DESC", "PROCESS_LAYER","QUANTITY", "PRODUCT_FLAG", "SETUP_FLAG", "UNIT", "WORKSTEP_NUMBER" ,"SETUP_POSITION"]; var result_bomData = imsApiService.mdataGetBomData( imsApiSessionContext, stationNumber, [ new KeyValue("SERIAL_NUMBER", serialNumber)], bomDataResultKeys ); var createBomStructResults= _createStructuredResults(result_bomData.bomDataResultValues,bomDataResultKeys ); var setupOutputMerged= _mergeSetupToBom(createBomStructResults, setupOutput); /////////////////////////////////////////////////////////////// // Final Return (safe) /////////////////////////////////////////////////////////////// return _getErrorForText( "0", "Done", [ safeStringify(resultwp), safeStringify(recipe), safeStringify(bookingResult), safeStringify(failureResult), safeStringify(failureSlip), safeStringify(measurement), safeStringify(setup), safeStringify(setupOutputMerged), safeStringify(attributes), safeStringify(attributesSNR), JSON.stringify(snrHist), result_setupCheck.return_value, layer ] ); }catch (e){ return _getErrorForText( "-1", "error", [e]) } } function clearSetup(stationNumber){ var result_trGSS = imsApiService.trGetStationSetting( imsApiSessionContext, stationNumber, ["PART_NUMBER", "BOM_VERSION_ERP", "PROCESS_LAYER", "WORKORDER_NUMBER", "QUANTITY"] ); if (result_trGSS.return_value != 0) { Result(result_trGSS.return_value, getImsApiErrorText(result_trGSS.return_value), "") } var result_setupStateChange = imsApiService.setupStateChange(imsApiSessionContext, stationNumber, result_trGSS.stationSettingResultValues[2], result_trGSS.stationSettingResultValues[3], "-1", -1, 2); return _getErrorForText("0", "Done", []); } function activateSetup(stationNumber){ var result_trGSS = imsApiService.trGetStationSetting( imsApiSessionContext, stationNumber, ["PART_NUMBER", "BOM_VERSION_ERP", "PROCESS_LAYER", "WORKORDER_NUMBER", "QUANTITY"] ); if (result_trGSS.return_value != 0) { Result(result_trGSS.return_value, getImsApiErrorText(result_trGSS.return_value), "") } var result_setupStateChange = imsApiService.setupStateChange(imsApiSessionContext, stationNumber, result_trGSS.stationSettingResultValues[2], result_trGSS.stationSettingResultValues[3], "-1", -1, 0); if (result_setupStateChange.return_value != 0) { return _getErrorForText(result_setupStateChange.return_value, getImsApiErrorText(result_setupStateChange.return_value), "") } return _getErrorForText("0", "Done", []); } function setSetup(stationNumber,uniqueid, pos , mode){ var setupstate = 0; if (mode==="setup"){ setupstate = 0 } else { setupstate = 1 } var result_setupUpdateMaterialSetup = imsApiService.setupUpdateMaterialSetup( imsApiSessionContext, stationNumber, -1, "-1", "-1", "SMT", ["ERROR_CODE", "MATERIAL_BIN_NUMBER", "SETUP_POSITION", "SETUP_STATE"], [0, uniqueid, pos, setupstate], ["COMP_REFERENCE"], []); if (result_setupUpdateMaterialSetup.return_value != 0) { return _getErrorForText(result_setupUpdateMaterialSetup.return_value, getImsApiErrorText(result_setupUpdateMaterialSetup.return_value), "") } return _getErrorForText("0", "Done", []); } function _getConfig(stationNumber) { var result = imsApiService.mdataGetStationConfiguration( imsApiSessionContext, stationNumber, [new KeyValue("CODE_NUMBER", 8310)], ["CODE_VALUE", "IS_USED"], [], [] ); var values = result.stationConfigCodeResultValues; if (values && values.length >= 2) { var codeValue = String(values[0]).trim(); var isUsed = Number(values[1]); logHandler.logMessage( "used : " + isUsed + " | codeValue : " + codeValue ); if (isUsed === 1 && codeValue === "A") { logHandler.logMessage("Return : A"); return "A"; } } logHandler.logMessage("Return : L"); return "L"; } function getImsApiErrorText(retCode) { logHandler.logMessage( "ClientController.getImsApiErrorText() Code: " + retCode ); var errorText = ""; var result; try { result = imsApiService.imsapiGetErrorText(imsApiSessionContext, retCode); } catch (th) { logHandler.logMessage("custom function resetPipe failed: " + th); result.outArgs = logHandler.getMessages(); result.return_value = 0; result.errorString = th; return result; } if (result != null) { errorText = result.errorString; } return errorText; } function activateWorkorder(stationNumber, snr, avo, layer){ var result_trGSNI = imsApiService.trGetSerialNumberInfo( imsApiSessionContext, stationNumber, snr, "-1", ["WORKORDER_NUMBER"] ); var wo = result_trGSNI.serialNumberResultValues[0]; var layermapping; var config = String(_getConfig(stationNumber)).trim(); if (config === "A") { layermapping = String(avo).trim(); } else { layermapping = String(layer).trim(); } var result_trGetStationSetting= imsApiService.trGetStationSetting(imsApiSessionContext, stationNumber, ["WORKORDER_NUMBER", "PROCESS_LAYER"]); var wostation = String(result_trGetStationSetting.stationSettingResultValues[0]); var layerStation = String(result_trGetStationSetting.stationSettingResultValues[0]); if (wo !=wostation && layerStation!=layermapping){ var result_trActivateWorkOrder = imsApiService.trActivateWorkOrder(imsApiSessionContext, stationNumber, wo, "-1", "-1", layermapping, 1); return _getErrorForText(result_trActivateWorkOrder.return_value, "Done", []); } else { return _getErrorForText(0, "Done", []); } } function _mergeSetupToBom(bomResults, setupOutput) { logHandler.logMessage("setupOutput.length:"+ setupOutput.length); logHandler.logMessage("bomResults.length:"+ bomResults.length); for (var i = 0; i < bomResults.length; i++) { var bom = bomResults[i]; var partNumber = String(bom.PART_NUMBER).trim(); var matches = []; for (var j = 0; j < setupOutput.length; j++) { var s = setupOutput[j]; var spart = String(s.partNumber); logHandler.logMessage("Setuppart " +s.partNumber + "| BomPart :" +partNumber) if (spart === partNumber) { matches.push(s); } } if (matches.length > 0) { var positions = []; var binNumbers = []; var binQtys = []; var binStates = []; var expirationDates = []; for (var k = 0; k < matches.length; k++) { var m = matches[k]; positions.push(m.setupPosition); binNumbers.push(m.materialBinNumber); binQtys.push(m.materialBinQtyActual); binStates.push(m.materialBinState); expirationDates.push(m.expirationDate); } bom.SETUP_POSITIONS = positions.join(", "); bom.MATERIAL_BIN_NUMBERS = binNumbers.join(", "); bom.MATERIAL_BIN_QTYS = binQtys.join(", "); bom.MATERIAL_BIN_STATES = binStates.join(", "); bom.EXPIRATION_DATES = expirationDates.join(", "); } else { bom.SETUP_POSITIONS = ""; bom.MATERIAL_BIN_NUMBERS = ""; bom.MATERIAL_BIN_QTYS = ""; bom.MATERIAL_BIN_STATES = ""; bom.EXPIRATION_DATES = ""; } } return bomResults; } function _attributes(stationNumber, workorderNumber){ var wpIDresult = imsApiService.mdataGetWorkplanData(imsApiSessionContext, stationNumber, [new KeyValue("WORKORDER_NUMBER", workorderNumber)],["WORKPLAN_ID"]); var wpID = wpIDresult.workplanDataResultValues[wpIDresult.workplanDataResultValues.length -1 ]; var attributeResult = ["ATTRIBUTE_CODE", "ATTRIBUTE_VALUE", "WORKSTEP_AVO", "WORKSTEP_NUMBER", "ERROR_CODE"]; var attribGetAttributeCode_result = imsApiService.attribGetAttributeValues(imsApiSessionContext, stationNumber, 12, wpID, -1, [], 0, attributeResult); var structAtrrib = _createStructuredResults(attribGetAttributeCode_result.attributeResultValues, attributeResult); return structAtrrib; } function _attributesSNR(stationNumber, serialNumber){ var attributeResult = ["ATTRIBUTE_CODE", "ATTRIBUTE_VALUE", "ERROR_CODE"]; var attribGetAttributeCode_result = imsApiService.attribGetAttributeValues(imsApiSessionContext, stationNumber, 0, serialNumber, -1, [], 0, attributeResult); var structAtrrib = _createStructuredResults(attribGetAttributeCode_result.attributeResultValues, attributeResult); return structAtrrib; } function _getSerialNumberHistoryDataBySql(refSNR) { var connection = null; var pstmt = null; var rs = null; var serialNumberArray = []; try { if (!refSNR) { return serialNumberArray; } // DB-Verbindung var InitialContext = javax.naming.InitialContext; var ctx = new InitialContext(); var access = ctx.doLookup("dsMesMiiNJTA"); connection = access.getConnection(); // SQL holen var sql = _buildSerialHistorySql(); pstmt = connection.prepareStatement(sql); // Parameter binden var paramIndex = 1; pstmt.setString(paramIndex++, String(refSNR)); rs = pstmt.executeQuery(); while (rs.next()) { var snr = rs.getString("SNR"); var lastBookStation = rs.getString("STATION_NUMBER"); var bookState = rs.getString("BOOK_STATE"); var positionFromDb = rs.getString("POSITION"); var ws = rs.getString("ARBEITSSCHRITT"); serialNumberArray.push({ serialNumber: String(snr), serialNumberPos: String(positionFromDb), bookState: String(bookState), workstep: String(ws), lastBookStation: String(lastBookStation) }); } return serialNumberArray; } finally { if (rs !== null) try { rs.close(); } catch (e) {} if (pstmt !== null) try { pstmt.close(); } catch (e) {} if (connection !== null) try { connection.close(); } catch (e) {} } } function _buildSerialHistorySql() { return "" + "SELECT " + " t.STATION_NUMBER, " + " t.SNR, " + " t.POSITION, " + " t.BOOK_STATE, " + " t.ARBEITSSCHRITT " + "FROM ( " + " SELECT " + " kst.KAP_NR AS STATION_NUMBER, " + " cs.SNR_EXT AS SNR, " + " cs.NUTZEN_POS AS POSITION, " + " qs.AS_NR AS ARBEITSSCHRITT, " + " (qs.GUT_NA - 10001) AS BOOK_STATE, " + " ROW_NUMBER() OVER ( " + " PARTITION BY cs.SNR_EXT, qs.AS_NR " + " ORDER BY qs.SEQ_NR DESC " + " ) AS RN " + " FROM glo.qs_haupt qs " + " JOIN glo.charge_snr cs " + " ON cs.SNR_ID = qs.SNR_ID " + " JOIN bde.kast kst " + " ON kst.KAP_ID = qs.KAP_ID " + " WHERE cs.AKTIV = 'J' " + " AND cs.REF_SNR_ID = ( " + " SELECT REF_SNR_ID " + " FROM glo.charge_snr " + " WHERE SNR_EXT = ? " + " ) " + ") t " + "WHERE t.RN = 1 " + "ORDER BY t.SNR, t.ARBEITSSCHRITT"; } function searchMeasurementData(inArgs) { var payload = JSON.parse(inArgs); var partNumber = payload.partNumber || ""; var workorderNumber = payload.workorderNumber || ""; var startDate = payload.startDate ? java.sql.Timestamp.valueOf(payload.startDate) : null; var endDate = payload.endDate ? java.sql.Timestamp.valueOf(payload.endDate) : null; var connection = null; var pstmt = null; var rs = null; var resultList = []; function getStringSafe(rs, column) { var val = rs.getObject(column); return val != null ? String(val) : null; } try { var InitialContext = javax.naming.InitialContext; var ctx = new InitialContext(); var access = ctx.doLookup("dsMesMiiNJTA"); connection = access.getConnection(); var sql = "" + "SELECT " + " STATION_NUMBER, STATION_DESC, PART_NUMBER, WORKORDER_NUMBER, " + " WORKORDER_DESC, SEQUENCE_NUMBER, BOOK_DATE, MEASURE_STEP_NUMBER, " + " MEASURE_NAME, UNIT, MEASURE_VALUE, LOWER_LIMIT, UPPER_LIMIT, " + " NOMINAL, TOLERANCE, MEASURE_FAIL_CODE, MEASURE_TYPE " + "FROM IMS_VIEW.V_MEASUREMENT_DATA " + "WHERE 1 = 1 "; var params = []; if (partNumber != null && String(partNumber).trim() !== "") { sql += " AND PART_NUMBER = ? "; params.push({ type: "string", value: String(partNumber).trim() }); } if (workorderNumber != null && String(workorderNumber).trim() !== "") { sql += " AND WORKORDER_NUMBER = ? "; params.push({ type: "string", value: String(workorderNumber).trim() }); } if (startDate != null && endDate != null) { sql += " AND BOOK_DATE BETWEEN ? AND ? "; params.push({ type: "timestamp", value: new java.sql.Timestamp(startDate.getTime()) }); params.push({ type: "timestamp", value: new java.sql.Timestamp(endDate.getTime()) }); } else if (startDate != null) { sql += " AND BOOK_DATE >= ? "; params.push({ type: "timestamp", value: new java.sql.Timestamp(startDate.getTime()) }); } else if (endDate != null) { sql += " AND BOOK_DATE <= ? "; params.push({ type: "timestamp", value: new java.sql.Timestamp(endDate.getTime()) }); } sql += " ORDER BY BOOK_DATE ASC"; pstmt = connection.prepareStatement(sql); for (var i = 0; i < params.length; i++) { var paramIndex = i + 1; if (params[i].type === "string") { pstmt.setString(paramIndex, params[i].value); } else if (params[i].type === "timestamp") { pstmt.setTimestamp(paramIndex, params[i].value); } } rs = pstmt.executeQuery(); while (rs.next()) { resultList.push({ stationNumber: getStringSafe(rs, "STATION_NUMBER"), stationDesc: getStringSafe(rs, "STATION_DESC"), partNumber: getStringSafe(rs, "PART_NUMBER"), workorderNumber: getStringSafe(rs, "WORKORDER_NUMBER"), workorderDesc: getStringSafe(rs, "WORKORDER_DESC"), sequenceNumber: getStringSafe(rs, "SEQUENCE_NUMBER"), bookDate: getStringSafe(rs, "BOOK_DATE"), measureStep: getStringSafe(rs, "MEASURE_STEP_NUMBER"), measureName: getStringSafe(rs, "MEASURE_NAME"), unit: getStringSafe(rs, "UNIT"), measureValue: getStringSafe(rs, "MEASURE_VALUE"), lowerLimit: getStringSafe(rs, "LOWER_LIMIT"), upperLimit: getStringSafe(rs, "UPPER_LIMIT"), nominal: getStringSafe(rs, "NOMINAL"), tolerance: getStringSafe(rs, "TOLERANCE"), failCode: getStringSafe(rs, "MEASURE_FAIL_CODE"), measureType: getStringSafe(rs, "MEASURE_TYPE") }); } return _getErrorForText( "0", "Done", [JSON.stringify(resultList)]) ; } catch (e) { throw new Error("Fehler in _searchMeasurementData: " + e); } finally { if (rs !== null) { try { rs.close(); } catch (e1) {} } if (pstmt !== null) { try { pstmt.close(); } catch (e2) {} } if (connection !== null) { try { connection.close(); } catch (e3) {} } } }