web stats
Java Null Pointer Exception when polling DB - Mirth Community

Go Back   Mirth Community > Mirth Connect > Support

Reply
 
Thread Tools Display Modes
  #1  
Old 08-28-2019, 12:42 AM
con con is offline
OBX.1 Kenobi
 
Join Date: Nov 2018
Location: Berlin
Posts: 42
con is on a distinguished road
Default Java Null Pointer Exception when polling DB

I get this Error sometimes. Anyone can help? I use Mirth Connect Server 3.4.1.770 with Java version: 1.8.0_221

Code:
com.mirth.connect.connectors.jdbc.DatabaseReceiver: Failed to poll for messages from the database in channel "PGD_FILE_MEDDOKU_Scancenter"
java.lang.NullPointerException

at net.sourceforge.jtds.jdbc.JtdsPreparedStatement.getParameter(JtdsPreparedStatement.java:560)
	at net.sourceforge.jtds.jdbc.JtdsPreparedStatement.setParameter(JtdsPreparedStatement.java:630)
	at net.sourceforge.jtds.jdbc.JtdsPreparedStatement.setObjectBase(JtdsPreparedStatement.java:616)
	at net.sourceforge.jtds.jdbc.JtdsPreparedStatement.setObject(JtdsPreparedStatement.java:907)
	at com.mirth.connect.connectors.jdbc.DatabaseReceiverQuery.poll(DatabaseReceiverQuery.java:187)
	at com.mirth.connect.connectors.jdbc.DatabaseReceiver.poll(DatabaseReceiver.java:108)
	at com.mirth.connect.donkey.server.channel.PollConnectorJob.execute(PollConnectorJob.java:49)
	at org.quartz.core.JobRunShell.run(JobRunShell.java:213)
	at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:557)
Reply With Quote
  #2  
Old 08-28-2019, 04:43 AM
cory_cole cory_cole is offline
Mirth Guru
 
Join Date: Mar 2012
Posts: 1,360
cory_cole is on a distinguished road
Default

Can you post your query?
Reply With Quote
  #3  
Old 08-28-2019, 05:09 AM
con con is offline
OBX.1 Kenobi
 
Join Date: Nov 2018
Location: Berlin
Posts: 42
con is on a distinguished road
Default

From the Database Reader:

Code:
USE [ExterneDaten]
BEGIN
SELECT [DOCUMENTID]
      ,[STAPELNUMMER]
      ,[DOCUMENTTYP]
      ,[MANDANT]
      ,[FALLNUMMER]
      ,[PATIENTENID]
      ,[NACHNAME]
      ,[VORNAME]
      ,[GEBDATUM]
      ,[AUFNAHMEDATETIME]
      ,[ENTLASSDATETIME]
      ,[DOCUMENTREGISTER]
      ,[CREATEDEPARTMENT]
      ,[DOCUMENTCLASS]
      ,[DOCUMENTKIND]
      ,[DOCUMENTDATE]
      ,[CREATEDATE]
      ,[DOKUMENTENSTATUS]
      ,[BEARBEITUNGSZEITPUNKT]
      ,[DOKUMENTHERKUNFT]
      ,[BEHANDLUNGSART]
      ,[SCANCLIENT]
      ,[BENUTZER]
      ,LEFT([FALLNUMMER], 2) AS 'MandantID'
      ,[ExterneDaten].[dbo].[Kofax_PatDaten_DocExport].[DokumentPfad] AS [PFAD]
  FROM [ExterneDaten].[dbo].[PatientendatenScancenter]
  INNER JOIN [ExterneDaten].[dbo].[Kofax_PatDaten_DocExport] 
  ON [ExterneDaten].[dbo].[PatientendatenScancenter].[DOCUMENTID] = [ExterneDaten].[dbo].[Kofax_PatDaten_DocExport].[DokumentID]
  WHERE [DOKUMENTENSTATUS] IS NULL;
  
  UPDATE [dbo].[PatientendatenScancenter]
   SET [DOKUMENTENSTATUS] = 'cached'
  WHERE [DOCUMENTID] = ${documentid};
END
Reply With Quote
  #4  
Old 08-28-2019, 05:11 AM
con con is offline
OBX.1 Kenobi
 
Join Date: Nov 2018
Location: Berlin
Posts: 42
con is on a distinguished road
Default

Source Filter #1

