Tutorial: Modul-Customizing (Level 3)
Informationen
- Dieser Modul-Workflow
- baut auf dem im Tutorial: Modul-Workflow (Level 1) erstellten und im Tutorial: Modul-Workflow (Level 2) erweiterten Modul (Testmodul) auf.
- gibt einen ersten Einblick in das Customizing mit Python.
- Das Arbeiten mit diesem Workflow setzt die Kenntnisse voraus, die im Tutorial: Modul-Workflow (Level 1) und Tutorial: Modul-Workflow (Level 2) vermittelt wurden.
- Die einzelnen Schritte in diesem Workflow bauen aufeinander auf.
- Es werden Python-Grundkenntnisse vorausgesetzt. Für die Anwendung einzelner Python-Funktionen siehe Python-API.
Aufgabe 1
Ziel
- Im Testmodul wird ein Feld als Link definiert.
- Wird dieser betätigt, erscheint eine Dialogmeldung.
- Wird diese mit Ja bestätigt, wird ein weiteres Modul aufgerufen, in dem alle markierten Projekte angezeigt werden.
- Wird diese mit Nein bestätigt, wird das Projekt, in dem der Link betätigt wurde, markiert.
- Wird dieser betätigt, erscheint eine Dialogmeldung.
Schritt 1: Vorbereitung
Informationen
- Für diese Aufgabe muss ein weiteres Modul gecustomized werden (Vorgehensweise wie im Modul-Workflow:Level 1 beschrieben):
- Modultitel: Projektdatenblatt
- einen Datenbereich mit den folgenden Datenfeldern und Einstellungen wie im Modul-Workflow:Level 1 beschrieben anlegen und dem Modul zuordnen:
- DDI: 001001 Projekt-ID
- DI001001 Projekt-ID und DI000690 Projektbezeichnung
- Auf dem Datenfeld Projekt-ID in Filtern von @L30 hinterlegen.
- ein Makro einfügen, das innerhalb der Python-Funktion on_initial_focus() filtert (Vorgehensweise siehe hier)
- Zusätzlich im Datenbereich Projekt des Moduls Testmodul das Filterkriterium 4811 aus dem Feld Filtern von entfernen.
Schritt 2: Erstellen eines Makro-Moduls zum Modulaufruf
Ziele
- Erstellen eines Makro-Moduls, das das Projektdatenblatt aufruft
- Hinterlegen dieses Makro-Moduls auf einem Datenfeld im Modul Testmodul
Hinterlegen des Moduls Projektdatenblatt in den globalen Einstellungen
Vorgehensweise
- Das Modul Globale Einstellungen aufrufen
- Customizer → Stammdaten → Globale Einstellungen aufrufen oder
- im Panel Module den Reiter (das Untermodul) Globale Einstellungen aktivieren.
- Für das Modul Projektdatenblatt eine neue globale Einstellung anlegen und eine Python-ID hinterlegen:
- Einfügen → Globale Einstellungen aus dem Kontextmenü auswählen.
- In der Listbox Klasse die gewünschte Klasse auswählen, hier Modul-ID.
- Im Feld Alpha (120) die Modul-ID des Projektdatenblatts eintragen.
- Im Feld Python-ID eine Python-ID, z.B. pr_datasheet, definieren.
- Speichern.
Anlegen des Makro-Moduls
Vorgehensweise
- Ein Makro-Modul (Modul mit Klasse = 6) anlegen.
- Durch Klick auf die Schaltfläche Python-Makrobearbeitung aufrufen den Python-Editor öffnen. Es wird automatisch ein Template einkopiert.
- Dieses Template ist für Module mit Klasse = 4 vorgesehen, es kann daher gelöscht werden.
- Folgendes Makro hinterlegen:
- Bitte beachten: Der Eintrag
Python_ID_Projektdatenblatt
muss mit dem Wert aus dem Feld Python-ID der neu angelegten globalen Einstellung des Projektdatenblatts ersetzt werden.
- Bitte beachten: Der Eintrag
#Um die Modul-ID aus den globalen Einstellungen auslesen zu koennen
#muss das Python-Modul global_setting importiert werden.
from ppms.global_setting import get_global_setting_value
# Definition des Modul-Objekts
mod_obj = ppms.get_target_module()
# Definition der Modul-ID. Diese wird mit Hilfe der selbst definierten Python-ID
# aus den globalen Einstellungen ausgelesen.
target_mod_id = get_global_setting_value("Python_ID_Projektdatenblatt", 'alpha120')
#Auslesen der Projekt-ID des Datensatzes auf dem der Link aufgerufen wird
pr_id = ppms.get_context_df().get_record().get_df("pr_id").get_raw_value()
# Variable L30 fuer das Modul, das aufgerufen wird, setzen
mod_obj.set_new_L_var(30, [pr_id])
#Modul aufrufen
mod_obj.open_module(target_mod_id)
- Speichern
Tipps
- Statt
pr_id = ppms.get_context_df().get_record().get_df("pr_id").get_raw_value()
- kann auch die (etwas kürzere) Zeile verwendet werden:
pr_id = ppms.get_context_df().get_record().pr_id.get_raw_value()
- Ist der Link auf dem Datenfeld, das ausgelesen werden soll (in diesem Fall: wenn man den Link auf das Feld Projekt-ID customized, kann auch folgende Zeile zum Auslesen verwendet werden:
pr_id = ppms.get_context_df().get_raw_value()
Link definieren
Vorgehensweise
- Im Modul Testmodul (Datenbereich Projekt) das DI Projektbezeichnung als Link definieren (DF-Verhalten = e4) und im Datenfeld Aktions-ID die ID des neu erstellten Makro-Moduls hinterlegen.
- Speichern.
Modul testen
Vorgehensweise
- Das Modul Testmodul starten.
- Klick auf die Projektbezeichnung eines Projekts: Das Modul Projektdatenblatt wird geöffnet und das Projekt, auf dem der Link betätigt wurde, wird angezeigt.
Schritt 3: Einbauen einer Dialogmeldung
Ziel
- Bevor das Projektdatenblatt gestartet wird, soll die folgende Dialogmeldung erscheinen: Wollen Sie dieses Projekt wirklich bearbeiten?
- Bestätigt der Anwender die Meldung mit Ja: Öffnet sich das Modul Projektdatenblatt.
- Bestätigt der Anwender die Meldung mit Nein: Wird der Projekt-Datensatz des gewählten Projekts markiert.
Dialogmeldung anlegen
Vorgehensweise
- Customizer → Stammdaten → Dialogmeldungen aufrufen.
- Über die rechte Maustaste Einfügen → Dialogmeldung eine neue Dialogmeldungszeile einfügen.
- Im Feld Dialogmeldung Wollen Sie dieses Projekt wirklich bearbeiten? eintragen.
- Im Feld Ausgabeart 1 auswählen.
- In den Feldern Default Button = 1 und Button-Art = 3 auswählen.
- Speichern
Hinterlegen der Dialogmeldungs-ID in den globalen Einstellungen
Vorgehensweise
- Das Modul Globale Einstellungen aufrufen
- Customizer → Stammdaten → Globale Einstellungen aufrufen oder
- im Panel Module den Reiter (das Untermodul) Globale Einstellungen aktivieren.
- Für die Dialogmeldung eine neue globale Einstellung anlegen und eine Python-ID hinterlegen:
- Einfügen → Globale Einstellungen aus dem Kontextmenü auswählen.
- In der Listbox Klasse die gewünschte Klasse auswählen, hier Dialogmeldungs-ID .
- Im Feld Alpha (120) die Dialogmeldungs-ID eintragen.
- Im Feld Python-ID eine Python-ID, z. B. pr_msg_box, definieren.
- Speichern.
Makro des Makro-Moduls anpassen
Vorgehensweise
- Das Makro des Makro-Moduls im Python-Editor öffnen und wie folgt anpassen
- Bitte beachten:
from ppms.global_setting import get_global_setting_value
mod_obj = ppms.get_target_module()
# Definition der Modul-ID und der Dialogmeldungs-ID
target_mod_id = get_global_setting_value("Python_ID_Projektdatenblatt", 'alpha120')
dialog_id = get_global_setting_value("Python_ID_Dialogmeldung", 'alpha120')
pr_id = ppms.get_context_df().get_record().get_df("pr_id").get_raw_value()
mod_obj.set_new_L_var(30, [pr_id])
# Ausgabe der Dialogmeldung
ppms.ui_message_id(dialog_id)
# Klickt der Anwender auf "Ja" ("if"), wird das Modul aufgerufen,
# sonst ("else") wird der Datensatz markiert.
if ppms.msg_pop().get_reply() == 1:
mod_obj.open_module(target_mod_id)
else:
ppms.get_context_df().get_record().mark()
Modul testen
Vorgehensweise
- Das Modul Testmodul starten.
- Klick auf die Projektbezeichnung eines Projekts
- Die Dialogmeldung Wollen Sie dieses Projekt wirklich bearbeiten? wird angezeigt.
- Klickt man auf Ja, wird das Projektdatenblatt geöffnet und das Projekt, auf dem der Link betätigt wurde, wird angezeigt.
- Klickt man auf Nein, wird das Projekt, auf dem der Link betätigt wurde, markiert.
Schritt 4: Anzeige aller markierten Projekte
Ziel
- Alle markierten Projekte sollen im Modul Projektdatenblatt angezeigt werden
- Falls kein Projekt markiert wurde, soll das Projekt auf dem der Link betätigt wurde angezeigt werden.
Makro des Makro-Moduls anpassen
Vorgehensweise
- Das Makro des Makro-Moduls im Python-Editor öffnen und wie folgt anpassen
- Bitte beachten:
from ppms.global_setting import get_global_setting_value
mod_obj = ppms.get_target_module()
target_mod_id = get_global_setting_value("Python_ID_Projektdatenblatt", 'alpha120')
dialog_id = get_global_setting_value("Python_ID_Dialogmeldung", 'alpha120')
#Definition einer Liste der markierten Datensaetze im Projektdatenbereich
#Ist kein Datensatz markiert, ist diese Liste leer
marked_records = ppms.get_context_df().get_record().get_da().get_marked_records()
#Definition einer neuen leeren Liste
project_list=[]
# Ist in der Liste "marked_records" mindestens ein Datensatz vorhanden, wird fuer jeden Datensatz in der
# Liste "marked_records" die Projekt-ID ausgelesen und in die Liste "project_list" geschrieben.
# Zusaetzlich wird die Projekt-ID des Datensatzes, auf dem der Link aktiviert wurde, in die
# Liste geschrieben.
if len(marked_records) > 0:
for record in marked_records:
cur_pr_id = record.pr_id.get_raw_value()
project_list.append(cur_pr_id)
project_list.append(ppms.get_context_df().get_record().pr_id.get_raw_value())
# Ist die Liste "marked_records" leer, wird die Projekt-ID des Datensatzes, auf dem der Link aktiviert
# wurde, in die Liste geschrieben.
else:
project_list.append(ppms.get_context_df().get_record().pr_id.get_raw_value())
mod_obj.set_new_L_var(30, project_list)
ppms.ui_message_id(dialog_id)
if ppms.msg_pop().get_reply() == 1:
mod_obj.open_module(target_mod_id)
else:
ppms.get_context_df().get_record().mark()
Modul testen
Vorgehensweise
- Das Modul Testmodul starten.
- Mehrere Projekte markieren und Klick auf die Projektbezeichnung eines Projekts
- Die Dialogmeldung Wollen Sie dieses Projekt wirklich bearbeiten? wird angezeigt.
- Klickt man auf Ja, wird das Projektdatenblatt geöffnet und alle markierten Projekt und das Projekt, auf dem der Link betätigt wurde, werden angezeigt.
- Klickt man auf Nein, wird das Projekt, auf dem der Link betätigt wurde, markiert.
Aufgabe 2
Ziele
- Zusätzlich soll aus dem Modul Testmodul das Vorgangsdatenblatt geöffnet werden, in dem alle Meilensteine des Projekts, auf dem der Link betätigt wurde, angezeigt werden.
- Dieses Modul soll hinter dem Projektdatenblatt geöffnet werden.
Hinweis
- Diese Aufgabe baut auf Aufgabe 1 auf.
Schritt 1: Vorbereitung
Information
- Für diese Aufgabe muss ein weiteres Modul gecustomized werden (Vorgehensweise wie im Modul-Workflow:Level 1 beschrieben):
- Modultitel: Vorgangsdatenblatt
- einen Datenbereich mit den folgenden Datenfeldern und Einstellungen wie im Modul-Workflow:Level 1 beschrieben anlegen und dem Modul zuordnen:
- DDI: 001098 Vorgangs-ID
- 001098 Vorgangs-ID und 000807 Vorgangsbezeichnung
- Auf dem Datenfeld Vorgangs-ID in Filtern von @L11 hinterlegen.
- ein Makro einfügen, das innerhalb der Python-Funktion on_initial_focus() filtert (siehe hier)
Schritt 2: Aufruf des Vorgangsdatenblatts
Hinterlegen des Vorgangsdatenblatts in den globalen Einstellungen
Vorgehensweise
- Das Modul Globale Einstellungen aufrufen
- Customizer → Stammdaten → Globale Einstellungen aufrufen oder im Panel Module den Reiter (das Untermodul) Globale Einstellungen aktivieren.
- Für das Modul Vorgangsdatenblatt eine neue globale Einstellung anlegen und eine Python-ID hinterlegen:
- Einfügen → Globale Einstellungen aus dem Kontextmenü auswählen.
- In der Listbox Klasse die gewünschte Klasse auswählen, hier Modul-ID.
- Im Feld Alpha (120) die Modul-ID des Vorgangsdatenblatts eintragen.
- Im Feld Python-ID eine Python-ID, z. B. task_datasheet, definieren.
- Speichern.
Anpassen des Makro-Moduls
Vorgehensweise
- Das Makro des Makro-Moduls im Python-Editor öffnen und wie folgt anpassen.
- Bitte beachten:
- Der Eintrag Python_ID_Projektdatenblatt muss mit dem Wert aus dem Feld Python-ID der globalen Einstellung des Projektdatenblatts ersetzt werden.
- Der Eintrag Python_ID_Dialogmeldung muss mit dem Wert aus dem Feld Python-ID der neu angelegten globalen Einstellung der Dialogmeldung ersetzt werden.
- Der Eintrag Python_ID_Vorgangsdatenblatt muss mit dem Wert aus dem Feld Python-ID der globalen Einstellung des Vorgangsdatenblatts ersetzt werden.
- Bitte beachten:
from ppms.global_setting import get_global_setting_value
mod_obj = ppms.get_target_module()
# Definition der Modul-IDs und der Dialogmeldungs-ID
target_mod_id = get_global_setting_value("Python_ID_Projektdatenblatt", 'alpha120')
dialog_id = get_global_setting_value("Python_ID_Dialogmeldung", 'alpha120')
target_task_mod_id = get_global_setting_value("Python_ID_Vorgangsdatenblatt", 'alpha120')
marked_records = ppms.get_context_df().get_record().get_da().get_marked_records()
pr_id = ppms.get_context_df().get_record().pr_id.get_raw_value()
pr_list = [pr_id]
if len(marked_records) > 0:
for record in marked_records:
cur_pr_id = record.pr_id.get_raw_value()
pr_list.append(cur_pr_id)
mod_obj.set_new_L_var(30, pr_list)
ppms.ui_message_id(dialog_id)
if ppms.msg_pop().get_reply() == 1:
pr_mod_obj = mod_obj.open_module(target_mod_id, forced_status=1)
# Oeffnen des Vorgangsdatenblattes
task_mod_obj = pr_mod_obj.open_module(target_task_mod_id, forced_status=2, dock_to_module = pr_mod_obj.get_uid(), foreground=0, focus=0)
# Ausfuehren der Methode "get_tasks" mit dem Uebergabeparameter "pr_id"
# Diese Methode wird im naechsten Modul im Vorgangsdatenblatt definiert.
task_mod_obj.get_tasks(pr_id)
else:
ppms.get_context_df().get_record().mark()
Makro im Vorgangsdatenblatt ändern
Ziel
- Die Meilensteine des Projekts, das über den Link aufgerufen wird, sollen angezeigt werden.
Details
- Hierfür wird eine Methode
get_tasks
definiert, die die Vorgänge des übergebenen Projekts mit Meilenstein = 2 in eine Liste (task_list) schreibt. - Diese Liste wird in die Listenvariable @L11 geschrieben.
Vorgehensweise
- Im Modul SQL-Statements einen neuen Datensatz anlegen und das Statement benennen. Anschließend untergeordnet einen SQL-Prozedurcode mit dem folgenden SQL-Statement anlegen:
Select DI001098 FROM DT463 WHERE DI001097=
'{0}' AND DI006786='{1}'
- Das Makro im Vorgangsdatenblatt wie folgt ändern:
- Bitte beachten: Der Eintrag SQL-Statement-ID muss mit dem Wert aus dem Feld Statement des neu angelegten Statements ersetzt werden.
# Definition der Methode get_tasks
def get_tasks(pr_id):
value=2
sql_query=ppms.get_query("SQL-Statement-ID").format(pr_id,value)
sql_query_result = ppms.db_select(sql_query)
task_list=[]
for record in sql_query_result:
task_list.append(record[0])
mod_obj.set_current_L_var(11, task_list)
mod_obj = ppms.get_target_module()
def on_load():
# Stellt die Methode "get_tasks" dem Modulobjekt zur Verfuegung
mod_obj.get_tasks = get_tasks
def on_initial_focus():
mod_obj.menu(12)
def on_focus():
pass
def on_reset():
on_initial_focus()
def on_before_mv_switch(old_mv, new_mv):
pass
def on_after_mv_switch(old_mv, new_mv):
pass
Modul testen
Vorgehensweise
- Das Modul Testmodul starten.
- Mehrere Projekte markieren und auf die Projektbezeichnung eines Projekts klicken.
- Die Dialogmeldung Wollen Sie dieses Projekt wirklich bearbeiten? wird angezeigt.
- Klickt man auf Ja:
- Das Projektdatenblatt wird geöffnet und alle markierten Projekte und das Projekt, auf dem der Link betätigt wurde, werden angezeigt.
- Zusätzlich wird das Vorgangsdatenblatt hinter dem Projektdatenblatt angezeigt. In diesem Modul werden die Meilensteine des Projekts, auf dem der Link betätigt wurde, angezeigt.
- Klickt man auf Nein wird das Projekt, auf dem der Link betätigt wurde, markiert.
- Klickt man auf Ja: