Jump to content

Exportdialog – Prüfung auf unberechnete Elemente


---
 Share

Recommended Posts

Hallo zusammen,

ich möchte sicherstellen, dass im Fall von unberechneten Elementen auf den aktuell sichtbaren Reportseiten, die mit gom.script.report.export_pdf exportiert werden, der OK-Button im Dialog deaktiviert oder ausgeblendet wird.

Meine Frage dazu:
Wie kann ich per Skript abfragen, ob sich unberechnete Elemente auf den Reportseiten befinden, die tatsächlich exportiert werden?
Es sollen ausschließlich die sichtbaren Reportseiten geprüft werden, die im PDF-Export berücksichtigt werden.
Alle anderen im Projekt enthaltenen Reportseiten sollen nicht Teil dieser Prüfung sein.

Vielen Dank vorab für eure Unterstützung!

 

 

import gom

# Dialog erstellen
DIALOG=gom.script.sys.create_user_defined_dialog (dialog={
	"content": [
		[
				{
					"columns": 1,
					"default_font_family": "",
					"default_font_size": 0,
					"name": "text",
					"rows": 1,
					"text": {
						"id": "",
						"text": "<html><p>PDF-Export</p></html>",
						"translatable": True
					},
					"tooltip": {
						"id": "",
						"text": "",
						"translatable": True
					},
					"type": "display::text",
					"wordwrap": False
				}
		]
	],
	"control": {
		"id": "OkCancel"
	},
	"embedding": "always_toplevel",
	"position": "automatic",
	"size": {
		"height": 169,
		"width": 280
	},
	"sizemode": "automatic",
	"style": "",
	"title": {
		"id": "",
		"text": "Export starten",
		"translatable": True
	}
})

# Event-Handler zur Prüfung unberechneter Elemente
def dialog_event_handler(widget):
	#TEST unberechnete Elemente
	uncomputed = gom.script.report.get_uncomputed_elements()
	if uncomputed:
		DIALOG.control.ok.enabled = False
		DIALOG.control.status = "Nicht alle Elemente sind berechnet – Export nicht möglich"
	else:
		DIALOG.control.ok.enabled = True
		DIALOG.control.status = ""

# Handler registrieren
DIALOG.handler = dialog_event_handler

# Initiale Prüfung direkt beim Öffnen
dialog_event_handler("initialize")

# Dialog anzeigen und Ergebnis auswerten
RESULT = gom.script.sys.show_user_defined_dialog(dialog=DIALOG)

# Wenn OK gedrückt wurde, Export starten
if RESULT.control == 'ok':
	gom.script.report.export_pdf(
		export_all_reports=True,
		file='C:/Temp/Test.pdf',
		jpeg_quality_in_percent=90,
		max_dpi=150,
		pdfa=True
	)

 

image.png.327d86e3b5c371997f304294e43043cf.png

Link to comment
Share on other sites

Hallo Dominik,

mit

gom.app.project.reports['report'].pages['page 1'].all_elements_in_report

bekommst du eine Liste aller Elemente die auf 'page 1' von 'report' verwendet werden. Dann kannst du für jedes Element den 'computation_status' prüfen.

Viele Grüße,

Matthias

Link to comment
Share on other sites

Danke für den Command und den Denkanstoß. Nun wird auf allen Reportseiten im Projekt mit computation_status der Status geprüft. Die Prüfung dauert aktuell bis zu 5 Minuten, da jedes einzelne Element auf allen Reportseiten durchlaufen wird – auch auf Seiten, die über einen Tag ausgeblendet sind.

Wie kann ich nur die Elemente der aktuell sichtbar geschalteten Reportseiten prüfen? Wie beim Befehl gom.script.report.export_pdf, bei dem nur diese exportiert werden, wenn export_all_report=True ist.

Besteht die Möglichkeit, den Status vorhanden Status der Reportseite abzugreifen?
Der Status zu unberechneten Elementen wird unter „Berechnung“ angezeigt, bei der jeweiligen Reportseite unter Eigenschaften im Reiter Informationen.

Das würde die Prüfung deutlich beschleunigen.

image.png.2a3a6bffd9a9dacc50a8a7ebca92b31e.png

Befehl Export PDF:

gom.script.report.export_pdf (
  export_all_reports=True, 
  file='C:/Temp/Test.pdf', 
  jpeg_quality_in_percent=90, 
  max_dpi=150, 
  pdfa=False)

Aktueller Code für die Prüfung:

import gom

# Alle Reports im Projekt durchgehen
for report in gom.app.project.reports:
	print(f"Report: {report.name}")
	# Alle Seiten im Report durchgehen
	for page in report.pages:
		print(f"  Seite: {page.name}")
		# Alle Elemente auf der Seite durchgehen
		for element in page.all_elements_in_report:
			try:
				status = element.computation_status
				print(f"    Element: {element.name}, Status: {status}")
			except AttributeError:
				print(f"    Element: {element.name} hat keinen computation_status")

 

Link to comment
Share on other sites

Hallo Dominik,

probier das mal:

Wenn auf Reportseiten ohne Tags nicht berechnete Elemente sind, dann gibt es einen Abbruch:

for report in gom.ElementSelection ({'category': ['key', 'elements', 'explorer_category', 'reports']}):
    if report.computation_status == 'partly_not_computed' and report.tags == []:
        print('wegen unberechneter Elemente auf', report.name, 'kein Export erlaubt')
        break

Viele Grüße

Julian
 

Link to comment
Share on other sites

 Share

×
×
  • Create New...