Code:
var dateString = DateUtil.getCurrentDate('yyyy-dd-MM HH:mm:ss.000');
var driver = 'net.sourceforge.jtds.jdbc.Driver';
var address = 'jdbc:jtds:sqlserver://XXX/ExterneDaten';
var username = 'XXX';
var password = 'XXX';
var dbConn = null;
var result = null;
var curCaseId;
var newCaseId;
var curPatId;
var newPatId;

logger.debug("Debug: Filter 1: Size of PatID: " + msg['patientenid'].toString().length);
logger.debug("Debug: Filter 1: Size of CaseID: " + msg['fallnummer'].toString().length);
logger.debug("Debug: Filter 1: Digit 3 of CaseID: " + msg['fallnummer'].toString().charAt(2));

if (msg['fallnummer'].toString().length == 0 /*Wird nur generiert, wenn Fallnummer & Pat ID leer ist. Ansonsten Fehler*/){
	logger.debug("Debug: IF Filter 1: msg['fallnummer'].toString().length == 0");
	try {
		dbConn = DatabaseConnectionFactory.createDatabaseConnection(driver, address, username, password);
		var cachedSQL = "SELECT TOP (1) [GeneratedCaseId] FROM [ExterneDaten].[dbo].[GeneratedIds];";
		result = dbConn.executeCachedQuery(cachedSQL);
		result.next();
		curCaseId = result.getObject('GeneratedCaseId');
		var resultsize = result.size();
		curCaseId = parseInt(curCaseId);
		logger.debug("Debug: Anzahl der Eintraege fuer generierte CaseIds: " + resultsize);
		logger.debug("Debug: Current Generated Case ID (curCaseId): " + curCaseId);	
	} 
	catch (e) {
		logger.info("Reading Generated Case Id error on Channel: " + channelName +" caused by: " + e);
		return false;
	} finally {
		if (dbConn) {
			dbConn.close();
		}
	}
	//increment curCaseId --> nur wenn db abfrage erfolgreich war oder return false
	curCaseId++;
	newCaseId = curCaseId;
	logger.debug("Debug: New Case id: " + newCaseId);
	try {
		try {
			dbConn = DatabaseConnectionFactory.createDatabaseConnection(driver, address, username, password);
			var newCaseIdSQL = "USE [ExterneDaten] UPDATE [dbo].[GeneratedIds] SET [GeneratedCaseId] = '" + newCaseId + "';";
			result = dbConn.executeUpdate(newCaseIdSQL);
		} 
		catch (e) {
		logger.info("Writing Generated Case Id update error on Channel: " + channelName + " caused by: " + e);
		} finally {
			if (dbConn) {
				dbConn.close();
			}
		}
	} // ende try block 1.1
	catch (e) {
		logger.info("Writing Generated Case Id error on Channel: " + channelName + " caused by: " + e);
	} finally {
		logger.debug("Debug: Writing Generated Case Id error on Channel: " + channelName + " State of dbConn: " + dbConn);
		if (dbConn) {
			dbConn.close();
		}
	}
	//update new generated CaseId in Kofax Table
	try {
		// Mandantenziffer auslesen
		try {
			logger.debug("Debug: Der gefundene Mandant aus der Nachricht: " + msg['mandant'].toString());
			dbConn = DatabaseConnectionFactory.createDatabaseConnection(driver, address, username, password);
			var mandantnrSQL = "SELECT [JD_Einrichtung_Kuerzel], [JD_Einrichtung_Nummer] FROM [ExterneDaten].[dbo].[JD_Einrichtung] WHERE [JD_Einrichtung_Kuerzel] = '" + msg['mandant'] + "';";
			var mandnr = dbConn.executeCachedQuery(mandantnrSQL);
			mandnr.next();
			logger.debug("Debug: Die gefundene Mandantennummer aus der DB: " + mandnr);
			var mandid = mandnr.getObject('JD_Einrichtung_Nummer');
			//mandid = mandnr.replaceAll("\\s", "");
			logger.debug("Debug: Das gefundene Mandantenkuerzel aus der DB: " + mandid);
		} //ende try block 2.1
		catch(e){
			logger.info("Fehler beim Mandantenvergleich aus [dbo].[JD_Einrichtung]. New Mandant: " + mandid + ". Old Mandant: " + msg['mandant'].toString() + " on channel: " + channelName);
			throw('NO MANDANT GENERATED');
		}finally {
			if (dbConn) {
				dbConn.close();
			}
		}
		// Mandantenziffer auslesen
		try {
			logger.debug("Debug: DokumentenID = " + msg['documentid'].toString());
			dbConn = DatabaseConnectionFactory.createDatabaseConnection(driver, address, username, password);
			var updateSQL = "USE [ExterneDaten] UPDATE [dbo].[PatientendatenScancenter] SET [FALLNUMMER] = '" + mandid + "x" + newCaseId + "' WHERE [DOCUMENTID] = '" + msg['documentid'].toString() + "';";
			result = dbConn.executeUpdate(updateSQL);
		} // ende try block 2.2
		catch(e){
			logger.info("Fehler update bei der generierten Fallnummer" + e + " on channel: " + channelName);
			throw('DB ERROR updateSQL');
		} finally {
			if (dbConn) {
				dbConn.close();
			}
		}
		//hier muss noch die Fallnummer mit der message.fallnummer geupdatet werden und in den 2.Filter übetragen werden
		var genCaseId = mandid + "x" + newCaseId;
		connectorMap.put('genCaseId',genCaseId);
		logger.debug("DEBUG PURPOSE, FALLNUMMER (Gen): " + msg['fallnummer'].toString() + genCaseId);
		return true; // verlassen wenn caseid erfolgreich eingesetzt
	} // ende try block 1.2
	catch (e) {
		logger.info("updateSQL from new Case ID error on Channel: " + channelName + " caused by: " + e);
		try {
			dbConn = DatabaseConnectionFactory.createDatabaseConnection(driver, address, username, password);
			var updateSQL = "USE [ExterneDaten] UPDATE [dbo].[PatientendatenScancenter] SET [DOKUMENTENSTATUS] = 'INVALID MANDANT or ERROR reading db', [BEARBEITUNGSZEITPUNKT] = '" + dateString + "' WHERE [DOCUMENTID] = '" + msg['documentid'].toString() + "'";
			result = dbConn.executeUpdate(updateSQL);
		} 
		catch (e){
			logger.info("updateSQL from writing back status for new Case ID error on Channel: " + channelName + " caused by: " + e);
		} finally {
			if (dbConn) {
				dbConn.close();
			}
		throw('DB ERROR update new Case ID');
		}
	}
} // end --> if fallnummer generieren bei null
// start --> else if patId leergelassen 
else if (msg['patientenid'].toString().length != 0 && msg['patientenid'].toString().length != 7 && msg['patientenid'].toString().length != 9) {
	logger.debug("Debug: Else if Filter 2: msg['patientenid'].toString().length != 0 && msg['patientenid'].toString().length != 7 && msg['patientenid'].toString().length != 9");
	try {
		dbConn = DatabaseConnectionFactory.createDatabaseConnection(driver, address, username, password);
		var updateSQL = "USE [ExterneDaten] UPDATE [dbo].[PatientendatenScancenter] SET [DOKUMENTENSTATUS] = 'PAT ID NOT VALID', [BEARBEITUNGSZEITPUNKT] = '" + dateString + "' WHERE [DOCUMENTID] = '" + msg['documentid'].toString() + "';";
		result = dbConn.executeUpdate(updateSQL);
	}
	catch (e){
		logger.info("Status of writing back [DOKUMENTENSTATUS]: " + e + " on channel: " + channelName);
	} finally {
		if (dbConn) {
			dbConn.close();
		}
	}
	//Response.setStatusMessage('Db reading error or CaseID not Found in dbo.PatientendatenKIS'); --> funktioniert so nicht, müsste über responsemap configuriert werden
	logger.info("PAT ID ERROR with PatID: " + msg['patientenid'].toString() + " on channel: " + channelName);
	throw('PAT ID NOT VALID');
	return false; //filtern
} //end --> else if patId leergelassen 
else { //start --> fallnummer gültig/ungültig
	logger.debug("Debug: ELSE FILTER 1") //muesste noch angepasst werden falls alte fallnummern nicht gleich 10-stellig also > 0
	if (msg['fallnummer'].toString().length == 10){
		logger.debug("Debug: Fallnummer im Filter 1 gueltig");
		return true; //filter durchlassen, wenn case id 10 stellig
	}
	else {
		try {
		dbConn = DatabaseConnectionFactory.createDatabaseConnection(driver, address, username, password);
		var updateSQL = "USE [ExterneDaten] UPDATE [dbo].[PatientendatenScancenter] SET [DOKUMENTENSTATUS] = 'CASE ID NOT VALID', [BEARBEITUNGSZEITPUNKT] = '" + dateString + "' WHERE [DOCUMENTID] = '" + msg['documentid'].toString() + "';";
		result = dbConn.executeUpdate(updateSQL);
		}
		catch (e){
			logger.info("Status of writing back [DOKUMENTENSTATUS]: " + e + " on channel: " + channelName);
		} finally {
			if (dbConn) {
				dbConn.close();
			}
		}
	logger.info("CASE ID ERROR with CaseId: " + msg['fallnummer'].toString() + " on channel: " + channelName);
	throw('CASE ID ERROR');
	return false; //filtern
	}	
} // end --> fallnummer gültig/ungültig
Reply With Quote
  #5  
