Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Von Bedeutung
- Dies ist eine einsatzbereite Vorschaufunktion.
- Für einsatzbereite Vorschauversionen gelten ergänzende Nutzungsbedingungen.
Gilt für Dynamics 365 Project Operations integriert mit ERP und Dynamics 365 Project Operations für Fertigung
Der Ausgaben-Agent vereint Funktionen aus Microsoft Dynamics 365 Project Operations, Finance and Operations Apps, Microsoft Copilot Studio, Power Automate und Dataverse, um Ausgabenverarbeitungsworkflows mithilfe von KI zu automatisieren. Das Feature hilft Ihnen, Zeit zu sparen und den manuellen Aufwand zu reduzieren, indem es Ihrem System ermöglicht, Belege zu verarbeiten und Ausgabenpositionen und Ausgabenabrechnungen für Benutzer zu generieren. Es verwendet Microsoft Power Platform-Konnektor für die Integration in Outlook, Microsoft Teams, Benutzerkalender und die Finanz- und Betriebs-Apps-Umgebung über virtuelle Dataverse-Entitäten.
Der Ausgaben-Agent umfasst mehrere Flows, von denen drei als Kern-Orchestratoren dienen:
- Verarbeiten von E-Mails – Dieser Flow überprüft jeden Stunde einen konfigurierten Postfachordner und speichert die Anlagen als nicht angefügte Bestätigungen in Dynamics 365 Finance.
- Extrahieren von Beleg-IDs – Dieser Flow erfasst nicht angefügte Quittungen und löst den Agent aus, um Belegdetails zu extrahieren und eine nicht angefügte Ausgabenposition zu erstellen.
- Prozesskostenbericht – Dieser Flow konvertiert nicht angefügte Ausgabenpositionen und generiert Ausgabenabrechnungen basierend auf den Gruppenberichten nach Konfiguration, die in der Anwendung für jede juristische Person festgelegt ist.
Darüber hinaus ist der Agent in Microsoft Teams integriert und ermöglicht die Verwendung adaptiver Karten für die Überprüfung und Übermittlung von Ausgabenabrechnungen.
Der Agent basiert auf mehreren Microsoft Power Platform-Konnektoren. Auf diese Konnektoren wird automatisch in den bereitgestellten Power Automate-Flows verwiesen.
- Outlook (Office 365) – Dieser Konnektor greift auf das freigegebene Postfach zu, um Bestätigungen zu extrahieren.
- Dataverse (Virtuelle Entitäten) – Dieser Konnektor ist in Finanz- und Betriebs-Apps über virtuelle Entitäten integriert.
- Microsoft Copilot Studio – Dieser Konnektor ruft KI-Modelle auf, um Beleginformationen zu extrahieren.
- Microsoft Teams – Dieser Konnektor sendet adaptive Karten für Benutzerinteraktionen (wenn die Teams-Integration aktiviert ist).
- Microsoft 365-Benutzer – Dieser Konnektor ruft Benutzerkalenderdetails ab (optional, wenn die Beleganalyse kontextfähig ist).
Voraussetzungen
- Finanz- und Betriebsumgebung: Sie benötigen mindestens Version 10.0.44 (10.0.2263.167 und höher) oder 10.0.45 (10.0.2345.102 und höher) der Finanz- und Betriebsumgebung, um den Agent zu installieren.
- Zum Einrichten des Spesen-Agent-Benutzers erforderliche Rollen: Um die Schritte in diesem Artikel auszuführen, müssen Sie der Systemadministrator der Organisation sein und über die folgenden Rollen verfügen, um den Spesenagentenbenutzer für die Installation des Spesendiensts einzurichten.
| System | Rolle | Kommentare |
|---|---|---|
| Admin Center von Power Platform | Systemadministrator |
|
| Finance and Operations | Systemadministrator |
|
| Microsoft 365 | Für Exchange-Administration zuständige Person |
|
| Teams Admin-Center | Teams-Administrator | Erforderlich, wenn Sie die Integration von Microsoft Teams aktivieren möchten |
Schritte zum Einrichten des Ausgaben-Agent
Führen Sie die folgenden Schritte aus, um den Spesenagenten zu installieren und einzurichten:
- Installieren Sie Copilot für Finanz- und Betriebsanwendungen.
- Aktivieren Sie die Agent-Features in Ihrer Umgebung.
- Erstellen Sie einen Ausgabenbenutzer für die Agent-Ausführung.
- Richten Sie ein freigegebenes Postfach ein.
- Einrichten des Ausgaben-Agent.
- Aktivieren des Ausgaben-Agent in Microsoft Teams (optional – wenn Sie Microsoft Teams-Integration benötigen)
In den folgenden Abschnitten werden die einzelnen Schritte ausführlich beschrieben.
Schritt 1: Installieren von Copilot für Finance and Operations-Apps
Der Ausgaben-Agent ist als Teil des Copilot for Finance and Operations Apps-Pakets verfügbar. Nachdem Sie dieses Paket in Ihrer Umgebung installiert haben, erhalten Sie automatisch alle erforderlichen Ressourcen, einschließlich agent, Umgebungsvariablen und Power Automate-Flüssen.
Führen Sie die folgenden Schritte aus, um die erforderliche App zu installieren:
- Wechseln Sie im Browser zum Power Platform Admin Center .
- Wählen Sie in der Liste der Umgebungen den Namen der Umgebung aus, unter dem Sie die App installieren möchten.
- Wechseln Sie auf der Detailseite der Umgebung (NICHT über die linke Navigation) zum Abschnitt "Ressourcen ", und wählen Sie "Dynamics 365-Apps" aus.
- Suchen Sie in der Dynamics 365-App-Liste nach Copilot für Finanz- und Betriebs-Apps . Wenn es bereits installiert ist und ein Update verfügbar ist, wählen Sie die Schaltfläche Aktualisieren aus.
- Wenn die App nicht unter Dynamics 365-Apps aufgeführt ist, wählen Sie App installieren aus, wählen Sie Copilot für Finanz- und Betriebs-Apps aus, und folgen Sie den Anweisungen, um die Installation abzuschließen.
Hinweis
Erfahren Sie mehr darüber, wie Sie Copilot in Ihrer Umgebung in Copilot Funktionen in Finanz- und Betriebs-Apps aktivieren aktivieren.
Tipp
Führen Sie die folgenden Schritte aus, um zu überprüfen, ob das Paket erfolgreich installiert wurde:
- Wechseln Sie zum Power Apps Maker Portal > und wählen Sie Ihre Umgebung > aus, und wählen Sie Lösung > Verlauf anzeigen > und wählen Sie msdyn_ExpenseAI > Details aus.
- Überprüfen Sie das Ergebnisfeld.
- Wenn das Ergebnis Erfolg anzeigt, wurde das Paket ordnungsgemäß installiert.
- Wenn das Ergebnis Erfolg nicht angezeigt wird, ist die Installation fehlgeschlagen.
- Wenn die Installation fehlschlägt, löschen Sie msdyn_FnOCopilotAnchor (weitere Informationen im Deinstallationsabschnitt), und installieren Sie Copilot für Finanz- und Betriebs-Apps erneut.
Schritt 2: Aktivieren Sie die Agent-Features in Ihrer Umgebung
Nachdem Sie das App-Paket für Finanz- und Betriebsfunktionen von Copilot installiert haben, aktivieren Sie den Spesen-Agent in Ihrer Dataverse und Finanz- und Betriebsumgebung.
Wichtige Funktionen in Dataverse aktivieren
Aktivieren Sie das Copilot-Feature-Flag im Power Platform Admin Center. Führen Sie die folgenden Schritte aus, um die Copilot-Featurekennzeichnung zu aktivieren:
- Navigieren Sie zum Power Platform Admin Center.
- Wählen Sie Umgebungen> aus, und wählen Sie >>> aus, und wählen Sie Features aus.
- Vergewissern Sie sich, dass die Feature-Kennzeichnung Copilot aktiviert ist.
Aktivieren der Funktion in Ihrer Finanz- und Betriebsumgebung
Führen Sie die folgenden Schritte aus, um den Agent in Finanz- und Betriebs-Apps zu aktivieren:
- Melden Sie sich in Ihrer Finanz‑ und Betriebs-Apps-Umgebung an.
- Wechseln Sie zu Funktionsverwaltung und aktivieren Sie die Funktion Immersive Startseite und Agent-Verwaltung.
- Um den Ausgabendienst zu konfigurieren (Einrichtung ist pro juristische Person), wechseln Sie zu den Parametern Ausgabenverwaltung>einrichten>(Allgemeine>Ausgabenverwaltung).
- Konfigurieren Sie auf der Registerkarte Ausgabenabrechnungs-Agent die Parameter wie in der folgenden Tabelle dargestellt.
| Parameter | Wert | Kommentare |
|---|---|---|
| Ausgaben-Agent für die aktuelle juristische Person aktivieren | Yes | Wechseln Sie zu Ja, um den Agent für die aktuelle juristische Person zu aktivieren. |
| Frequenz | Täglich oder wöchentlich | Konfigurieren Sie die Häufigkeit für die automatische Erstellung von Ausgabenabrechnungen in Ihrer Organisation. |
| Gruppieren von Berichten nach | Reise oder Projekt | Konfigurieren Sie die Kosten basierend auf einem Projekt oder einer Reise, um Ausgaben zu gruppieren. |
Schritt 3: Erstellen eines Ausgaben-Agent-Benutzers für die Agent-Ausführung
Erstellen Sie einen dedizierten Ausgaben-Agent-Benutzer, um sicherzustellen, dass der Agent unabhängig von der Identität eines Mitarbeiters ausgeführt wird. Dieser Ansatz trägt zur Sicherheit, Verwaltbarkeit und langfristigen Verwaltbarkeit bei. Sie können zwar ein vorhandenes Benutzerkonto verwenden, das über die erforderlichen Berechtigungen verfügt, aber eine systemeigene Identität verwenden.
Erstellen Sie den Benutzer "Expense Agent" in Microsoft Entra ID.
- Melden Sie sich beim Azure-Portal an.
- Wählen Sie in den verfügbaren Azure-Diensten die Microsoft Entra-ID aus.
- Erstellen Sie unter der Microsoft Entra-ID einen neuen Benutzer.
- Wählen Sie Hinzufügen>Benutzer>Neuen Benutzer erstellen und geben Sie die folgenden Details ein
- Benutzerprinzipalname
- Richtige Domäne auswählen
- Anzeigename
- Kennwort
- Konto aktiviert kennzeichnen
- Um die Details anzuzeigen und den Benutzererstellungsprozess abzuschließen, wählen Sie Überprüfen und Erstellen aus, und wählen Sie Erstellen aus.
- Wählen Sie auf der Benutzer-Seite (Benutzer > verwalten) einen Benutzer und die Seite Details anzeigen aus.
- Wählen Sie Eigenschaften bearbeiten, navigieren Sie zur Registerkarte Einstellungen, und füllen Sie den entsprechenden Verwendungsort aus.
Hinweis
Je nach Ihrer Organisationsrichtlinie müssen Sie möglicherweise Ihr Kennwort ändern und die mehrstufige Authentifizierung (Multifactor Authentication, MFA) einrichten. Führen Sie die Schritte aus, wie Sie normalerweise zum Ändern des Kennworts und zum Einrichten von MFA vorgehen.
Zuweisen der erforderlichen Lizenzen zum Ausgaben-Agent-Benutzer
Um den Spesenagent erfolgreich zu installieren, weisen Sie dem Spesen-Agent-Benutzer die folgenden Lizenzen zu:
- Dynamics 365 Teams Mitgliederlizenz
- Microsoft 365 Business Basic oder eine beliebige Lizenz, die Microsoft Teams und Outlook abdeckt (z. B. Office 365 E5 mit Teams)
- Power Apps Premium
Führen Sie die folgenden Schritte aus, um Lizenzen zuzuweisen:
- Melden Sie sich beim Microsoft 365 Admin Center mit einem Benutzer an, der Zugriff auf das Zuweisen von Lizenzen hat, die ein Benutzer mit dem Lizenzadministrator oder höher ist.
- Wählen Sie Abrechnungslizenzen>>Dynamics 365 Teams Mitglieder-Lizenz aus.
- Wählen Sie +Lizenzen zuweisen aus.
- Suchen Sie nach dem im vorherigen Schritt erstellten Ausgaben-Agent-Benutzer.
- Wählen Sie Zuweisen aus, um die Lizenzzuweisung abzuschließen.
- Führen Sie die Schritte 2 bis 5 für die anderen Lizenzen aus – Microsoft 365 Business Basic und Power Apps Premium.
Hinweis
Erfahren Sie mehr über das Überprüfen und Zuweisen von Lizenzen auf der Seite Aktive Benutzer zum Zuweisen oder Aufheben der Zuweisung von Lizenzen.
Hinzufügen des Benutzers zur Power Platform-Umgebung
Führen Sie die folgenden Schritte aus, um den Benutzer zur Power Platform-Umgebung hinzuzufügen:
Um sich bei Power Platform Admin-Center an und wählen Sie die entsprechende Umgebung aus.
Tipp
Diese Seite enthält Informationen zur Umgebungs-ID für Dataverse, Umgebungs-URL für Dataverse, Finanz- und Betriebs-URL. Speichern Sie diese Werte, die in späteren Abschnitten verwendet werden sollen.
Wechseln Sie zu Zugriff> Benutzer > Alle anzeigen.
Wählen Sie Benutzer hinzufügen, geben Sie den neu erstellten Agent-Benutzer ein, und wählen Sie Hinzufügen aus.
Fügen Sie auf der Seite "Sicherheitsrollen verwalten " die folgenden Rollen hinzu.
- Rolle des Ausgaben-KI-Agents
- Finanz- und Betriebs-Agent Konfigurations-Manager
- Systemanpasser
Um die Rollenzuweisung zu bestätigen, wählen Sie Speichern.
Diese Rollen bieten Zugriff auf Dataverse- und Power Automate-Komponenten, die der Agent verwenden muss.
Tipp
Wenn der Benutzer bereits vorhanden ist und Sie nur Rollen zuweisen müssen, wechseln Sie zum Power Platform Admin Center, und wählen Sie die entsprechende Umgebung aus.
- Wechseln Sie zu Zugriff> Benutzer > Alle anzeigen.
- Wählen Sie den erstellten Agent-Benutzer aus.
- Wählen Sie Rollen verwalten aus, und weisen Sie die Rollen zu.
Zuweisen der erforderlichen Rolle in der Finanz- und Betriebsumgebung
Führen Sie die folgenden Schritte aus, um die Rolle ExpenseAgentRole in der Finanz- und Betriebsumgebung zuzuweisen:
- Wechseln Sie in der Finanz- und Betriebsumgebung zu Systemadministration>.
- Erstellen Sie einen Benutzerdatensatz für den Agent-Benutzer.
- Wechseln Sie nach dem Erstellen des Benutzers zum Abschnitt "Rollen des Benutzers", wählen Sie "Rollen zuweisen" aus, und suchen Sie nach ExpenseAgentRole.
- Wählen Sie Speichern aus.
Hinweis
ExpenseAgentRole ist in der Finanz- und Betriebs-Apps-Version von 10.0.44 (10.0.2263.81) und 10.0.45 (10.0.2345.6) und mit Copilot für Finanz- und Betriebs-Apps Version 1.0.3121.1 verfügbar
Zuweisen des Zugriffs auf das freigegebene Postfach
Der Agent-Benutzer muss über die Berechtigung Mail.Read.Shared Microsoft Graph verfügen. Diese Berechtigung ermöglicht es dem Agent, während der Flowausführung Bestätigungen aus dem konfigurierten freigegebenen Postfach zu lesen.
Führen Sie die folgenden Schritte aus, um Zugriff auf das freigegebene Postfach zuzuweisen:
- Wechseln Sie zum Microsoft Graph-Explorer , und melden Sie sich mit dem erstellten Agent-Benutzer an.
- Wählen Sie in der oberen rechten Ecke das > aus, und wählen Sie Berechtigungen zustimmen aus.
- Wählen Sie das Dropdownmenü für die E-Mail-Suche> nach Mail.Read.Shared> wählen Zustimmung, und wählen aus.
Zusammenfassung der erforderlichen Rollen für den erstellten Agent-Benutzer
| Umwelt | Rollen | Kommentare |
|---|---|---|
| Dataverse | Die erwähnten Rollen ermöglichen es dem Agent, mit Power Automate-Flow, Umgebungsvariablen und virtuellen Entitäten zu interagieren, die mit Dynamics 365 Finance verbunden sind | |
| Finance and Operations | Diese Rolle ist erforderlich, damit der Agent Ausgabeneinträge in der Finanz- und Betriebs-Apps-Umgebung erstellen und verwalten kann. Hinweis: ExpenseAgentRole ist in der Finanz- und Betriebs-App Version von 10.0.44 (10.0.2263.81) und 10.0.45 (10.0.2345.6) und mitCopilot für Finanz- und Betriebsapps Version 1.0.3121.1 verfügbar |
|
| Freigegebener Postfachzugriff mithilfe des Graph-Explorers | Mail.Read.Shared | Microsoft Graph-Berechtigung, mit der der Agent während der Ablaufausführung Bestätigungen aus dem konfigurierten freigegebenen Postfach lesen kann |
Schritt 4: Erstellen Sie das freigegebene Postfach
Der Ausgaben-Agent verwendet ein freigegebenes Postfach zum Empfangen und Verarbeiten von Bestätigungs-E-Mails. Ein Benutzer mit der Exchange-Administratorrolle muss dieses Postfach im Microsoft 365 Admin Center erstellen und konfigurieren.
Führen Sie die folgenden Schritte aus, um das freigegebene Postfach zu erstellen und zu konfigurieren:
Melden Sie sich mit einem Exchange-Administratorkonto beim Microsoft 365 Admin Center an.
Wählen Sie im linken Bereich Teams & Gruppen>freigegebenes Postfach.
Tipp
Möglicherweise müssen Sie "Alle anzeigen" auswählen, um die vollständige Liste zu erweitern.
Wählen Sie Freigegebenes Postfach hinzufügen aus.
Geben Sie einen Namen und eine E-Mail-Adresse für das freigegebene Postfach ein.
Wählen Sie Änderungen speichern aus.
Wählen Sie unter Nächste Schritte die Option Mitglieder zu diesem freigegebenen Postfach hinzufügen aus. (Die Mitgliederverwaltung kann einige Minuten dauern, bis sie verfügbar ist.)
Wählen Sie Mitglieder hinzufügen aus
Wählen Sie den erstellten Agent-Benutzer und alle anderen Benutzer aus, die das Postfach überwachen sollen, und wählen Sie Hinzufügen aus.
Wählen Sie "Schließen" aus.
Hinweis
Sie verwenden die E-Mail-Adresse des freigegebenen Postfachs im nächsten Schritt. Nachdem Sie das freigegebene Postfach eingerichtet haben, müssen Sie seine E-Mail-Adresse und den Ordnerpfad (standardmäßig auf "Posteingang" festgelegt) als Umgebungsvariablen angeben, wenn Sie den Time and Expense Agent konfigurieren. Weitere Informationen finden Sie unter Schritt 5: Einrichten des Spesenabrechnungsagenten.
Schritt 5: Einrichten des Ausgaben-Agent
Sie haben zwei Optionen zum Einrichten des Ausgabenagents:
- Option A: Verwenden eines PowerShell-Skripts (empfohlen)
- Option B: Manuelles Setup in Power Apps ausführen (keine PowerShell)
Von Bedeutung
Bevor Sie mit der Installation des Spesenagenten fortfahren, stellen Sie sicher, dass der Agent erfolgreich in Microsoft Copilot Studio bereitgestellt wird.
Führen Sie die folgenden Schritte aus, um zu überprüfen, ob der Agent erfolgreich bereitgestellt wurde:
- Melden Sie sich bei Microsoft Copilot Studio an, und wählen Sie Ihre Umgebung aus.
- Wechseln Sie zu Agents, und suchen Sie nach ExpenseAgent-Position (Vorschauversion).
- Überprüfen Sie, ob die Schaltfläche " Veröffentlichen " aktiviert ist.
- Wenn diese Option aktiviert ist, fahren Sie mit der Installation fort. Wenn sie deaktiviert ist, warten Sie, bis der Agent bereitgestellt wird.
- Wiederholen Sie diese Schritte, um zu überprüfen, ob der Speseneintrag-Agent (Vorschauversion) aktiviert ist.
Tipp
Wenn die Bereitstellung der Copilot Finance and Operations-App länger als 5-6 Stunden dauert, deinstallieren Sie die App, und installieren Sie sie erneut, um mögliche Setupverzögerungen zu beheben. Weitere Informationen finden Sie im Abschnitt " Spesenabrechnungs-Agent deinstallieren " am Ende dieses Artikels.
Option A: Verwenden eines PowerShell-Skripts (empfohlen)
Die manuelle Einrichtung des Agents umfasst das Erstellen und Verknüpfen von Verbindungen, das Aktivieren von Power Automate-Flows und das Veröffentlichen der Lösung. Dieser Prozess kann zeitaufwändig sein und ist anfällig für Fehler. Um das Setup zu automatisieren, können Sie nach dem Aktualisieren der erforderlichen Parameter ein PowerShell-Skript verwenden.
Das PowerShell-Skript automatisiert die folgenden Aufgaben:
- Aktualisiert die erforderlichen Umgebungsvariablen.
- Verknüpft Microsoft Power Platform-Verbindungen mit Lösungsverbindungsverweisen.
- Aktiviert alle Power Automate-Flows, die der Zeit- und Ausgaben-Agent benötigt.
- Veröffentlicht die Copilot-Agenten.
- Veröffentlicht die Dataverse-Lösung.
Bevor Sie das Skript ausführen, müssen Sie Verbindungen erstellen, da Sie die Verbindungs-ID für jeden Konnektor in der install.ps1-Datei angeben müssen. Führen Sie zum Erstellen dieser Verbindungen die folgenden Schritte mithilfe des erstellten Agent-Benutzers aus.
- Melden Sie sich mit dem neu erstellten Agent-Benutzer beim Power Apps Maker Portal an, und wählen Sie Ihre Umgebung aus.
- Erweitern Sie im linken Bereich die Option ... Mehr, und wählen Sie Verbindungen aus.
- Wählen Sie "Neue Verbindung" aus, und suchen Sie mithilfe des Verbindungsnamens aus der folgenden Tabelle (z. B. Office 365 Outlook).
- Wählen Sie den entsprechenden Konnektor aus der Liste aus, und erstellen Sie ihn.
- Nachdem die Verbindung erstellt wurde, notieren Sie sich den Benutzer, mit dem die Verbindung erstellt wurde. Es sollte idealerweise die erstellte Agent-Benutzer-ID sein. Diese Benutzer-ID muss in der Installationsdatei aktualisiert werden, die Sie im nächsten Schritt erstellen.
- wiederhole Sie die Schritte 3 und 4 für jede der verbleibenden erforderlichen Verbindungen, die in der folgenden Tabelle aufgeführt sind.
| Verbindungsname | Verbindungs-URL-Formate |
|---|---|
| Office 365 Outlook | https://make.powerapps.com/environments/environmentID/connections / shared_office365/connectionID/details |
| Office 365-Benutzer | https://make.powerapps.com/environments/environmentID/connections / shared_office365users/connectionID/details |
| Microsoft Teams | https://make.powerapps.com/environments/environmentID/connections / shared_teams/connectionID/details |
| Microsoft Dataverse | https://make.powerapps.com/environments/environmentID/connections / shared_commondataserviceforapps/connectionID/details |
| Microsoft Copilot Studio (Vorschauversion) | https://make.powerapps.com/environments/environmentID/connections / shared_microsoftcopilotstudio/connectionID/details |
Informationen, die Sie zum Erstellen der Installationsdatei benötigen
Zum Erstellen der Installationsdatei –install.ps1– stehen die folgenden Informationen zur Verfügung. (Sie können zur Referenz auf die folgende Tabelle verweisen.)
| Parameter | Sonstige Details |
|---|---|
| Dataverse-Umgebungs-ID | Geben Sie die Umgebungs-ID ein, die Sie über das Power Platform Admin Center erhalten. Beispielwert: xxxx-xxxx-xxxx-xxx-xxxxxxxxxx |
| Dataverse-Umgebungs-URL | Geben Sie die Umgebung-URL aus Power Platform Admin Center ein. Hinweis: Stellen Sie sicher, dass https:// am Anfang und kein Schrägstrich / am Ende vorhanden ist. Beispielwert: https://org123.crm.contoso.com |
| Finanz- und Betriebs-Instanz-URL | Geben Sie die Details zur Finanz- und Betriebsumgebung im folgenden Format ein. Beispielwert: https://org123.contoso.com Hinweis: Sicherstellen dasshttps:// am Anfang und kein Schrägstrich ‘/’ am Ende ist. |
| OutlookFolderPath | Geben Sie den Ordnerpfad ein, der im freigegebenen Postfach erstellt wurde. Wenn kein anderer Ordner erstellt wird, wird er standardmäßig als Posteingang festgelegt. Beispielwert: Posteingang Erstellen Sie als bewährte Methode einen separaten Ordner für die Spesenverwaltung. |
| Postfachadressen-ID | Geben Sie die E-Mail-Adresse des neu erstellten Freigabepostfachs ein Beispielwert: expenseagent@contoso.com |
| Microsoft Dataverse-Verbindungsname Microsoft Copilot Studio-Verbindungsname Microsoft Office Outlook-Verbindungsname Microsoft Office 365-Benutzerverbindungsname Microsoft Teams-Verbindungsname |
Die Eingabe aller Verbindungsnamen wäre idealerweise identisch und wäre die Benutzer-E-Mail-ID des erstellten Agent-Benutzers. Beispielwert: createdexpenseagentuser@contoso.com |
Erstellen der Installationsskriptdatei
Erstellen Sie eine Installationsskriptdatei, indem Sie den folgenden Code kopieren. Fügen Sie die erforderlichen Umgebungsvariablen in das Skript ein, und führen Sie dann das Skript mit PowerShell aus.
Hinweis
Platzieren Sie die Installationsskriptdatei auf dem lokalen Desktop. Speichern Sie sie nicht auf One Drive.
Erstellen Sie eine PowerShell-Skriptdatei mit dem folgenden Code. Aktualisieren Sie die erwähnten Parameter, bevor Sie das Skript ausführen.
Tipp
Wenn obligatorisch = $true, fordert PowerShell Sie auf, die Parameter interaktiv einzugeben, sodass Sie sie nicht direkt in der Skriptdatei aktualisieren müssen.
Wenn Sie manuelle Eingaben vermeiden und die Parameter innerhalb des Installationsskripts vordefinieren möchten, legen Sie "Verpflichtend = $false" im Abschnitt "Param" des folgenden Beispielcodes fest.
Kopieren Sie den folgenden Code in die Installationsskriptdatei, und speichern Sie ihn unter "Install.ps1". Aktualisieren Sie die Variablen in den entsprechenden Parameterfeldern im Param-Abschnitt. Sie müssen 10 Variablen aktualisieren.
Tipp
Verwenden Sie die vorherige Tabelle als Referenz, und ersetzen Sie alle Beispielwerte durch Ihre jeweiligen Details.
#requires -Version 7
Param(
[Parameter(Mandatory=$true, HelpMessage="Dataverse environment id")]
[string]$DataverseEnvironmentId = "xxxx-xxxx-xxxx-xxx-xxxxxxxxxx",
[Parameter(Mandatory=$true, HelpMessage="Dataverse environment URL")]
[string]$DataverseUrl = "https://org123.crm.dynamics.com",
[Parameter(Mandatory=$true, HelpMessage="Finance and Operations instance URL")]
[string]$D365FinanceAndOperationsUrl = "https://org123.operations.dynamics.com",
[Parameter(Mandatory=$true, HelpMessage="OutlookFolderPath")]
[string]$OutlookFolderPath = "Inbox",
[Parameter(Mandatory=$true, HelpMessage="Mailbox Address Id")]
[string]$MailboxAddressId = "expenseagent@contoso.com",
[Parameter(Mandatory=$true, HelpMessage="Microsoft Dataverse connection name")]
[string]$MicrosoftDataverseConnectionName = "createdexpenseagentuser@contoso.com",
[Parameter(Mandatory=$true, HelpMessage="Microsoft Copilot Studio connection name")]
[string]$MicrosoftCopilotStudioConnectionName = "createdexpenseagentuser@contoso.com",
[Parameter(Mandatory=$true, HelpMessage="Microsoft Office Outlook connection name")]
[string]$Office365OutlookConnectionName = "createdexpenseagentuser@contoso.com",
[Parameter(Mandatory=$true, HelpMessage="Microsoft Office 365 Users connection name")]
[string]$Office365UsersConnectionName = "createdexpenseagentuser@contoso.com",
[Parameter(Mandatory=$true, HelpMessage="Microsoft Teams connection name")]
[string]$MicrosoftTeamsConnectionName = "createdexpenseagentuser@contoso.com",
[Parameter(Mandatory=$false, HelpMessage="Checks for bot Sync Errors and if there is provisioning required before Agent publish step")]
[boolean]$CheckBotSyncStatusAndProvisionBots = $false
)
$flows = @(
"expense entry retry check",
"expense configuration",
"get expense outlook folder",
"generate expense report",
"send expense report adaptive card",
"auto match expenses",
"process emails",
"extract unattached receipt ids for copilot invocation",
"extract unattached receipt output using dataverse plugin",
"generate expense line",
"generate expense line without project id and status id",
"identify project ids",
"user calendar events",
"process expense report using copilot",
"invoke expense agent for receipt processing"
)
$agents = @(
"msdyn_ExpenseEntryAgent",
"msdyn_ExpenseReportAgent"
)
# Check PS version
if ($PSVersionTable.PSVersion.Major -lt 7) {
Write-Error 'This script requires at least PowerShell version 7' -ErrorAction Stop
}
# Install the required modules if not already installed or if the version is not 1.0.40
if (-not (Get-Module -ListAvailable -Name Microsoft.PowerApps.PowerShell | Where-Object { $_.Version -ge [Version]"1.0.40" })) {
Write-Host "Microsoft.PowerApps.PowerShell version 1.0.40 not found. Installing..." -ForegroundColor Yellow
Install-Module -Name Microsoft.PowerApps.PowerShell -RequiredVersion 1.0.40 -Force -AllowClobber -Scope CurrentUser
} else {
Write-Host "Microsoft.PowerApps.PowerShell version 1.0.40 is already installed." -ForegroundColor Green
}
if (-not (Get-Module -ListAvailable -Name Microsoft.PowerApps.Administration.PowerShell | Where-Object { $_.Version -ge [Version]"2.0.147" })) {
Install-Module -Name Microsoft.PowerApps.Administration.PowerShell -RequiredVersion 2.0.147 -Force -AllowClobber -Scope CurrentUser
}
# Install the required modules if not already installed
if (-not (Get-Module -ListAvailable -Name Az.Accounts | Where-Object { $_.Version -ge [Version]"5.0.1"})) {
Install-Module -Name Az.Accounts -RequiredVersion 5.0.1 -Force -AllowClobber -Scope CurrentUser
}
# Import required modulesds
Import-Module Az.Accounts
Import-Module Microsoft.PowerApps.PowerShell
Import-Module Microsoft.PowerApps.Administration.PowerShell
# global variable declaration
$filter = '$filter'
function Get-AccessToken {
# Retrieve the access token for the Dataverse environment
$accessToken = (Get-AzAccessToken -ResourceUrl "$DataverseUrl" -AsSecureString).Token
Write-Host "Access token for $userId retrieved successfully." -ForegroundColor Green
return $accessToken
}
function Get-AccessTokenPlainText {
param(
[Parameter(Mandatory=$true, HelpMessage="Access token for authentication")]
[securestring]$accessToken
)
# Retrieve the access token for the PVA environment
$token = [Runtime.InteropServices.Marshal]::PtrToStringAuto(
[Runtime.InteropServices.Marshal]::SecureStringToBSTR($accessToken))
return $token
}
function update-EnvironmentVaribleValue {
param (
[string]$accessToken,
[string]$env_key,
[string]$env_value # Access token for authentication
)
try
{
# Get the environment variable definition
$envVarDefinition = Invoke-RestMethod -Method Get -Uri "$DataverseUrl/api/data/v9.2/environmentvariabledefinitions?$filter=schemaname eq '$env_key'" -Headers @{
Authorization = "Bearer $accessToken"
}
if ($envVarDefinition.value -ne $null) {
$envVarDefId = $envVarDefinition.value[0].environmentvariabledefinitionid
# Get the environment variable value record
$filterValue = [System.Web.HttpUtility]::UrlEncode("_environmentvariabledefinitionid_value eq $envVarDefId")
$envVarValue = Invoke-RestMethod -Method Get -Uri "$DataverseUrl/api/data/v9.2/environmentvariablevalues?$filter=$filterValue" -Headers @{
Authorization = "Bearer $accessToken"
}
if ($envVarValue.value -ne $null) {
$envVarValueId = $envVarValue.value[0].environmentvariablevalueid
# Update the environment variable value
Invoke-RestMethod -Method Patch -Uri "$DataverseUrl/api/data/v9.2/environmentvariablevalues($envVarValueId)" -Headers @{
Authorization = "Bearer $accessToken"
"Content-Type" = "application/json"
} -Body (@{ value = $env_value } | ConvertTo-Json -Depth 1)
Write-Host "Environment variable updated with name $env_key and value $env_value" -ForegroundColor Green
} else {
Write-Host "Environment variable value not found for $env_key. Skipping..." -ForegroundColor Red
}
}
else {
Write-Host "Environment variable definition not found for $env_key. Skipping..." -ForegroundColor Yellow
}
}
catch {
Write-Host "Failed to update environment variable $env_key. Error: $($_)" -ForegroundColor Red
throw $_ # Re-throw the error to stop the script if this step is critical
}
}
function update_EnvironmentVariablesForExpense {
param (
[string]$accessToken # Access token for authentication
)
write-host "Updating environment variables..." -ForegroundColor Yellow
try
{
update-EnvironmentVaribleValue -accessToken $accessToken -env_key "msdyn_ExpenseFnoInstanceUrl" -env_value $D365FinanceAndOperationsUrl
update-EnvironmentVaribleValue -accessToken $accessToken -env_key "msdyn_ExpenseAgentOutlookFolderPath" -env_value $OutlookFolderPath
update-EnvironmentVaribleValue -accessToken $accessToken -env_key "msdyn_ExpenseAgentMailboxAddressId" -env_value $MailboxAddressId
}
Catch {
Write-Host "Failed to update environment variables. Error: $($_)" -ForegroundColor Red -ErrorAction Stop
}
}
# Function to publish the solution
function Publish-Solution {
param (
[string]$accessToken
)
Write-Host "Publishing All" -ForegroundColor Yellow
# Construct the API endpoint for publishing the solution
$uri = "$DataverseUrl/api/data/v9.2/PublishAllXml"
# Make the API call
try {
Invoke-RestMethod -Method Post `
-Uri $uri `
-Headers @{
Authorization = "Bearer $accessToken"
"Content-Type" = "application/json"
}
Write-Host "Publish All - Success!" -ForegroundColor Green
} catch {
Write-Host "Failed to publish. Error: $($_.Exception)" -ForegroundColor Red
}
}
function Get-FlowGuidByName {
param (
[string]$accessToken, # Access token for authentication
[string]$flowName # Name of the flow to search for
)
#Write-Host "Retrieving GUID for flow: $flowName" -ForegroundColor Yellow
# Construct the API endpoint with a filter for the flow name
$encodedFlowName = [System.Web.HttpUtility]::UrlEncode($flowName)
$uri = "$DataverseUrl/api/data/v9.2/workflows?$filter=name eq '$encodedFlowName'"
try {
# Make the API call
$response = Invoke-RestMethod -Method Get `
-Uri $uri `
-Headers @{
Authorization = "Bearer $accessToken"
"Content-Type" = "application/json"
}
# Check if the flow was found
if ($response.value.Count -gt 0) {
$flow = $response.value[0]
Write-Host "Flow found: $($flow.name) with GUID: $($flow.workflowid)" -ForegroundColor Green
return $flow.workflowid
} else {
Write-Host "No flow found with the name: $flowName" -ForegroundColor Red
return $null
}
} catch {
Write-Host "Failed to retrieve flow GUID. Error: $($_.Exception.Message)" -ForegroundColor Red
return $null
}
}
# Function to activate a Power Automate flow
function Activate-Flow {
param (
[string]$DataverseUrl, # Dataverse environment URL
[string]$accessToken, # Access token for authentication
[string]$flowId # GUID of the flow to activate
)
# Construct the request body
$body = @{
"statecode" = 1 # Activated
"statuscode" = 2 # Activated
} | ConvertTo-Json -Depth 1 -Compress
# Construct the API endpoint
$uri = "$DataverseUrl/api/data/v9.2/workflows($flowId)"
# Make the API call
try {
Invoke-RestMethod -Method Patch `
-Uri $uri `
-Headers @{
Authorization = "Bearer $accessToken"
"Content-Type" = "application/json"
} `
-Body $body
Write-Host "Flow activated successfully." -ForegroundColor Green
} catch {
Write-Host "Failed to activate flow. Error: $($_.Exception.Message)" -ForegroundColor Red
}
}
function Get-ConnectionRefIdFromLogicalName {
param (
[string]$accessToken,
[string]$connectionRefLogicalName
)
$uri = "$DataverseUrl/api/data/v9.2/connectionreferences?$filter=connectionreferencelogicalname eq '$connectionRefLogicalName'"
$response = Invoke-RestMethod -Method Get `
-Uri $uri `
-Headers @{
Authorization = "Bearer $accessToken"
"Content-Type" = "application/json"
}
if ($response -ne $null) {
write-host "Connection reference id found: $($response.value[0].connectionreferenceid) " -ForegroundColor Green
return $response.value[0].connectionreferenceid
}
else {
Write-Host "No connection reference found for logical name: $connectionRefLogicalName" -ForegroundColor Red
return $null
}
}
function Get-ConnectionId {
param (
[string]$userProvidedName,
[string]$providerName
)
try {
$matchedConnectionId = $null
# Added -ErrorAction Stop to ensure the catch block is triggered on failure
$connections = Get-PowerAppConnection -EnvironmentName $DataverseEnvironmentId -ConnectorNameFilter $providerName -ErrorAction Stop
foreach ($con in $connections) {
if (($con.ConnectionName -eq $userProvidedName) -or ($con.DisplayName -eq $userProvidedName)) {
$matchedConnectionId = $con.ConnectionName
break
}
}
if ($null -eq $matchedConnectionId) {
# Use 'throw' to create a terminating error that the calling function can catch
throw "Unable to find connection '$userProvidedName' for provider '$providerName'."
}
return $matchedConnectionId
}
catch {
# Catch any errors from Get-PowerAppConnection or the 'throw' statement above
Write-Error "Failed to get connection ID for '$userProvidedName'. Error: $_"
throw # Re-throw the error to stop the script if this step is critical
}
}
function Get-ConnectionReferenceId {
param(
[string]$connectionReferenceLogicalName,
[securestring]$accessToken
)
try {
$uri = "$DataverseUrl/api/data/v9.2/connectionreferences?$filter=connectionreferencelogicalname eq '$connectionReferenceLogicalName'"
# Added -ErrorAction Stop for clarity, though Invoke-RestMethod often terminates on HTTP errors
$response = Invoke-RestMethod -Method Get -Uri $uri -Authentication Bearer -Token $accessToken -ContentType 'application/json' -ErrorAction Stop
if ($null -eq $response -or $response.value.Count -eq 0) {
throw "Connection reference not found for logical name '$connectionReferenceLogicalName'."
}
$connectionReferenceDisplayName = $response.value[0].connectionreferencedisplayname
$connectionReferenceId = $response.value[0].connectionreferenceid
Write-Host "updating connection $connectionReferenceDisplayName for logical name $connectionReferenceLogicalName)"
return $connectionReferenceId
}
catch {
Write-Error "Failed to get connection reference ID for '$connectionReferenceLogicalName'. Error: $_"
throw # Re-throw to notify the calling function
}
}
function Set-ConnectionReferenceConnection {
param (
[string]$connectionReferenceLogicalName,
[string]$userProvidedConnectionName,
[string]$providerName,
[securestring]$accessToken
)
try {
# These functions will now throw terminating errors if they fail
$connectionReferenceId = Get-ConnectionReferenceId -connectionReferenceLogicalName $connectionReferenceLogicalName -accessToken $accessToken
$connectionId = Get-ConnectionId -userProvidedName $userProvidedConnectionName -providerName $providerName
$body = @{
"connectionid" = "$connectionId"
} | ConvertTo-Json -Depth 1
$uri = "$DataverseUrl/api/data/v9.2/connectionreferences($connectionReferenceId)"
# Write-Host "Updating connection reference URI: $uri with connection id $connectionId"
Invoke-RestMethod -Method Patch -Uri $uri -Authentication Bearer -Token $accessToken -ContentType 'application/json' -Body $body -ErrorAction Stop
Write-Host "Connection reference updated successfully." -ForegroundColor Green
}
catch {
# This block will catch errors from any of the functions called within the try block
Write-Error "Failed to set connection reference for '$connectionReferenceLogicalName'. Error: $_"
throw
}
}
function Activate-Flows {
param (
[string]$accessToken,
[array]$expenseAIFlows
)
foreach ($flowName in $expenseAIFlows) {
Write-Host "Activating flow: $flowName" -ForegroundColor Yellow
# Call the Get-FlowGuidByName function to get the flow GUID
$flowGuid = Get-FlowGuidByName -dataverseUrl $DataverseUrl -accessToken $accessToken -flowName $flowName
if ($flowGuid -ne $null) {
# Write-Host "Flow Name: $flowName, Flow GUID: $flowGuid" -ForegroundColor Green
Activate-Flow -dataverseUrl $DataverseUrl -accessToken $accessToken -flowId $flowGuid
# Write-Host "Flow Name: $flowName, Flow GUID: $flowGuid Activated" -ForegroundColor Green
} else {
Write-Host "Flow Name: $flowName not found." -ForegroundColor Red
}
}
}
# Function to retrieve the Agent ID by name
function Get-AgentIdBySchemaName {
param (
[string]$DataverseUrl,
[string]$accessToken,
[string]$agentSchemaName
)
Write-Host "Retrieving agent ID for agent schema: $agentSchemaName" -ForegroundColor Yellow
# Construct the API endpoint to retrieve the bot
$uri = "$DataverseUrl/api/data/v9.2/bots?$filter=schemaname eq '$agentSchemaName'"
try {
# Make the API call
$response = Invoke-RestMethod -Method Get -Uri $uri -Headers @{
Authorization = "Bearer $accessToken"
"Content-Type" = "application/json"
}
if ($response.value.Count -gt 0) {
$agentId = $response.value[0].botid
return $agentId
} else {
Write-Host "No agent found with the name: $agentSchemaName" -ForegroundColor Red
return $null
}
} catch {
Write-Host "Failed to retrieve agent ID. Error: $($_)" -ForegroundColor Red
return $null
}
}
function Check-BotSyncErrors {
param (
[string]$DataverseUrl,
[string]$accessToken,
[string]$botId
)
Write-Host "Retrieving Sync Status for bot ID: $botId" -ForegroundColor Yellow
# Construct the API endpoint to retrieve the bot
$uri = "$DataverseUrl/api/data/v9.2/bots($botId)"
try {
# Make the API call
$response = Invoke-RestMethod -Method Get -Uri $uri -Headers @{
Authorization = "Bearer $accessToken"
"Content-Type" = "application/json"
}
if ($null -ne $response.synchronizationstatus) {
# Parse the JSON string in synchronizationstatus
$syncStatusObj = $response.synchronizationstatus | ConvertFrom-Json
$state = $syncStatusObj.currentSynchronizationState.state
$provisioningStatus = $syncStatusObj.currentSynchronizationState.provisioningStatus
Write-Host "Synchronization State: $state" -ForegroundColor Green
Write-Host "Provisioning Status: $provisioningStatus" -ForegroundColor Green
if ( $state -contains "Error" -or $provisioningStatus -contains "Error") {
Write-Host "Bot has synchronization errors." -ForegroundColor Red
return 0
} else {
if ( $state -eq "Synchronized" -or $state -eq 'Synchronizing' -and ($provisioningStatus -eq "Provisioned" -or $provisioningStatus -eq "ProvisionedWithoutRegistration")) {
Write-Host "Bot synchronization is done." -ForegroundColor Yellow
return 1
} else {
Write-Host "Bot synchronization is in progress." -ForegroundColor Green
return 2
}
}
} else {
Write-Host "No synchronization status found for bot ID: $botId" -ForegroundColor Red
return $null
}
} catch {
Write-Host "Failed to retrieve agent ID. Error: $($_)" -ForegroundColor Red
return $null
}
}
# Function to provision a PVA bot
function Provision-Agent {
param (
[string]$DataverseUrl,
[string]$accessToken,
[string]$agentId
)
# Construct the API endpoint for publishing the bot
$uri = "$DataverseUrl/api/data/v9.2/bots($agentId)/Microsoft.Dynamics.CRM.PvaProvision"
try {
# Make the API call
Invoke-RestMethod -Method Post -Uri $uri -Headers @{
Authorization = "Bearer $accessToken"
"Content-Type" = "application/json"
}
Write-Host "Agent Provisioning successfully!" -ForegroundColor Green
# Add 30 second delay to allow the publish process to complete
Start-Sleep -Seconds 30
return $true
} catch {
Write-Host "Failed to Provision Agent. Error: $($_.Exception.Message)" -ForegroundColor Red
}
return $false
}
# Function to publish a PVA bot
function Publish-Agent {
param (
[string]$DataverseUrl,
[string]$accessToken,
[string]$agentId
)
Write-Host "Publishing agent with ID: $agentId" -ForegroundColor Yellow
# Construct the API endpoint for publishing the bot
$uri = "$DataverseUrl/api/data/v9.2/bots($agentId)/Microsoft.Dynamics.CRM.PvaPublish"
try {
# Make the API call
Invoke-RestMethod -Method Post -Uri $uri -Headers @{
Authorization = "Bearer $accessToken"
"Content-Type" = "application/json"
}
Write-Host "Agent published successfully!" -ForegroundColor Green
# Add 30 second delay to allow the publish process to complete
Start-Sleep -Seconds 30
} catch {
Write-Host "Failed to publish Agent. Error: $($_.Exception.Message)" -ForegroundColor Red
}
}
function Publish-Agents {
param (
[string]$accessToken,
[array]$agentSchemas
)
if (-not $agentSchemas -or $agentSchemas.Count -eq 0) {
Write-Host "No agent schemas provided. Skipping agent publishing." -ForegroundColor Yellow
return
}
foreach ($agentSchema in $agentSchemas) {
#Write-Host "Publishing agent schema: $agentSchema" -ForegroundColor Yellow
try {
# Construct the API endpoint for publishing the agent schema
$agentId = Get-AgentIdBySchemaName -dataverseUrl $DataverseUrl -accessToken $accessToken -agentSchemaName $agentSchema
if ($agentId -ne $null) {
# check for sync errors
if ($CheckBotSyncStatusAndProvisionBots) {
$syncStatus = Check-BotSyncErrors -dataverseUrl $DataverseUrl -accessToken $accessToken -botId $agentId
if (0 -eq $syncStatus) {
Write-Host "Agent has sync errors. Skipping the publish process. Please check the bot: $agentId details" -ForegroundColor Red
continue
} elseif (2 -eq $syncStatus) {
Write-Host "Agent synchronization is still in progress. reprovisioning the agent." -ForegroundColor Yellow
if (Provision-Agent -dataverseUrl $DataverseUrl -accessToken $accessToken -agentId $agentId -eq $false) {
Write-Host "Agent reprovisioning failed. Skipping the publish process. Please check the bot: $agentId details" -ForegroundColor Red
continue
}
} else {
Write-Host "Agent synchronization is done. Proceeding to publish." -ForegroundColor Green
}
}
# Step 4: Publish the bot
Publish-Agent -dataverseUrl $DataverseUrl -accessToken $accessToken -agentId $agentId
} else {
Write-Host "Agent not found. Cannot proceed with publishing.Skipping the step" -ForegroundColor Yellow
}
}
catch {
Write-Host "An error occurred while publishing agent schema: $agentSchema. Error: $_" -ForegroundColor Red
}
}
}
# Main script execution
try {
$expenseAIFlows = $flows
$agentSchemas = $agents
# Step 1: Interactive login to Azure
Connect-AzAccount -UseDeviceAuthentication
$accessToken = Get-AccessToken
$accessTokenPlainText = Get-AccessTokenPlainText -accessToken $accessToken
# Step 2: Setup ennviornment variables
update_EnvironmentVariablesForExpense -accessToken $accessTokenPlainText
Write-Host "Environment variables updated successfully!" -ForegroundColor Green
# Step 3: Check active connections
Set-ConnectionReferenceConnection -userProvidedConnectionName $MicrosoftDataverseConnectionName -providerName "/providers/Microsoft.PowerApps/apis/shared_commondataserviceforapps" -connectionReferenceLogicalName "msdyn_sharedcommondataserviceforapps_2c2d4" -accessToken $accessToken
Set-ConnectionReferenceConnection -userProvidedConnectionName $MicrosoftCopilotStudioConnectionName -providerName "/providers/Microsoft.PowerApps/apis/shared_microsoftcopilotstudio" -connectionReferenceLogicalName "msdyn_sharedmicrosoftcopilotstudio_26d9d" -accessToken $accessToken
Set-ConnectionReferenceConnection -userProvidedConnectionName $Office365OutlookConnectionName -providerName "/providers/Microsoft.PowerApps/apis/shared_office365" -connectionReferenceLogicalName "msdyn_sharedoffice365_9b471" -accessToken $accessToken
Set-ConnectionReferenceConnection -userProvidedConnectionName $MicrosoftTeamsConnectionName -providerName "/providers/Microsoft.PowerApps/apis/shared_teams" -connectionReferenceLogicalName "msdyn_sharedteams_8ea9c" -accessToken $accessToken
Set-ConnectionReferenceConnection -userProvidedConnectionName $Office365UsersConnectionName -providerName "/providers/Microsoft.PowerApps/apis/shared_office365users" -connectionReferenceLogicalName "msdyn_sharedoffice365users_909b9" -accessToken $accessToken
# Step 4: Activate flows
Activate-Flows -accessToken $accessTokenPlainText -expenseAIFlows $expenseAIFlows
# step 5: publish the agents
Publish-Agents -accessToken $accessTokenPlainText -agentSchemas $agentSchemas
# Step 6: Publish the solution
Publish-Solution -accessToken $accessTokenPlainText
Write-Host "Agent setup completed successfully!" -ForegroundColor Green
} catch {
Write-Host "An error occurred: $_" -ForegroundColor Red
}
Führen Sie die folgenden Schritte aus, um die PowerShell-Datei auszulösen:
- Öffnen Sie PowerShell (Mindestversion erforderlich – PowerShell 7).
- Wechseln Sie zu dem Speicherort, an dem Sie die Datei gespeichert haben. (Verwenden Sie den Befehls-CD <Dateispeicherort>).
- Auslösen des Installationsskripts. (Verwenden Sie den Befehl '.\Install.ps1').
- Folgen Sie den Anweisungen, um sich bei Azure anzumelden.
- Nachdem Sie sich angemeldet haben, müssen Sie möglicherweise ein weiteres Mal autorisieren. (Verwenden Sie die erstellte Agent-Benutzer-ID.).
Warten Sie, bis das Skript vollständig ausgeführt wird, und suchen Sie nach der Meldung Agenteneinrichtung erfolgreich abgeschlossen!
Hinweis
Das vorangehende Skript führt die folgenden Aktionen aus:
- Legt Umgebungsvariablen fest.
- Überprüft und verknüpft Verbindungsverweise.
- Aktiviert Power Automate-Abläufe.
- Veröffentlicht die erforderlichen Copilot-Agenten.
- Veröffentlicht die Dataverse-Lösung.
Nachdem das Skript erfolgreich ausgeführt wurde, ist Der Spesenagent vollständig konfiguriert und kann verwendet werden.
Option B: Manuelles Einrichten in Power Apps (keine PowerShell)
Wenn Sie das PowerShell-Skript nicht verwenden möchten, können Sie den Spesenabrechnungs-Agent manuell über Power Apps konfigurieren. Dieser Prozess umfasst das Aktualisieren von Umgebungsvariablen, das Aktivieren von Power Automate-Flows und das Veröffentlichen der Lösung.
Umgebungsvariablen aktualisieren
Führen Sie die folgenden Schritte aus, um Umgebungsvariablen zu aktualisieren:
Melden Sie sich bei Power Apps an und wählen Sie Ihre Umgebung aus.
Wählen Sie Lösungen aus, und öffnen Sie dann Standardlösung (oder die Lösung, in der der Agent installiert ist).
Wechseln Sie zu Umgebungsvariablen und legen Sie die folgenden Werte fest.
Variablenname BESCHREIBUNG Outlook-Ordnerpfad für Ausgaben-Agent Ordnerpfad innerhalb des freigegebenen Postfachs definieren, der überwacht werden soll (Standard ist Posteingang). ID der Adresse des freigegebenen Postfachs des Ausgaben-Agents Geben Sie die E-Mail-Adresse des freigegebenen Postfachs ein. Um das Postfach des angemeldeten Benutzers zu verwenden, geben Sie NA ein. URL der Finanz- und Betriebs-Apps-Instanz Geben Sie die URL der Finanz- und Betriebs-Apps-Umgebung an (z. B https://org123.contoso.com. ).
Power Automate-Flows aktivieren
Der Spesenagent basiert auf den folgenden Power Automate-Flows:
- Prüfung des erneuten Ausgabeneintrags
- Ausgabenkonfiguration
- Outlook-Ordner „Ausgaben“ abrufen
- Spesenabrechnung generieren
- Adaptive Karte für Ausgabenbericht senden
- Ausgaben für automatische Übereinstimmung
- E-Mails verarbeiten
- Nicht angehängte Beleg-IDs für Copilot-Aufruf extrahieren
- Extrahieren der Ausgabe des nicht angefügten Belegs mithilfe des Dataverse-Plug-Ins
- Spesenabrechnung generieren
- Spesenzeile ohne Projekt-ID und Status-ID generieren
- Identifizieren von Projekt-IDs
- Benutzerkalenderereignisse
- Verarbeiten einer Spesenabrechnung mit Copilot
- Aufrufen des Ausgabenagents für die Belegverarbeitung
Führen Sie die folgenden Schritte aus, um die Flüsse zu aktivieren:
Melden Sie sich bei Power Automate an, und wählen Sie Ihre Umgebung aus.
Wählen Sie Meine Flows aus.
Führen Sie für jeden der 15 Flüsse in der vorherigen Liste die folgenden Schritte aus:
- Finden Sie den Flow.
- Wählen Sie Bearbeiten aus.
- Wechseln Sie zur Ansicht Alter Designer, indem Sie die Option Neuer Designer deaktivieren.
- Authentifizieren Sie alle erforderlichen Verbindungen (bis grüne Häkchen angezeigt werden).
- Wählen Sie "Weiter" und dann " Speichern" aus.
- Wählen Sie Einschalten aus, um den Flow zu aktivieren.
Lösung veröffentlichen
Nachdem Sie alle Umgebungsvariablen und -flows konfiguriert haben, führen Sie die folgenden Schritte aus, um die Lösung zu veröffentlichen.
- Wechseln Sie in Power Apps zu Lösungen.
- Wählen Sie Ihre Umgebung und Lösung aus.
- Wählen Sie Alle Anpassungen veröffentlichen aus.
Wenn Sie diese Schritte ausführen, ist der Spesenagent vollständig konfiguriert und kann verwendet werden.
Schritt 6: Aktivieren des Spesenagents in Microsoft Teams (optional)
Um die teamsbasierte Kommunikation für den Spesenagenten zu aktivieren, fügen Sie den Teams-Kanal zum Agent in Power Apps hinzu. Der Agent kann dann adaptive Karten senden über Teams senden.
Den Teams-Kanal aktivieren
Führen Sie die folgenden Schritte aus, um den Teams-Kanal zu aktivieren:
- Melden Sie sich bei Copilot Studio an, und wählen Sie die richtige Umgebung aus.
- Wählen Sie auf der Registerkarte Agents die Option Spesenabrechnungs-Agent aus.
- Wählen Sie in der Agent-Ansicht auf der Registerkarte KanäleTeams und Microsoft 365 Copilot aus.
- Wählen Sie Kanal hinzufügen aus, um die Teams-Integration zu aktivieren, und führen Sie die Schritte im Abschnitt Konfigurieren der Verfügbarkeit von Teams-Apps aus, um zu konfigurieren, wer die App freigeben soll.
Weitere Informationen finden Sie im Konfigurationsbereich für den Microsoft Teams + Microsoft 365-Kanal.
Konfigurieren der Verfügbarkeit von Teams-Apps
Führen Sie die folgenden Schritte aus, um die Verfügbarkeit von Teams-Apps zu konfigurieren:
Nachdem die Teams-App erstellt wurde, wählen Sie Verfügbarkeitsoptionen aus.
Wählen Sie den Benutzer aus, mit dem Sie die App teilen möchten:
- Bestimmte Benutzer innerhalb der Organisation
- Die gesamte Organisation
Übermitteln Sie die App zur Genehmigung.
Veröffentlichen der App im Teams Admin Center
Führen Sie die folgenden Schritte aus, um die App im Teams Admin Center zu veröffentlichen:
- Anmelden bei Teams Admin Center.
- Wechseln Sie zu Teams-App > "Apps verwalten". Suchen Sie nach Ausgaben, und wählen Sie die App Ausgabeneintrags-Agent aus, in der der App-Status blockiert ist.
- Wählen Sie Veröffentlichen aus, um die App freizugeben. Nachdem die Veröffentlichungsaktion erfolgreich abgeschlossen wurde, stellen Sie sicher, dass sich der App-Status in Entsperrt ändert.
Mehr erfahren unter Einen Agent für Teams und Microsoft 365 verbinden und konfigurieren.
Nachdem diese Schritte abgeschlossen sind, ist Ihr Spesenagent jetzt vollständig eingerichtet und kann losgehen.
Hinweis
Sie können auch Feedback zu automatisch generierten Ausgabenzeilen und -berichten mit den Daumen-hoch/-runter-Symbolen und dem Feedback-Popup in der Dynamics 365 Finance-Umgebung bereitstellen.
Ausgaben-Agent deinstallieren
Führen Sie die folgenden Schritte aus, um den Spesenabrechnungs-Agent zu deinstallieren :
- Melden Sie sich beim Microsoft Power Apps Maker-Portal an.
- Wählen Sie Lösungen aus, suchen Sie nach msdyn_ExpenseAI, wählen Sie die drei Punkte und dann Löschen aus.
- Suchen Sie nach msdyn_FnOCopilotAnchor , und löschen Sie die Lösung.