Workbench/backend/target/HMIKonzept.js
chris 2e2f711956 Dateien nach "backend/target" hochladen
CustomFunction to use for the Workbench functions
2026-04-05 17:54:23 +02:00

893 lines
29 KiB
JavaScript

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) {}
}
}
}