Old 08-28-2019, 05:13 AM
con con is offline
OBX.1 Kenobi
 
Join Date: Nov 2018
Location: Berlin
Posts: 42
con is on a distinguished road
Default

Source Filter #2

Code:
var dateString = DateUtil.getCurrentDate('yyyy-dd-MM HH:mm:ss.000');
var driver = 'net.sourceforge.jtds.jdbc.Driver';
var address = 'jdbc:jtds:sqlserver://XXX/ExterneDaten';
var username = 'XXX';
var password = 'XXX';
var dbConn = null;
var result = null;
var kisCaseID;
var genCaseId = String(connectorMap.get('genCaseId'));

logger.debug("Debug: Current Fallnummer Filter 2: " + msg['fallnummer'].toString() + " oder falls Generiert: " + genCaseId);
logger.debug("Debug: Filter 2: Digit 3 of CaseID(im msgSegment): " + msg['fallnummer'].toString().charAt(2));
logger.debug("Debug: Filter 2: Digit 3 of genCaseID Variable: " + genCaseId.charAt(2));

if(msg['fallnummer'].toString().length == 10 && genCaseId.toString().charAt(2) != 'x') /* Dokumentenherkunft KIS Bezug, muesste auch erweitert werden auf > 0*/ {
	logger.debug("Debug: IF Filter 2: msg['fallnummer'].toString().length == 10 && msg['fallnummer'].toString().charAt(2) != 'x'");
	try { // start --> try block 1
		try { // start -- try block 2
			logger.debug("Debug: 1. Die akzeptierte Fallnummer: " + msg['fallnummer'].toString());
			dbConn = DatabaseConnectionFactory.createDatabaseConnection(driver, address, username, password);
			var cachedSQL = "SELECT [FALLNUMMER], [PATIENTENID] FROM [ExterneDaten].[dbo].[PatientendatenKIS] WHERE [FALLNUMMER] = '" + parseInt(msg['fallnummer'].toString()) + "';";
			// jumps to exception if fails
			result = dbConn.executeCachedQuery(cachedSQL);
			result.next();
			kisCaseId = result.getObject('FALLNUMMER');
			logger.debug("Debug: 2. Die kisCaseID: " + kisCaseId);
			var resultsize = result.size();
			logger.debug("Debug: 3. Anzahl (sollte immer nur 1 sein): " + resultsize);
			//fallnummer in der KIS Tabelle gefunden
			if (kisCaseId == msg['fallnummer'].toString()){ 
				var regnr = kisCaseId.substring(0,2); //funktioniert nicht bei alten caseid aus dem kis ohne mandantenziffer
				logger.debug("Debug: Die ersten beiden Ziffern der Fallnummer: " + regnr);
				// Mandantenaustausch
				try {
					dbConn = DatabaseConnectionFactory.createDatabaseConnection(driver, address, username, password);
					var mandantSQL = "SELECT [JD_Einrichtung_Kuerzel], [JD_Einrichtung_Nummer] FROM [ExterneDaten].[dbo].[JD_Einrichtung] WHERE [JD_Einrichtung_Nummer] = '" + parseInt(regnr) + "';";
					var kuez = dbConn.executeCachedQuery(mandantSQL);
					kuez.next();
					kuez = kuez.getObject('JD_Einrichtung_Kuerzel');
					//kuez = kuez.replaceAll("\\t", "");
					//kuez = kuez.replaceAll("\\n", "");
					kuez = kuez.replaceAll("\\s", "");
					logger.debug("Debug: Der gefundene Mandant aus der DB: " + kuez);
					msg['mandant'] = kuez;
					logger.debug("Debug: Der neue Mandant: " + msg['mandant'].toString());
				} 
				catch(e){
					logger.info("Fehler beim Mandantenvergleich aus [dbo].[JD_Einrichtung]. newMandant: " + kuez + " oldMandant: " + msg['mandant'].toString() + " on channel: " + channelName);
					throw('NO MANDANT FOUND FOR CASEID'); //todo: an anderen channel schicken falls alte caseids gescannt werden sollen
				} finally {
					if (dbConn) {
						dbConn.close();
					}
				}
				// Mandantenaustausch	
				logger.debug("Debug: KIS Fallnummer gefunden. Nachricht wird weiterverarbeitet");
				return true;
			} // end --> if fallnummer in KIS Tabelle gefunden
			else {
				//sollte nie erreicht werden. nur für Verarbeitungsfehler, springt eigentlich in die exception
				logger.info("KIS Fallnummernvergleich fehlgeschlagen" + " on channel: " + channelName);
			}
		} // end --> try block 2 --> fehler in der Abfrage PatientendatenKIS
		catch (e) {
			logger.debug("Debug: 2a. Comparing Scan with CaseId [" + msg['fallnummer'].toString() + "] error on channel: " + channelName + " caused by: " + e);
			logger.debug("Debug: 3a. Document ID for comparing: " + msg['documentid'].toString());
			//setze auf error und verlassen
			//Response.setStatusMessage('Db reading error or CaseID not Found in dbo.PatientendatenKIS');
			//Response.setStatus(ERROR);
			logger.info("Filter 2: Fehler bei der Abfrage der Patientendaten aus [dbo].[PatientendatenKIS]: " + e + " on channel: " + channelName); 
			return false;
		} finally {
			if (dbConn) {
				dbConn.close();
			}
		}
	} // end --> try block 1
	catch (e) {
		logger.info("Filter 2: Comparing Kis Case ID error on Channel: " + channelName + " caused by: " + e);
		//hier rückmeldung in die Datenbank, dass fehler aufgetreten
		try {
			dbConn = DatabaseConnectionFactory.createDatabaseConnection(driver, address, username, password);
			var updateSQL = "USE [ExterneDaten] UPDATE [dbo].[PatientendatenScancenter] SET [DOKUMENTENSTATUS] = 'NO CASE ID FOUND FOR THIS DOCUMENT', [BEARBEITUNGSZEITPUNKT] = '" + dateString + "' WHERE [DOCUMENTID] = '" + msg['documentid'].toString() + "';";
			result = dbConn.executeUpdate(updateSQL);
		}
		catch (e){
			logger.info("Status of writing back [DOKUMENTENSTATUS]: " + e + " on channel: " + channelName);
		} finally {
			if (dbConn) {
				dbConn.close();
			}
		}
		//setze auf error und verlassen
		throw('NO CASE ID FOUND FOR THIS DOCUMENT');
	} finally {
		if (dbConn) {
			dbConn.close();
		}
		logger.debug("Debug: Datenbankverbindungsstatus: " + dbConn + " on channel: " + channelName);
	}
} // end --> if KIS Abfrage

