Projec for the Web – Anzahl der verspäteten Aufgaben ins Project Center eintragen

Einer unserer Kunden hatte eine interessante Anforderung. Er wollte das alle verspäteten Aufgaben eines Projektes im Project Center der Model-Driven-App von Project angezeigt werden. Diese Anforderung habe ich mit einem Power Automate Flow gelöst. Es gibt zwar auch den Weg, dies über eine Summary-Spalte in der Entität (Tabelle) msdyn_project  durchzuführen, hat aber den Nachteil, dass ich nur eingeschränkte Filtermöglichkeiten besitze und aus dem Grund die Berechnung sehr lange dauern kann. Außerdem kann ich die Berechnung der Werte für die Spalte nur gering beeinflussen. Hier bietet mir die Umsetzung mit Power Automate weitaus mehr Möglichkeiten. In diesem Artikel möchte ich dir zeigen, wie du einen solchen Power Automate Flow erstellen kannst.

Hinweis: Um dieses Beispiel umzusetzen benötigts du die Sicherheitsrollen Project-User, Project-Common, Systemanpasser und Environment Maker. Ebenfalls braucht das Dienst-Konto über das du den Zugriff auf die Tabellen msdyn_projecttask und msdyn_project volle Leseberechtigung!

Erstellen der Spalte Delayed Task

Im ersten Schritt müssen wir in der Entität „msdyn_project“ eine Spalte anlegen und dann die Spalte der gewünschten Ansicht hinzufügen. Melde dich also an der Power-Platform an. Klicke hierzu auf das Startmenü in Microsoft 365 Portal und wähle „Power Apps“ aus. Klicke auf der linken Seite die Option „Tabellen (1)“. Klicke in der Mitte auf den Reiter „Alle (2)“ und gebe in dem Suchfeld der oberen rechten Ecke „Projekt (3)“ ein. Dir wird das Suchergebnis entsprechend angezeigt. Klicke mit der Maus auf die Tabelle „Project (4)“.

Klicke im oberen Bereich auf „+ Neu“ und wähle in dem sich öffnenden Kontextmenü die Option „Spalte“. Gebe im Feld Anzeigename „Delayed Task (1)“ und füge bei Bedarf eine Beschreibung ein. Wähle als Datentyp „Ganze Zahl (2)“  und klicke zum Abschluss auf „Speichern (3)“.

Füge jetzt die gerade angelegte Spalte den Ansichten hinzu. Klicke hierzu in der Rubrik „Datenerfahrungen“ auf den Link „Ansichten“. Scrolle mit der Maus ganz nach rechts und klicke dann im Tabellenkopf auf „+ Spalte anzeigen (1)“. Wähle hier die gerade angelegte Spalte „Delayed Task“. Verschiebe die Spalte per drag-and-drop an die Stelle, an der du diese gerne sehen würdest. Klicke abschließend in der oberen rechten Ecke auf „Speichern und veröffentlichen (2)“.

Power Automate Flow anlegen

Jetzt erstellen wir den Workflow. Dieser sollte in der Lösung veröffentlicht werden, die du für die Model-Driven-App erstellt hast.

Hinweis: Bitte denke daran, um Änderungen der Model-Driven-App Project hinzuzufügen, musst du eine eigene Lösung in Power Apps erstellen und das Model-Driven-App Project hinzufügen. Veröffentliche dann abschließend die Lösung.

Klicke in der oberen rechten Ecke auf „Neu“. In dem sich öffnenden Menü gehst du mit der Maus auf „Automatisierung„, dann auf „Cloud Flow“ und klickst dann auf „Geplant„. Gebe einen Flownamen ein. In meinem Beispiel „Delayed Task (1)“. Gebe dann einen Zeitpunkt ein, an dem der Flow ausgeführt werden soll. Bitte beachte, dass dieser Flow, je nach Anzahl von Arbeitspaketen in einem Projekt einige Zeit beanspruchen kann. In meinem Fall möchte ich, dass der Flow jeden Morgen vor Arbeitsbeginn gestartet wird. Aus dem Grund wähle ich als Datum den nächsten Arbeitstag (2) und als Uhrzeit 6:00am. Als Wiederholungszeitraum gebe ich einmal täglich ein (3). Klicke zum Abschluss auf „Erstellen (4)“.

