Universal Schnittstelle - Import via Scripts Das Import.py Script |
Dieses Script ist für einige Datenbankstatements zuständig und stellt die XML-Struktur her.
Nähere Erklärungen finden Sie in den Kommentaren der Datei. Die Kommentare sind farblich markiert um die Deutlichkeit der Struktur zu garantieren.
Grün markierte Kommentare geben sonstige Formatierungen und benötigte Implementierungen an.
Das Script können sie durch klicken auf das + sichtbar machen.
#Hier werden alle Imports gemacht import sys sys.path.append("scripts")
from de.opencom.planout.common.Visualisierung import *; from de.opencom.planout.python import * from javax.xml.parsers import *; from java.lang import *; from java.sql import *; from com.sun.org.apache.xml.internal.serialize import *; from de.opencom.common.util import *; from java.text import SimpleDateFormat; import InterfaceHelper as InterfaceHelper; from InterfaceHelper import *
#Hier wird das Datumsformat festgelegt, da ein spezielles Datumsformat benötigt #und dieses in einer anderen Formatierung aus der Datenbank geladen wird outputFormat = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS")
#Diese Methode stellt die Verbindung zur Datenbank her def connectToDatabase(): Class.forName("org.apache.derby.jdbc.EmbeddedDriver") databaseConnection = DriverManager.getConnection("jdbc:derby:C:\Datenbanken\ScriptImportDemo") return databaseConnection
#Diese Methode regelt den Import - Hier werden Datenbank-Statements gesetzt um die benötigten Daten #zu bekommen und das, mit Daten gefüllte, XML-Dokument erzeugt def runImport():
#Hier wird ein neues XML-Dokument per DOM-Modul erstellt xmlDocument = factoryDocument()
#Folgender Ablauf, fügt die ersten Elemente an das Dokument an #"PLANOUT" wird im XML-Dokument zu <PLANOUT> konvertiert und an das Dokument(xmlDocument) angehängt, #jedoch wird "xmlDocument" nicht als Datenstruktur mit z.B. <xmlDocument> im Dokument angezeigt nodePlanout = appendElement("PLANOUT", xmlDocument) nodeRessources = appendElement("RESOURCES", nodePlanout) nodeProjects = appendElement("PROJECTS", nodePlanout)
#Die Verbindung zur Datenbank herstellen und ein Statement erstellen connectionToDatabase = connectToDatabase() #Hier wird die vorher erstellte Methode connectToDatabase aufgerufen um die benötigte Verbindung mit #der Datenbank herzustellen statementDatabase = connectionToDatabase.createStatement() #Erstellt das Statement
# #Hier wird die Verbindung mit der PLANOUT Datenbank hergestellt und wieder ein Statement erstellt statementPlanout = PyMethods.getDBStatement()
# #Alle ID´s und Timestamps werden ausgewählt und die Verbindungen zwischen Projekt und Vorgängen geschaffen resultSetPlanout = statementPlanout.executeQuery("select external_id, ext_timestamp from t_task where project_fk = task_id")
# #Hier wird eine zuordnung der IDs zu den Timestamps erstellt extIDToTimestampMap = {} while resultSetPlanout.next(): externalID = resultSetPlanout.getString("external_id") externalTimeStamp = resultSetPlanout.getString("ext_timestamp") if None != externalID: extIDToTimestampMap[externalID] = externalTimeStamp
loMappAddedResources = []
#Hier werden alle Daten der View zurückgeliefert resultSetDatabase = statementDatabase.executeQuery("select * from Fertigungs_Auftrag") while resultSetDatabase.next():
# #Dies ist die ID des Projektes, diese wird benötigt um eine Verbindung zwischen dem externen und dem internen Projekt zu erstellen projectID = resultSetDatabase.getString("Fert_Nr")
#Hier wird der Timestamp ausgewählt und überprüft ob das Projekt importiert werden muss lstrExternalTimeStamp = resultSetDatabase.getString("PO_Timestamp")
lstrExternalTimeStampToSet = lstrExternalTimeStamp
if None != lstrExternalTimeStamp: lstrExternalTimeStampToSet = lstrExternalTimeStamp
# #Hier wird anhand des Timestamp überprüft ob eine Änderung der Daten/View vorliegt if extIDToTimestampMap.has_key(projectID): print ' nodeProject already imported... check timestamp ' + (str)(lstrExternalTimeStamp) timestampInPO = extIDToTimestampMap[projectID] print ' Internal timestamp is ' + (str)(timestampInPO) isImported = 1 if None != timestampInPO and None != lstrExternalTimeStamp and Long.parseLong(timestampInPO) != Long.parseLong(lstrExternalTimeStamp): print ' -> Skip the nodeProject....' continue else: isImported = 0
#Ordnet die Tabellendaten Variablen zu dbRessources = resultSetDatabase.getString("Ressource") dbShortname = resultSetDatabase.getString("Art_Bez") dbFertNr = resultSetDatabase.getString("Fert_Nr") dbEndDate = resultSetDatabase.getDate("EndTermin") formattedDbEndDate = outputFormat.format(dbEndDate)
dbStartDate = resultSetDatabase.getDate("StartTermin") formattedDbStartDate = outputFormat.format(dbStartDate)
#Erstellt die weiterführende Struktur um Ressourcen an Vorgänge hängen zu können if dbRessources != None and not dbRessources in loMappAddedResources: nodeRessource = appendElement("RESOURCE", nodeRessources) appendTextElement("SHORT_NAME", dbRessources, nodeRessource) appendTextElement("EXTERNAL_ID", dbRessources, nodeRessource) appendTextElement("DEFAULT_CAPACITY", "8", nodeRessource) loMappAddedResources.append(dbRessources)
#Erstellt die Projekt-Struktur und füllt alle benötigten Werte mit den Daten der Datenbank nodeProject = appendElement("PROJECT", nodeProjects) appendTextElement("SHORT_NAME", dbShortname, nodeProject) appendTextElement("ID_NUMBER", dbFertNr, nodeProject) appendTextElement("EXTERNAL_ID", projectID, nodeProject) appendTextElement("EXTERNAL_TIMESTAMP", lstrExternalTimeStampToSet , nodeProject)
#Erstellt die Vorgangs-Struktur und füllt alle benötigten Werte mit den Daten der Datenbank nodeChildren = appendElement("CHILDREN", nodeProject) task = appendElement("TASK", nodeChildren) appendTextElement("SHORT_NAME", dbShortname, task) appendTextElement("EXTERNAL_ID", projectID + "mon", task) appendTextElement("TASK_TYPE", "Montage", task) appendTextElement("STARTDATE_TARGET", formattedDbStartDate, task) appendTextElement("ENDDATE_TARGET", formattedDbEndDate, task) appendTextElement("DURATION_UNIT", "WORKDAY", task)
#Hängt die Ressourcen an die Vorgänge an if dbRessources != None: taskResources = appendElement("TASK_RESOURCES", task) taskResource = appendElement("TASK_RESOURCE", taskResources) appendTextElement("RESOURCE", dbRessources, taskResource) appendTextElement("WORKING_UNITS", "1", taskResource) appendTextElement("TARGET_CAPACITY", "8", taskResource)
Gibt die XML-Struktur in der Konsole aus printDocument(xmlDocument) JPOInterface.getInstance().getPlanoutServer().getUniversalInterface().runImport(xmlDocument) print "Import done"
|
|