//hier der fall ohne namenskonvertierung, wenn fall aus der kis patientendaten DB
else if (genCaseId.charAt(2) == 'x'){
	logger.debug("Debug: ELSE IF FILTER 2: msg['fallnummer'].toString().charAt(2) == 'x'")
	//var genCaseId = msg['fallnummer'].toString();
	var regnr = genCaseId.substring(0,2);
	logger.debug("Debug: Die ersten beiden Ziffern der Fallnummer: " + regnr);
	// start --> Mandantenaustausch
	try {
		dbConn = DatabaseConnectionFactory.createDatabaseConnection(driver, address, username, password);
		var mandantSQL = "SELECT [JD_Einrichtung_Kuerzel], [JD_Einrichtung_Nummer] FROM [ExterneDaten].[dbo].[JD_Einrichtung] WHERE [JD_Einrichtung_Nummer] = '" + parseInt(regnr) + "';";
		var kuez = dbConn.executeCachedQuery(mandantSQL);
		kuez.next();
		kuez = kuez.getObject('JD_Einrichtung_Kuerzel');
		kuez = kuez.replaceAll("\\s", "");
		logger.debug("Debug: Der gefundene Mandant aus der DB: " + kuez);
		//änderungen der msg mit neuen werten
		msg['fallnummer'] = genCaseId;
		msg['mandant'] = kuez;
		logger.debug("Debug: Der neue Mandant: " + msg['mandant'].toString());
		return true;
		} 
	catch(e){
		logger.info("Fehler beim Mandantenvergleich aus [dbo].[JD_Einrichtung]. newMandant: " + kuez + " oldMandant: " + msg['mandant'].toString() + " on channel: " + channelName);
		throw('NO MANDANT FOUND FOR CASEID');
	} finally {
		if (dbConn) {
			dbConn.close();
		}
	}
	// end --> Mandantenaustausch
}
else{
	logger.debug("Debug: ELSE FILTER 2")
	try {
		dbConn = DatabaseConnectionFactory.createDatabaseConnection(driver, address, username, password);
		var updateSQL = "USE [ExterneDaten] UPDATE [dbo].[PatientendatenScancenter] SET [DOKUMENTENSTATUS] = 'PAT / CASE ID NOT VALID FILTER 2', [BEARBEITUNGSZEITPUNKT] = '" + dateString + "' WHERE [DOCUMENTID] = '" + msg['documentid'].toString() + "';";
		result = dbConn.executeUpdate(updateSQL);
	}
	catch (e){
		logger.info("Status of writing back [DOKUMENTENSTATUS]: " + e + " on channel: " + channelName);
	} finally {
		if (dbConn) {
			dbConn.close();
		}
	}
	throw('CASE/PAD ID ERROR');
	return false; //filter durchlassen
}
Reply With Quote
  #6  