Löschen der aktuellen Werte

Der Flow benötigt zwei Durchläufe. Im ersten überschreiben wir die vorhanden Werte mit einer „0“, im zweiten Durchlauf führen wir die Berechnung aus und schreiben dann die Werte in die Spalte. Füge als erstes eine neue Aktion hinzu. Klicke hierzu auf den Button „+ Neuer Schritt“. Gebe im Suchfeld bei Connectors und Aktionen den Namen „Common“ ein. Suche im unteren Bereich nach der Aktion „Listenzeile“. Öffne das Optionsfeld und wähle als Tabellennamen „Projekte (1)“ aus. Expandiere die erweiterten Optionen. Da nicht alle Felder abgerufen werden sollen, gebe ich nur die Felder „msdyn_subject und msdyn_projectid (2) ein, da wir diese im späteren Flow noch benötigen. Ebenfalls möchte ich, dass der Flow nur die aktiven Projekte bearbeitet, aus dem Grund gebe ich unter der Filterzeile „statecode eq 0 (3)“ ein. Benenne im letzten Schritt die Aktion um. Klicke hierzu an der Seite auf die drei Punkte und wähle in dem Kontextmenü die Option „Umbenennen“. Gebe dann als Name die Info „Alle aktiven Projekte auflisten“ ein.

Jetzt aktualisieren wir die Spalte „Delayed Task“ mit einer „0“. Hierzu benötigts du eine Schleife, die zu jedem geöffneten Projekt den Wert in die Spalte schreibt. Diese wird automatisch erstellt, wenn wir die nächste Aktion unseren Workflow hinzufügen. Klicke erneut wieder auf den Button „+ Schritt hinzufügen“. Gebe im Suchfeld erneut „Common“ ein. Jetzt wählst du die Aktion „Zeile aktualisieren“. Wähle erneut unter Tabellennamen die Tabelle „Projekte“ aus. Sobald du jetzt in das Feld „Zeilen-ID“ klickst, erscheint auf der rechten Seite ein weiteres Fenster. Wähle unter der Rubrik „Alle aktiven Projekte auflisten“ den Ausdruck „Projekt“ aus. Danach wird automatisch eine Schleife mit dem Namen „Auf alle anwenden“ erstellt. Diese wird solange ausgeführt, bis die aufgerufenen Projekte abgearbeitet wurden. Öffne erneut die Aktion „Zeile aktualisieren“, damit die Einstellungen geöffnet werden. Klicke im unteren Bereich auf den Link „Erweiterte Optionen anzeigen“. Suche die angelegte Spalte „Delayed Task“ und trage dort eine 0 ein.

Variable initialisieren

Damit wir die Anzahl der verspäteten Arbeitspakete berechnen können, benötigen wir eine Variable in der nachfolgenden Schleife. Diese müssen wir aber erst initialisieren. Klicke wieder auf den Button „+ Neuer Schritt“. Gebe jetzt in dem Suchfeld den Namen „Variable“ ein und wähle im unteren Bereich dann die Option „Variable initialisieren“. Gebe als Namen „varSetCountDelayedTask (1)“ ein. Als Typ wählst du „Ganze Zahl (2)“ und als Wert „0 (3)“.

Delayed Task zählen

Als erstes müssen wir erneut die aktuellen Projekte abrufen. Klicke auf den Button „+ Neuer Schritt“. Gebe im Suchfeld den Namen „Common“ ein. Suche im unteren Bereich nach der Aktion „Listenzeile“. Öffne das Optionsfeld und wähle als Tabellennamen „Projekte (1)“ aus. Expandiere die erweiterten Optionen. Da erneut nicht alle Felder abgerufen werden sollen, gebe ich nur die gewünschten Felder msdyn_subject, msdyn_projectid und statecode (2) ein. Unter Filterzeilen gebe ich wie oben „statecode eq 0 (3)“ ein. Ich benenne auch diese Aktion um, in den Namen „Alle aktiven Projekte auflisten zur Zählung“.

Jetzt benötigen wir zwei in sich laufenden Schleifen. Mit der ersten Schleife durchlaufen wir die Aufgaben, die zu unserem Filter passen. In der zweiten Schleife zählen wir dann die oben angelegte Variable hoch. Legen wir die erste Schleife an.

