ScriptTool erweitert und Beispiel hinzugefügt
This commit is contained in:
parent
77e472e016
commit
d88469e711
@ -58,7 +58,7 @@ der für die Umgebung korrekte Mandant automatisch verwendet wird.
|
|||||||
Anbindung eigener Tools
|
Anbindung eigener Tools
|
||||||
-----------------------
|
-----------------------
|
||||||
|
|
||||||
Ursprünglich wurde `PyAPplus64` für die Anbindung einer APplus-Anpassung geschrieben. Dieses ist
|
Ursprünglich wurde `PyAPplus64` für die Anbindung einer APplus-Anpassung geschrieben. Diese Anpassung ist
|
||||||
als Windows-Service auf einem eigenen Rechner installiert und überwacht dort ein bestimmtes Verzeichnis.
|
als Windows-Service auf einem eigenen Rechner installiert und überwacht dort ein bestimmtes Verzeichnis.
|
||||||
Bei Änderungen an Dateien in diesem Verzeichnis (Hinzufügen, Ändern, Löschen) werden die Dateien verarbeitet
|
Bei Änderungen an Dateien in diesem Verzeichnis (Hinzufügen, Ändern, Löschen) werden die Dateien verarbeitet
|
||||||
und die Ergebnisse an APplus gemeldet. Dafür werden DB-Operationen aber auch SOAP-Calls benutzt.
|
und die Ergebnisse an APplus gemeldet. Dafür werden DB-Operationen aber auch SOAP-Calls benutzt.
|
||||||
|
@ -17,7 +17,7 @@ das Deploy-, das Test- und das Prod-System. Ein Beispiel ist im Unterverzeichnis
|
|||||||
:linenos:
|
:linenos:
|
||||||
|
|
||||||
Damit nicht in jedem Script immer wieder neu die Konfig-Dateien ausgewählt werden müssen, werden die Konfigs für
|
Damit nicht in jedem Script immer wieder neu die Konfig-Dateien ausgewählt werden müssen, werden die Konfigs für
|
||||||
das Prod-, Test- und Deploy-System in ``examples/applus_configs.py`` hinterlegt. Diese wird in allen Scripten importiert,
|
das Prod-, Test- und Deploy-System in ``examples/applus_configs.py`` hinterlegt. Diese Datei wird in allen Scripten importiert,
|
||||||
so dass das Config-Verzeichnis und die darin enthaltenen Configs einfach zur Verfügung stehen.
|
so dass das Config-Verzeichnis und die darin enthaltenen Configs einfach zur Verfügung stehen.
|
||||||
|
|
||||||
.. literalinclude:: ../../examples/applus_configs.py
|
.. literalinclude:: ../../examples/applus_configs.py
|
||||||
@ -26,6 +26,15 @@ so dass das Config-Verzeichnis und die darin enthaltenen Configs einfach zur Ver
|
|||||||
:linenos:
|
:linenos:
|
||||||
|
|
||||||
|
|
||||||
|
``read_settings.py``
|
||||||
|
-----------------------
|
||||||
|
Einfaches Beispiel für Auslesen der SysConf und bestimmter Einstellungen.
|
||||||
|
|
||||||
|
.. literalinclude:: ../../examples/read_settings.py
|
||||||
|
:language: python
|
||||||
|
:lines: 9-
|
||||||
|
:linenos:
|
||||||
|
|
||||||
``check_dokumente.py``
|
``check_dokumente.py``
|
||||||
-----------------------
|
-----------------------
|
||||||
Einfaches Beispiel für lesenden und schreibenden Zugriff auf APplus Datenbank.
|
Einfaches Beispiel für lesenden und schreibenden Zugriff auf APplus Datenbank.
|
||||||
|
@ -10,9 +10,12 @@ import pathlib
|
|||||||
import PyAPplus64
|
import PyAPplus64
|
||||||
import applus_configs
|
import applus_configs
|
||||||
|
|
||||||
def main(confFile : pathlib.Path, docDir:str, updateDB:bool) -> None:
|
def main(confFile : pathlib.Path, updateDB:bool, docDir:str|None = None) -> None:
|
||||||
server = PyAPplus64.applus.applusFromConfigFile(confFile)
|
server = PyAPplus64.applus.applusFromConfigFile(confFile)
|
||||||
|
|
||||||
|
if docDir is None:
|
||||||
|
docDir = str(server.scripttool.getInstallPathWebServer().joinpath("DocLib"))
|
||||||
|
|
||||||
sql = PyAPplus64.sql_utils.SqlStatementSelect("ARTIKEL");
|
sql = PyAPplus64.sql_utils.SqlStatementSelect("ARTIKEL");
|
||||||
sql.addFields("ID", "ARTIKEL", "DOCUMENTS");
|
sql.addFields("ID", "ARTIKEL", "DOCUMENTS");
|
||||||
sql.where.addConditionFieldStringNotEmpty("DOCUMENTS");
|
sql.where.addConditionFieldStringNotEmpty("DOCUMENTS");
|
||||||
@ -28,4 +31,4 @@ def main(confFile : pathlib.Path, docDir:str, updateDB:bool) -> None:
|
|||||||
upd.update();
|
upd.update();
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
main(applus_configs.serverConfYamlTest, "somedir\\WebServer\\DocLib", False)
|
main(applus_configs.serverConfYamlTest, False)
|
52
examples/read_settings.py
Normal file
52
examples/read_settings.py
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
# Copyright (c) 2023 Thomas Tuerk (kontakt@thomas-tuerk.de)
|
||||||
|
#
|
||||||
|
# This file is part of PyAPplus64 (see https://www.thomas-tuerk.de/de/pyapplus64).
|
||||||
|
#
|
||||||
|
# Use of this source code is governed by an MIT-style
|
||||||
|
# license that can be found in the LICENSE file or at
|
||||||
|
# https://opensource.org/licenses/MIT.
|
||||||
|
|
||||||
|
# Einfaches Script, das verschiedene Werte des Servers ausliest.
|
||||||
|
# Dies sind SysConfig-Einstellungen, aber auch der aktuelle Mandant,
|
||||||
|
# Systemnamen, ...
|
||||||
|
|
||||||
|
import pathlib
|
||||||
|
import PyAPplus64
|
||||||
|
import applus_configs
|
||||||
|
import lxml.etree as ET # type: ignore
|
||||||
|
|
||||||
|
def main(confFile : str|pathlib.Path, user:str|None=None, env:str|None=None) -> None:
|
||||||
|
server = PyAPplus64.applusFromConfigFile(confFile, user=user, env=env)
|
||||||
|
|
||||||
|
print ("\n\nSysConf Lookups:")
|
||||||
|
|
||||||
|
print (" Default Auftragsart:", server.sysconf.getString("STAMM", "DEFAULTAUFTRAGSART"))
|
||||||
|
print (" Auftragsarten:")
|
||||||
|
arten = server.sysconf.getList("STAMM", "AUFTRAGSART", sep='\n')
|
||||||
|
if not arten: arten = []
|
||||||
|
for a in arten:
|
||||||
|
print (" - " + a)
|
||||||
|
|
||||||
|
print (" Firmen-Nr. automatisch vergeben:", server.sysconf.getBoolean("STAMM", "FIRMAAUTOMATIK"))
|
||||||
|
print (" Anzahl Artikelstellen:", server.sysconf.getInt("STAMM", "ARTKLASSIFNRLAENGE"))
|
||||||
|
|
||||||
|
print ("\n\nScriptTool:")
|
||||||
|
|
||||||
|
print (" CurrentDate:", server.scripttool.getCurrentDate())
|
||||||
|
print (" CurrentTime:", server.scripttool.getCurrentTime())
|
||||||
|
print (" CurrentDateTime:", server.scripttool.getCurrentDateTime())
|
||||||
|
print (" LoginName:", server.scripttool.getLoginName())
|
||||||
|
print (" UserName:", server.scripttool.getUserName())
|
||||||
|
print (" UserFullName:", server.scripttool.getUserFullName())
|
||||||
|
print (" SystemName:", server.scripttool.getSystemName())
|
||||||
|
print (" Mandant:", server.scripttool.getMandant())
|
||||||
|
print (" MandantName:", server.scripttool.getMandantName())
|
||||||
|
print (" InstallPath:", server.scripttool.getInstallPath())
|
||||||
|
print (" InstallPathAppServer:", server.scripttool.getInstallPathAppServer())
|
||||||
|
print (" InstallPathWebServer:", server.scripttool.getInstallPathWebServer())
|
||||||
|
print (" ServerInfo - Version:", server.scripttool.getServerInfo().find("version").text)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main(applus_configs.serverConfYamlTest)
|
@ -12,6 +12,7 @@ from .applus import APplusServer
|
|||||||
from . import sql_utils
|
from . import sql_utils
|
||||||
import lxml.etree as ET # type: ignore
|
import lxml.etree as ET # type: ignore
|
||||||
from typing import *
|
from typing import *
|
||||||
|
import pathlib
|
||||||
|
|
||||||
class XMLDefinition:
|
class XMLDefinition:
|
||||||
"""Repräsentation eines XML-Dokuments"""
|
"""Repräsentation eines XML-Dokuments"""
|
||||||
@ -80,6 +81,24 @@ class APplusScriptTool:
|
|||||||
def getSystemName(self) -> str:
|
def getSystemName(self) -> str:
|
||||||
return self.client.service.getSystemName()
|
return self.client.service.getSystemName()
|
||||||
|
|
||||||
|
def getInstallPath(self) -> str:
|
||||||
|
"""
|
||||||
|
Liefert den Installionspfad des Appservers
|
||||||
|
"""
|
||||||
|
return self.client.service.getInstallPath()
|
||||||
|
|
||||||
|
def getInstallPathAppServer(self) -> pathlib.Path:
|
||||||
|
"""
|
||||||
|
Liefert den Installionspfad des Appservers als PathLib-Path
|
||||||
|
"""
|
||||||
|
return pathlib.Path(self.getInstallPath());
|
||||||
|
|
||||||
|
def getInstallPathWebServer(self) -> pathlib.Path:
|
||||||
|
"""
|
||||||
|
Liefert den Installionspfad des Webservers als PathLib-Path
|
||||||
|
"""
|
||||||
|
return self.getInstallPathAppServer().parents[0].joinpath("WebServer");
|
||||||
|
|
||||||
def getXMLDefinitionString(self, obj:str, mandant:str="") -> str:
|
def getXMLDefinitionString(self, obj:str, mandant:str="") -> str:
|
||||||
"""
|
"""
|
||||||
Läd die XML-Defintion als String vom APPServer. Auch wenn kein XML-Dokument im Dateisystem gefunden wird,
|
Läd die XML-Defintion als String vom APPServer. Auch wenn kein XML-Dokument im Dateisystem gefunden wird,
|
||||||
@ -103,7 +122,7 @@ class APplusScriptTool:
|
|||||||
:type obj: str
|
:type obj: str
|
||||||
:param mandant: der Mandant, dessen XML-Doku geladen werden soll, wenn "" wird der Standard-Mandant verwendet
|
:param mandant: der Mandant, dessen XML-Doku geladen werden soll, wenn "" wird der Standard-Mandant verwendet
|
||||||
:type mandant: str optional
|
:type mandant: str optional
|
||||||
:return: das gefundene und mittels ElementTree geparste XML-Dokument
|
:return: das gefundene und geparste XML-Dokument
|
||||||
:rtype: ET.Element
|
:rtype: ET.Element
|
||||||
"""
|
"""
|
||||||
return ET.fromstring(self.getXMLDefinitionString(obj, mandant=mandant))
|
return ET.fromstring(self.getXMLDefinitionString(obj, mandant=mandant))
|
||||||
@ -118,7 +137,7 @@ class APplusScriptTool:
|
|||||||
:type obj: str
|
:type obj: str
|
||||||
:param mandant: der Mandant, dessen XML-Doku geladen werden soll, wenn "" wird der Standard-Mandant verwendet
|
:param mandant: der Mandant, dessen XML-Doku geladen werden soll, wenn "" wird der Standard-Mandant verwendet
|
||||||
:type mandant: str optional
|
:type mandant: str optional
|
||||||
:return: das gefundene und mittels ElementTree geparste XML-Dokument
|
:return: das gefundene und geparste XML-Dokument
|
||||||
:rtype: Optional[XMLDefinition]
|
:rtype: Optional[XMLDefinition]
|
||||||
"""
|
"""
|
||||||
e = self.getXMLDefinition(obj, mandant=mandant);
|
e = self.getXMLDefinition(obj, mandant=mandant);
|
||||||
@ -146,3 +165,21 @@ class APplusScriptTool:
|
|||||||
Liefert den Namen des aktuellen Mandanten
|
Liefert den Namen des aktuellen Mandanten
|
||||||
"""
|
"""
|
||||||
return self.client.service.getCurrentClientProperty("NAME")
|
return self.client.service.getCurrentClientProperty("NAME")
|
||||||
|
|
||||||
|
def getServerInfoString(self) -> str:
|
||||||
|
"""
|
||||||
|
Liefert Informationen zum Server als String. Dieser String repräsentiert ein XML Dokument.
|
||||||
|
|
||||||
|
:return: das XML-Dokument als String
|
||||||
|
:rtype: str
|
||||||
|
"""
|
||||||
|
return self.client.service.getP2plusServerInfo()
|
||||||
|
|
||||||
|
def getServerInfo(self) -> Optional[ET.Element]:
|
||||||
|
"""
|
||||||
|
Liefert Informationen zum Server als ein XML Dokument.
|
||||||
|
|
||||||
|
:return: das gefundene und geparste XML-Dokument
|
||||||
|
:rtype: ET.Element
|
||||||
|
"""
|
||||||
|
return ET.fromstring(self.getServerInfoString())
|
||||||
|
Loading…
Reference in New Issue
Block a user