Old 08-28-2019, 05:15 AM
con con is offline
OBX.1 Kenobi
 
Join Date: Nov 2018
Location: Berlin
Posts: 42
con is on a distinguished road
Default

Destination database_response

Code:
var dateString = DateUtil.getCurrentDate('yyyy-dd-MM HH:mm:ss.000');
var driver = 'net.sourceforge.jtds.jdbc.Driver';
var address = 'jdbc:jtds:sqlserver://XXX/ExterneDaten';
var username = 'XXX';
var password = 'XXX';
var dbConn = null;
var result = null;
var dateStringDefault = '1900-01-01T00:00:00.000';
var msgMandant = $('mandant');

if ((msgMandant == 'MLK' || msgMandant == 'EWK') && !!$('pfad')){
	try {
		try {
			dbConn = DatabaseConnectionFactory.createDatabaseConnection(driver, address, username, password);
			var updateSQL = "USE [ExterneDaten] UPDATE [dbo].[PatientendatenScancenter] SET [DOKUMENTENSTATUS] = 'SUCCESS writing file', [BEARBEITUNGSZEITPUNKT] = '" + dateString + "' WHERE [DOCUMENTID] = '" + $('documentid') + "'";
			result = dbConn.executeUpdate(updateSQL);
		} finally {
			if (dbConn) {
				dbConn.close();
			}
		}
	}
	catch (e) {
		try {
			dbConn = DatabaseConnectionFactory.createDatabaseConnection(driver, address, username, password);
			var updateSQL = "USE [ExterneDaten] UPDATE [dbo].[PatientendatenScancenter] SET [DOKUMENTENSTATUS] = 'DB ERROR file write', [BEARBEITUNGSZEITPUNKT] = '" + dateStringDefault + "' WHERE [DOCUMENTID] = '" + $('documentid') + "'";
			result = dbConn.executeUpdate(updateSQL);
		} finally {
			if (dbConn) {
			dbConn.close();
			}
		logger.info("updateSQL error on Channel: " + channelName + " caused by: " + e);
		}
	}
}
else if ((msgMandant != 'MLK' || msgMandant != 'EWK') || $('pfad') === 'null') {
	try {
		try {
			dbConn = DatabaseConnectionFactory.createDatabaseConnection(driver, address, username, password);
			var updateSQL = "USE [ExterneDaten] UPDATE [dbo].[PatientendatenScancenter] SET [DOKUMENTENSTATUS] = 'NOFILE / INVALID MANDAT / PATID or ERROR writing file', [BEARBEITUNGSZEITPUNKT] = '" + dateString + "' WHERE [DOCUMENTID] = '" + $('documentid') + "'";
			result = dbConn.executeUpdate(updateSQL);
		} 
		catch (e){
			logger.info("updateSQL error on Channel: " + channelName + " caused by: " + e);
		} finally {
			if (dbConn) {
				dbConn.close();
			}
		}
	}
	catch (e) {
		try {
			dbConn = DatabaseConnectionFactory.createDatabaseConnection(driver, address, username, password);
			var updateSQL = "USE [ExterneDaten] UPDATE [dbo].[PatientendatenScancenter] SET [DOKUMENTENSTATUS] = 'DB ERROR while writing file', [BEARBEITUNGSZEITPUNKT] = '" + dateStringDefault + "' WHERE [DOCUMENTID] = '" + $('documentid') + "'";
			result = dbConn.executeUpdate(updateSQL);
		}
		catch (e){
			logger.info("updateSQL error on Channel: " + channelName + " caused by: " + e);
			throw('DB ERROR while writing file');
		} finally {
			if (dbConn) {
			dbConn.close();
			}
		}
	}
	logger.info("Mandant not found for [DOCUMENTID]: " + $('documentid') + ". Expect MLK or EWK. Msg Mandant: " + $('mandant') + " on: " + channelName + ". Throwing expception");
	throw('INVALID MANDAT or ERROR writing into Database');
}
else { //irgendwas schiefgelaufen / share nicht erreichbar
	logger.debug("Debug: ELSE DEST DB WRITER")
	try {
		dbConn = DatabaseConnectionFactory.createDatabaseConnection(driver, address, username, password);
		var updateSQL = "USE [ExterneDaten] UPDATE [dbo].[PatientendatenScancenter] SET [DOKUMENTENSTATUS] = 'Mandant not found. Expect MLK or EWK', [BEARBEITUNGSZEITPUNKT] = '" + dateString + "' WHERE [DOCUMENTID] = '" + $('documentid') + "';";
		result = dbConn.executeUpdate(updateSQL);
	}
	catch (e){
		logger.info("updateSQL error on Channel: " + channelName + " caused by: " + e);
		throw('DB ERROR while writing file');
	} finally {
		if (dbConn) {
		dbConn.close();
		}
	}
	logger.info("NOFILE / MANDAT not found or ERROR writing file for [DOCUMENTID]: " + $('documentid') + ". Msg mandant: " + $('mandant') + ". Msg path: " + $('pfad') + ". on: " + channelName + ". Throwing expception");
	throw('NOFILE / INVALID MANDAT / PAT or ERROR writing file');
	return false;
}
Reply With Quote
  #7  