Klicke auf „+ Neuer Schritt“. Gebe im Suchfeld „Common“ ein. Wähle dann im unteren Bereich die Option „Listenzeile“. Wähle jetzt unter Tabellenname die Tabelle „Projektaufgaben“. Auch hier benötigen wie nicht alle Spalten. Gebe unter Spalten auswählen die Spalten „msdyn_subject, msdyn_finish, msdyn_progress, msdyn_summary und msdyn_ismilestone“ ein.

Der Filterzeile kommt eine besondere Rolle zu. Den hier filtern wir uns die Arbeitspakete, die verspätet sind heraus. Als erstes benötigen wir die Aufgaben, die gerade zu dem durchlaufenden Projekt gehören. Den Wert den wir dazu brauchen, ist aus der msdyn_project Tabelle die Spalte msdyn_projectid. Allerdings wirst du diese Spalte nicht in der msdyn_projecttask finden. In Power BI wird dir zwar die Spalte als msdyn_project zur Erstellung von Abhängigkeiten angezeigt, nicht aber in Power Automate. Bei der Spalte handelt es sich um eine versteckte Spalte. Solltest du dir mal die Ausgabe der API anschauen, dann wirst du sehen, dass die Spalte „_msdyn_project_value“ lautet. Diese kannst du auch genau so abfragen. Gebe also als ersten Filter „_msdyn_project_value eq“ ein. Danach soll er diese Spalte mit den Werten in der Spalte msdyn_projectid vergleichen und nur bei einer Übereinstimmung die Werte abrufen. Da wir den Wert „msdyn_projectid“ als dynamischen Wert brauchen, klickst du auf Ausdruck hinzufügen. Klicke im unteren Bereich bei „Alle aktiven Projekte auflisten zur Zählung“ auf die Option „Projekt“. Damit haben wir einen Vergleich erstellt.

Da wir noch weitere Filter benötigen, schreibst du jetzt ein „and“ hinter den vorherigen Befehl. Jetzt filtere ich ob das Enddatum der Aufgabe kleiner oder gleich des heutigen Datums ist. Gebe hierzu zuerst den Text „msdyn_finish le“ ein. Da wir jetzt automatisch immer das aktuelle Datum berechnen wollen, benötigen wir einen weiteren Ausdruck.  Klicke hierzu im geöffneten Fenster auf der rechten Seite den Reiter Ausdruck. Mit „utcNow()“ können wir immer die aktuelle Zeit ausgeben lassen. Gebe hierzu den Code „utcNow()“ ein und klicke dann auf OK.

Natürlich sollen auch nicht die Projekte berücksichtigt werden, die 100% abgeschlossen sind. Füge also ein weiteres „and“ und dann den Filter „msdyn_progress ne 1“ hinzu. Auch die Gliederungen in einem Projektplan sollen nicht berücksichtigt werden. Gebe dazu in unserem Filter ein weiteres „and“  mit der folgenden Abfrage  „msdyn_summary eq false“ ein. Abschließend möchte ich, dass die Meilensteine ebenfalls nicht berücksichtigt werden, also folgt der letzte Filterzusatz mit einem nachfolgenden „and“ und der Abfrage „msdyn_ismilestone eq false“. Der Filter sollte bei dir jetzt wie folgt aussehen.

Bennen jetzt die Aktion um. Klicke hierzu auf die drei Punkte und wähle im Kontextmenü die Option „Umbenennen“. Gebe jetzt den Namen „Aufgaben abfragen“ ein.

Variable berechnen

Wir haben jetzt die Arbeitspakete abgerufen, die unserem Filter entsprechen. Als nächstes müssen wir jetzt eine weitere Schleife durchlaufen. In dieser Schleife wird dann die Variable, die wir vorher initialisiert haben, beim durch laufen um eine Eins addiert.

Als erstes fügen wir jetzt händisch eine Schleife von Typ „Auf alle anwenden“ ein. Da wir diese Abfrage natürlich hinter der vorherigen Aktion durchführen müssen, klickst du diesmal auf „Aktion hinzufügen“ und nicht auf „+ Schritt hinzufügen“. Klicke auf den Reiter „Integriert“ und wähle dann die Option „Steuerung“. Wähle hier die Option „Auf alle anwenden“ aus.

