Ziel

  • Customizen eines PDF-Exports für ausgewählte Statusberichte

Hinweis

  • Hier ist nur die generelle Funktionalität eingerichtet. Optimierungen sind bei Bedarf durchzuführen, zum Beispiel:
    • Bearbeitungsmeldungen
    • Variable Eingabe des Exportpfads, des Dateinamens, der Modulvariante usw., z.B. im Modul Globale Einstellungen
    • Handling der PDF-Datei (z.B. das Verhalten, wenn die Datei bereits geöffnet ist oder die Möglichkeit einen anderen Namen anzugeben)

Vorgehensweise

  • Ein neues Modul anlegen, das die zu druckenden Statusberichte anzeigt mit einer Schaltfläche PDF erzeugen (=Auswahlmodul)
    • Die Auswahl dieser Statusberichte kann beispielsweise über ein weiteres Modul erfolgen, in dem Statusberichte durch Aktivieren einer Checkbox ausgewählt werden.
  • Für diese Schaltfläche ein Makro-Modul erzeugen.
  • In diesem Makro die folgenden Parameter anpassen:
    • exp_path = Speicherpfad der erzeugten PDF-Datei
    • file_name = Name der erzeugten PDF-Datei
    • REPORT_MOD_ID Modul, das für die Ausgabe verwendet wird (Reportmodul), für die Statusberichte z.B. das Standardmodul MOD009A52 Statusbericht
    • REPORT_VARIANT_ID = gewünschte Variante des Reportmoduls
    • DA_PYTHON_ID = Name des Quell-Datenbereiches im Auswahlmodul
# Moduleinstellungen: Exportpfad. Exportdateiname, Ausgabemodul und zu verwendende Variante, Python-ID des Quell-Datenbereichs
exp_path = 'Exportpfad'.replace(chr(92),chr(92)+chr(92))
file_name = "Name der erzeugten PDF Datei"
REPORT_MOD_ID = "Modul-ID" 
REPORT_VARIANT_ID = "Varianten-ID"  
DA_PYTHON_ID = 'Python-ID' 
                
#Auslesen der Druckeinstellungen aus dem Reportmodul
module_customizing_record = ppms.search_record(405, [REPORT_MOD_ID], [25609,25610,1789,2947], True)
page_size = module_customizing_record.paper_format.get_value()
landscape = not bool(module_customizing_record.portrait_format.get_value())
zoom = float(module_customizing_record.zoom_print_preview.get_value())
fit_to_page = bool(module_customizing_record.default_zoom_col.get_value())

#Modulobjekte 
macro_module = ppms.get_macro_module()
select_module = macro_module.get_invoker_module()

#Zusammensetzung des Befehls fuer den Client
CLIENT_CODE = """
e = get_Env()
pdf_list = e.PdfExportDocumentsList
list = e.PdfExportDocumentsList
page_size = '{page_size}'
landscape = {landscape}
zoom = {zoom}
fit_to_page = {fit_to_page}

for uid in {export_list}:
    module = e.ActivePanel.ModuleManager[uid]
    doc = module.CreatePdfExportDocument(pageSize=page_size, landscape=landscape, zoom=zoom, fitToPage=fit_to_page)
    pdf_list.Add(doc)
    e.ActivePanel.ModuleManager

e.GeneratePdfFile(pdf_list, '{exp_path}', '{file_name}')    
"""
    

def get_selected_reports():
    export_list =[]
    modules_to_close = []
      
    for pr_rec in select_module.get_da(DA_PYTHON_ID).get_records():         
        pr_id = pr_rec.pr_id.get_raw_value()
        main_pr_id = pr_rec.main_pr_id.get_raw_value()
        report_id = pr_rec.report_id.get_raw_value()
        
        #Alle im Reportmodul verwendete Filterkriterien setzen
        select_module.set_new_L_var(30, [pr_id])
        select_module.set_new_L_var(78, [report_id])
        select_module.set_new_L_var(74, [main_pr_id])
        #select_module.set_new_L_var(26, [report_id]) - wird im Makro des Statusberichts gesetzt
        #select_module.set_new_L_var(25, [report_id]) - ist im Standard leer

        #Aufruf der Modul-Variante (angedockt ausserhalb der Bildschirmanzeige)
        reporting_module=select_module.open_module(REPORT_MOD_ID,
                                                                  dock_to_module=select_module.get_uid(),
                                                                  forced_status=2,
                                                                  dock_style=3,
                                                                  dock_proportion=0.001,
                                                                  foreground=0,
                                                                  focus=0)
        reporting_module.apply_mv_by_id(REPORT_VARIANT_ID)
        reporting_module.menu(12)
        modules_to_close.append(reporting_module)
        #Interne Nummer des geoeffneten Moduls 
        uid = str(reporting_module.get_uid())
        
        #Offene Module zur Liste fuer PDF-Schnittstelle anfuegen
        export_list.append((uid))
		
    client_call = CLIENT_CODE.format(export_list=export_list, exp_path=exp_path, file_name=file_name,
                                     page_size=page_size, landscape=landscape,
                                     zoom=zoom, fit_to_page=fit_to_page)

    ppms.client_exec(client_call)
        
    for module in modules_to_close:
        module.menu(49)

    select_module.menu(49)

#Schleife fuer Anzeige Modulvariante 
get_selected_reports()
PY

Hinweise

  • Für die Übergabe der Daten an den Client soll ein rpc service genutzt werden.
  • Bei Verwenden der IronPython-Methode CreatePdfExportDocument() müssen die Parameternamen mit angegeben werden.
    • doc = module.CreatePdfExportDocument(pageSize='A4',landscape=TRUE, zoom=100.0, fitToPage=TRUE) statt doc = module.CreatePdfExportDocument('A4', TRUE, 100.0,TRUE)