Old 08-30-2019, 09:19 AM
agermano agermano is offline
Mirth Guru
 
Join Date: Apr 2017
Location: Indiana, USA
Posts: 1,176
agermano is on a distinguished road
Default

How does ${documentid} get set? From the stack trace, I think this value is null at the time of polling.

Quote:
Originally Posted by con View Post
From the Database Reader:

Code:
USE [ExterneDaten]
BEGIN
SELECT [DOCUMENTID]
      ,[STAPELNUMMER]
      ,[DOCUMENTTYP]
      ,[MANDANT]
      ,[FALLNUMMER]
      ,[PATIENTENID]
      ,[NACHNAME]
      ,[VORNAME]
      ,[GEBDATUM]
      ,[AUFNAHMEDATETIME]
      ,[ENTLASSDATETIME]
      ,[DOCUMENTREGISTER]
      ,[CREATEDEPARTMENT]
      ,[DOCUMENTCLASS]
      ,[DOCUMENTKIND]
      ,[DOCUMENTDATE]
      ,[CREATEDATE]
      ,[DOKUMENTENSTATUS]
      ,[BEARBEITUNGSZEITPUNKT]
      ,[DOKUMENTHERKUNFT]
      ,[BEHANDLUNGSART]
      ,[SCANCLIENT]
      ,[BENUTZER]
      ,LEFT([FALLNUMMER], 2) AS 'MandantID'
      ,[ExterneDaten].[dbo].[Kofax_PatDaten_DocExport].[DokumentPfad] AS [PFAD]
  FROM [ExterneDaten].[dbo].[PatientendatenScancenter]
  INNER JOIN [ExterneDaten].[dbo].[Kofax_PatDaten_DocExport] 
  ON [ExterneDaten].[dbo].[PatientendatenScancenter].[DOCUMENTID] = [ExterneDaten].[dbo].[Kofax_PatDaten_DocExport].[DokumentID]
  WHERE [DOKUMENTENSTATUS] IS NULL;
  
  UPDATE [dbo].[PatientendatenScancenter]
   SET [DOKUMENTENSTATUS] = 'cached'
  WHERE [DOCUMENTID] = ${documentid};
END
Reply With Quote
  #8  
Old 09-01-2019, 11:46 PM
con con is offline
OBX.1 Kenobi
 
Join Date: Nov 2018
Location: Berlin
Posts: 42
con is on a distinguished road
Default

${documentid} is generated out of the XML from the database query in the source transformer. I think this error occurs, when something went wrong with the mirth. E.g. last time, when the mcservice was not shut down correctly while there was a reboot
Reply With Quote
  #9  
Old 09-03-2019, 09:05 AM
agermano agermano is offline
Mirth Guru
 
Join Date: Apr 2017
Location: Indiana, USA
Posts: 1,176
agermano is on a distinguished road
Default

Well, the source transformer runs after your db reader...
Reply With Quote
  #10  
Old 09-03-2019, 11:34 PM
con con is offline
OBX.1 Kenobi
 
Join Date: Nov 2018
Location: Berlin
Posts: 42
con is on a distinguished road
Default

ok thank you agermano. that wasn't clear. I think I have to write an db Reader script for the source as well to map it before Transformation or set it into a variable before in a T-SQL

maybe like this:

Code:
USE [ExterneDaten]
BEGIN
DECLARE @curDocID int;
SET @curDocID = (SELECT TOP 1 [DOCUMENTID] FROM [ExterneDaten].[dbo].[PatientendatenScancenter].[DOCUMENTID] WHERE [DOKUMENTENSTATUS] IS NULL ORDER BY [DokumentID] ASC) /*get the 1st unprocessed entry*/