Jetzt müssen wir die Ausgabe des letzten Schrittes der Schleife übergeben. Klicke mit der Maus in das Eingabefeldes „Ausgabe von vorherigen Schritten auswählen“. Wir geben jetzt den dynamischen Inhalt „value“ der vorherigen Abfrage ein. Suche in dem sich öffnenden Fenster unter der Rubrik „Dynamische Inhalte“ den Wert „Value (1)“ aus.

Jetzt klickst du innerhalb der neuen Schleife auf „Aktion hinzufügen“. Gebe im Suchfeld „Variable“ ein. Wähle in der Auswahl die Aktion „Variable schrittweise erhöhen“. Öffne das Optionsfeld „Name“ und wähle unsere oben angelegte Variable „varSetCountDelayedTask“ aus. Als Wert trägst du eine 1 ein. Jetzt wird die Variable bei jedem Projekt, bei dem der Filter passt, um 1 erhöht.

 Wenn die Schleife verlassen wird, wollen wir den Wert in die Spalte „Delayed Task“ eintragen. Gehe hierzu direkt unterhalb der Schleife auf Aktion hinzufügen. Gebe im Suchfeld „Common“ ein und wähle im unteren Bereich „Zeile aktualisieren“ aus. Gebe als Tabellennamen „Projekt“ ein. Als Zeilen-ID gibst du nun den dynamischen Wert „Projekt“ aus der Rubrik „Alle aktiven Projekte auflisten und Zählung“ ein.

Klicke im unteren Bereich auf „Erweiterte Optionen anzeigen“. Suche die Spalte „Delayed Task“ und klicke mit der Maus in das Feld. Jetzt müssen wir hier die Variable eintragen, da diese ja die Anzahl der verspäteten Aufgaben beinhaltet. Wähle aus dem Grund in dem sich öffnenden Fenster unter „Dynamische Inhalte“ in der Rubrik „Variablen“ unsere Variable aus. Die Ansicht sollte jetzt wie folgt aussehen.

Benenn auch diese zugeführte „Aktion“ wie in den vorherigen Schritten um. Ich gebe hier den Namen „Eintrag der Delayed Projekte ins ProjectCenter“ ein.

Nachdem der Wert eingetragen wurde, wird jetzt das nächste Projekt abgefragt, da wir die innere Schleife verlassen und wieder in die äußere wechseln. Da wir aber immer noch den aktuellen Wert der verspäteten Projekte in der Variable stehen haben, müssen wir diesen erst wieder auf „0“ setzen. Klicke hierzu direkt unter dem letzten Schritt auf die Option „Aktion hinzufügen“. Gebe in dem Suchfeld „Variable“ ein und wähle dann in der Mitte die Option „Variable festlegen“.

Wähle im Optionsfeld Name unsere Variable aus und gebe als Wert eine 0 ein. Die Ansicht müsste wie folgt aussehen.

Klicke im oberen Bereich auf „Speichern“. Klicke danach auf „Testen“. Wähle „Manuell“ aus und klicke dann im unteren Bereich auf „Testen“. Bestätige die nächste Abfrage in dem du auf „Flow ausführen“ klickst. Klicke abschließend auf „OK“.

Flow überprüfen

Im oberen Bereich wird dir mit einem grünen Band angezeigt, dass der Flow erfolgreich durchlaufen ist.

Öffne nun die Model-Driven-App von Project und wechsle in die Ansicht, der du die Spalte „Delayed Tasks“ hinzugefügt hast. Überprüfe, ob alle Task eingetragen wurden.

Tipp: Nutze den Filter oder Sortierung, um dir nur die Zeilen anzeigen zu lassen, die auch einen Wert haben.

Ein Kommentar

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Die folgenden im Rahmen der DSGVO notwendigen Bedingungen müssen gelesen und akzeptiert werden:
Durch Abschicken des Formulars wird dein Name, E-Mail-Adresse und eingegebene Text in der Datenbank gespeichert. Für weitere Informationen wirf bitte einen Blick in die Datenschutzerklärung.