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.
-
-
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_Projektdatenblattmuss mit dem Wert aus dem Feld Python-ID der neu angelegten globalen Einstellung des Projektdatenblatts ersetzt werden.
-
#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.
-
-
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_tasksdefiniert, 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.
-