SELECT TOP 1 [DOCUMENTID] /*Maybe not neccessery if top 1 */
      ,[STAPELNUMMER]
      ,[DOCUMENTTYP]
      ,[MANDANT]
      ,[FALLNUMMER]
      ,[PATIENTENID]
      ,[NACHNAME]
      ,[VORNAME]
      ,[GEBDATUM]
      ,[AUFNAHMEDATETIME]
      ,[ENTLASSDATETIME]
      ,[DOCUMENTREGISTER]
      ,[CREATEDEPARTMENT]
      ,[DOCUMENTCLASS]
      ,[DOCUMENTKIND]
      ,[DOCUMENTDATE]
      ,[CREATEDATE]
      ,[DOKUMENTENSTATUS]
      ,[BEARBEITUNGSZEITPUNKT]
      ,[DOKUMENTHERKUNFT]
      ,[BEHANDLUNGSART]
      ,[SCANCLIENT]
      ,[BENUTZER]
      ,LEFT([FALLNUMMER], 2) AS 'MandantID'
      ,[ExterneDaten].[dbo].[Kofax_PatDaten_DocExport].[DokumentPfad] AS [PFAD]
  FROM [ExterneDaten].[dbo].[PatientendatenScancenter]
  INNER JOIN [ExterneDaten].[dbo].[Kofax_PatDaten_DocExport] 
  ON [ExterneDaten].[dbo].[PatientendatenScancenter].[DOCUMENTID] = [ExterneDaten].[dbo].[Kofax_PatDaten_DocExport].[DokumentID]
  WHERE [DOKUMENTENSTATUS] IS NULL;
  
  UPDATE [dbo].[PatientendatenScancenter]
   SET [DOKUMENTENSTATUS] = 'cached'
  WHERE [DOCUMENTID] = @curDocID; 
END
why I did it : I want to poll only one Inbound message at once. then mark it as cached after the SELECT to not poll this entry again if there are more than 1 entry with Document Status = NULL

does a database Reader read only one value sequentially (First In) or how does it generate the XML out of the query (if I use "1" as Max Processing Threads)? I did't get this info out of the Mirth User Guide

Last edited by con; 09-04-2019 at 06:11 AM. Reason: missing informations
Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -8. The time now is 08:58 PM.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2020, vBulletin Solutions, Inc.
Mirth Corporation