Modul-Workflow: Level 3 (Tutorial)

info Informationen
  • Dieser Modul-Workflow
  • Das Arbeiten mit diesem Workflow setzt die Kenntnisse voraus, die im Modul-Workflow: Level 1 und Modul-Workflow: Level 2 vermittelt wurden.
  • Die einzelnen Schritte in diesem Workflow bauen aufeinander auf.
  • Python-Grundkenntnisse werden vorausgesetzt.

index Siehe auch

Aufgabe 1

target-blue 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

info 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

target-blue 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

more 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

more 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:
    • warning 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.
#Um die Modul-ID aus den globalen Einstellungen auslesen zu koennen 
#muss das Python-Modul ppms_cu importiert werden.
from ppms import ppms_cu

# 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=ppms_cu.Helper.get_global_setting("Python_ID_Projektdatenblatt").alpha120.get_value()

#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
tip 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

more 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

more 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

target-blue 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

more 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

more 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

more Vorgehensweise
  • Das Makro des Makro-Moduls im Python-Editor öffnen und wie folgt anpassen
    • warning 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.

from ppms import ppms_cu
mod_obj = ppms.get_target_module()

# Definition der Modul-ID und der Dialogmeldungs-ID
target_mod_id=ppms_cu.Helper.get_global_setting("Python_ID_Projektdatenblatt").alpha120.get_value()
dialog_id=ppms_cu.Helper.get_global_setting("Python_ID_Dialogmeldung").alpha120.get_value()
 
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

more 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

target-blue 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

more Vorgehensweise
  • Das Makro des Makro-Moduls im Python-Editor öffnen und wie folgt anpassen
    • warning 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.

from ppms import ppms_cu
mod_obj = ppms.get_target_module()

target_mod_id=ppms_cu.Helper.get_global_setting("Python_ID_Projektdatenblatt").alpha120.get_value()
dialog_id=ppms_cu.Helper.get_global_setting("Python_ID_Dialogmeldung").alpha120.get_value()

#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

more 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

target-blue 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.

warning Hinweis

  • Diese Aufgabe baut auf Aufgabe 1 auf.

Schritt 1: Vorbereitung

info 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

more 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

more Vorgehensweise
  • Das Makro des Makro-Moduls im Python-Editor öffnen und wie folgt anpassen.
    • warning 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 import ppms_cu

mod_obj = ppms.get_target_module()

# Definition der Modul-IDs und der Dialogmeldungs-ID
target_mod_id=ppms_cu.Helper.get_global_setting("Python_ID_Projektdatenblatt").alpha120.get_value()
dialog_id=ppms_cu.Helper.get_global_setting("Python_ID_Dialogmeldung").alpha120.get_value()
target_task_mod_id=ppms_cu.Helper.get_global_setting("Python_ID_Vorgangsdatenblatt").alpha120.get_value() 

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

target-blue Ziel
  • Die Meilensteine des Projekts, das über den Link aufgerufen wird, sollen angezeigt werden.

note 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.

more 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:
    • warning 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

more 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.
Topic revision: r57 - 2017-07-13 - 14:46:42 - MaxGruendel
Release394.ModulWorkflowLevel3Tutorial moved from Release394.ModulWorkflowLevel3 on 2011-08-03 - 08:12 by IrinaZieger








 
  • Suche in Topic-Namen

  • Suche in Topic-Inhalten