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
|
||||
-----------------------
|
||||
|
||||
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.
|
||||
|
@ -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.
|
||||
|
@ -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)
|
||||
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
|
||||
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())
|
||||
|
Loading…
Reference in New Issue
Block a user