diff --git a/docs/source/anwendungen.rst b/docs/source/anwendungen.rst index 999de45..9f80cac 100644 --- a/docs/source/anwendungen.rst +++ b/docs/source/anwendungen.rst @@ -58,7 +58,7 @@ der für die Umgebung korrekte Mandant automatisch verwendet wird. 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. 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. diff --git a/docs/source/examples.rst b/docs/source/examples.rst index d1f9aa6..f889c4b 100644 --- a/docs/source/examples.rst +++ b/docs/source/examples.rst @@ -17,7 +17,7 @@ das Deploy-, das Test- und das Prod-System. Ein Beispiel ist im Unterverzeichnis :linenos: 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. .. literalinclude:: ../../examples/applus_configs.py @@ -26,6 +26,15 @@ so dass das Config-Verzeichnis und die darin enthaltenen Configs einfach zur Ver :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`` ----------------------- Einfaches Beispiel für lesenden und schreibenden Zugriff auf APplus Datenbank. diff --git a/examples/check_dokumente.py b/examples/check_dokumente.py index e74c7d3..e6fa927 100644 --- a/examples/check_dokumente.py +++ b/examples/check_dokumente.py @@ -10,9 +10,12 @@ import pathlib import PyAPplus64 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) + if docDir is None: + docDir = str(server.scripttool.getInstallPathWebServer().joinpath("DocLib")) + sql = PyAPplus64.sql_utils.SqlStatementSelect("ARTIKEL"); sql.addFields("ID", "ARTIKEL", "DOCUMENTS"); sql.where.addConditionFieldStringNotEmpty("DOCUMENTS"); @@ -28,4 +31,4 @@ def main(confFile : pathlib.Path, docDir:str, updateDB:bool) -> None: upd.update(); if __name__ == "__main__": - main(applus_configs.serverConfYamlTest, "somedir\\WebServer\\DocLib", False) \ No newline at end of file + main(applus_configs.serverConfYamlTest, False) \ No newline at end of file diff --git a/examples/read_settings.py b/examples/read_settings.py new file mode 100644 index 0000000..5445850 --- /dev/null +++ b/examples/read_settings.py @@ -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) diff --git a/src/PyAPplus64/applus_scripttool.py b/src/PyAPplus64/applus_scripttool.py index 933b477..0ed542c 100644 --- a/src/PyAPplus64/applus_scripttool.py +++ b/src/PyAPplus64/applus_scripttool.py @@ -12,6 +12,7 @@ from .applus import APplusServer from . import sql_utils import lxml.etree as ET # type: ignore from typing import * +import pathlib class XMLDefinition: """Repräsentation eines XML-Dokuments""" @@ -80,6 +81,24 @@ class APplusScriptTool: def getSystemName(self) -> str: 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: """ 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 :param mandant: der Mandant, dessen XML-Doku geladen werden soll, wenn "" wird der Standard-Mandant verwendet :type mandant: str optional - :return: das gefundene und mittels ElementTree geparste XML-Dokument + :return: das gefundene und geparste XML-Dokument :rtype: ET.Element """ return ET.fromstring(self.getXMLDefinitionString(obj, mandant=mandant)) @@ -118,7 +137,7 @@ class APplusScriptTool: :type obj: str :param mandant: der Mandant, dessen XML-Doku geladen werden soll, wenn "" wird der Standard-Mandant verwendet :type mandant: str optional - :return: das gefundene und mittels ElementTree geparste XML-Dokument + :return: das gefundene und geparste XML-Dokument :rtype: Optional[XMLDefinition] """ e = self.getXMLDefinition(obj, mandant=mandant); @@ -146,3 +165,21 @@ class APplusScriptTool: Liefert den Namen des aktuellen Mandanten """ 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())