KI-Schnellstart
Dieser Walkthrough führt Sie von einem leeren Ordner zu einem laufenden Portal, in dem Kunden sich anmelden und mit ihren eigenen Support-Fällen arbeiten – indem sie einen KI-Codierer fragen, anstatt es von Hand zu schreiben. Jeder Schritt gibt Ihnen einen Prompt zum Einfügen, was der Agent damit machen wird und was Sie überprüfen sollten, bevor Sie weitermachen. Das Beispiel verwendet die Case-Tabelle (incident), die mit Dynamics 365 Customer Service geliefert wird; mit einer eigenen Tabelle funktioniert jeder Prompt auf die gleiche Weise.
Bevor du anfängst
- Das .NET 10 SDK und Node.js , wenn du die React-Vorlage wählst.
- Eine Dataverse-Umgebung , in der Sie Systemadministrator sind. Verwenden Sie für diesen Walkthrough eine Entwicklungs- oder Sandbox-Umgebung.
- Berechtigung, App-Registrierungen im Entra-Tenant dieser Umgebung zu erstellen.
- Eine Adresse für die E-Mail des Portals – Registrierungsbestätigungen und Passwort-Zurücksetzungen – mit einem gemeinsamen Postfach in Exchange Online, das keine Lizenz benötigt. Die Genehmigung der Adresse erfordert einen Office 365 Global Administrator oder Exchange Administrator.
- Ein KI-Codingagent, der MCP unterstützt. Die untenstehenden Befehle beziehen sich auf Claude Code; die MCP-Serverseite enthält die Konfiguration für Visual Studio, VS Code und Cursor.
Wie das funktioniert
Zwei Dinge ermöglichen es einem Agenten, das richtig zu machen, anstatt nur plausibel zu sein: der Power Portals Pro MCP-Server, der deine tatsächliche Dataverse-Umgebung liest und die Konfigurationsänderungen vornimmt, die ein Portal benötigt, sowie die Anweisungen, die jedes generierte Projekt für Agenten ausliefert.
- Jede Änderung fragt zuerst Sie. Vor einer App-Registrierung wird der Anwendungsbenutzer oder eine Sicherheitsrolle erstellt, Rechte erteilt oder eine Lösung installiert, zeigt der Agent Ihnen, was gleich passieren wird – die Aktion, das Ziel, die Kosten, die Wirkung und wie man sie rückgängig macht – und Sie genehmigen oder lehnen Sie es dann in einer einzeiligen Eingabe ab. Lesen Sie die Details: Sie sind Ihr Überprüfungsschritt.
- Das Projekt trägt das Know-how. Ein generiertes Projekt umfasst ein
AGENTS.mdund drei Fähigkeiten —set-up-portal, undsecure-a-tableadd-table-pages— die dem Agenten sagen, welche Fragen er stellen soll und in welcher Reihenfolge. Sie müssen sie nicht benennen; die untenstehenden Prompts reichen aus, damit der Agent die richtige Wahl wählen kann. - Die Prompts sind ein Ausgangspunkt. Formulieren Sie sie in Ihren eigenen Worten, wenn Sie möchten. Wichtig ist, was sie sagen: für wen das Portal gedacht ist, welche Daten diese Personen sehen sollten und was sie damit machen können.
1. Installieren Sie den MCP-Server
Installieren Sie es einmal pro Maschine, im Benutzerbereich, sodass es in jedem Ordner verfügbar ist – einschließlich des leeren Ordners, in dem Sie das Projekt gerade erstellen möchten:
claude mcp add --scope user powerportalspro -- dnx PowerPortalsPro.Mcp --yes
dnxWird mit dem .NET 10 SDK ausgeliefert. Neustarte deinen Agenten, falls er bereits läuft, und überprüfe dann, ob der Server vorhanden ist, indem du etwas fragst, das nur er beantworten kann, wie zum Beispiel "Verwenden Sie get_component_api, um die MainGrid-Parameter aufzulisten".
2. Erstellen Sie einen Ordner und melden Sie sich an
Erstellen Sie den Ordner, in dem Ihr Portal sich befindet, und melden Sie sich darin an – einmal in Ihrer Dataverse-Umgebung und einmal in Azure, über die die App-Registrierungen in Schritt 4 erstellt werden:
mkdir C:\Code\Contoso.Portal
cd C:\Code\Contoso.Portal
dnx PowerPortalsPro.Mcp login --environment https://yourorg.crm.dynamics.com
dnx PowerPortalsPro.Mcp azure login
Beide Anmeldungen gehören zu diesem Ordner, nicht zum Rechner. Sie schreiben .ppp/mcp.json hier, benennen die Umgebung und den Tenant und behalten deine Token in deinem Benutzerprofil, sodass ein Projekt in einem anderen Ordner gleichzeitig auf einen anderen Kunden zeigen kann. Beide verwenden einen Gerätecode, sodass du sie auf deinem Handy abschließen kannst. Wenn dein Konto mehrere Azure-Abonnements sieht, musst du noch keine auswählen – das ist erst relevant, wenn du sie bereitgestellt hast. Dann starte deinen Agenten in diesem Ordner.
3. Das Projekt erstellen
Sagen Sie dem Agenten, was Sie bauen – welchen Stack, React oder Blazor, und wer sich anmelden wird:
Erstelle in diesem Ordner ein neues Power Portals Pro-Portal namens Contoso.Portal mit der React-Vorlage. Es ist für unsere Kunden, die sich mit ihren eigenen Konten registrieren und anmelden.
Der Agent installiert die Projektvorlagen, falls sie fehlen, fragt nach allem, was er aus deiner Anfrage nicht erkennen kann, und führt dotnet new. Jeder Kunde wird zu einem Kontakt in Dataverse, und was er sehen kann, wird durch die Sicherheitsregistrierungen im Projekt. Das ist das Standard-Sicherheitsmodell der Vorlage Program.csund das, das der Rest dieses Walkthroughs verwendet. Beide Stacks funktionieren; jeder spätere Prompt ist gleich.
Anmerkung
Neustarte deinen Agenten im selben Ordner, sobald das Projekt existiert. Das Projekt bringt sein eigenes
.mcp.json, das den MCP-Server mit der Version verbindet, die zu seinen Paketen passt, zusammen mit seinen Fähigkeiten undAGENTS.md— und die meisten Agenten lesen diese nur, wenn sie starten. Genehmigen Sie den MCP-Server des Projekts, wenn Ihr Agent darum bittet.
4. Verbinden Sie es mit Dataverse
Ein neues Projekt startet erst, wenn es Dataverse erreicht hat. Bitte den Agenten, das einzurichten:
Richte dieses Portal gegen meine Dataverse-Umgebung ein, damit es lokal läuft. Gib dem Anwendungsbenutzer keinen Systemadministrator: Nutze die Power Portals Pro-Rolle plus eine eigene Rolle für unsere Tabellen. Schick die E-Mail des Portals von noreply@contoso.com.
Der Agent folgt den set-up-portal Fähigkeiten des Projekts und beginnt damit check_setup , zu sehen, was fehlt. Erwarten Sie, jede dieser Dinge zu genehmigen:
- Die verwaltete Lösung – die Power Portals Pro-Tabellen, die Lizenzprüfung und die Power Portals Pro-Anwendungsbenutzer-Sicherheitsrolle .
- Eine Entra-App-Registrierung , mit der das Portal mit Dataverse verbunden ist. Sein Client-Geheimnis geht direkt in die Benutzergeheimnisse des Projekts ein, nie in die Diskussion.
- Der Dataverse-Anwendungsbenutzer für diese Registrierung, mit der Power Portals Pro Application User Rolle und dem Spalten-Sicherheitsprofil, das das Framework benötigt, plus einer freien Sicherheitsrolle für dich. Die Power Portals Pro-Rolle deckt nur die eigenen Tabellen des Frameworks ab; deine Tabellen gehören in deine Rolle in Schritt 6.
- Eine zweite App-Registrierung für "Anmelden mit Microsoft" – nur, wenn du diesen Button möchtest. Kunden mit eigenen Konten brauchen ihn nicht.
- Eine E-Mail-Warteschlange , von der aus Registrierungs- und Passwort-Zurücksetzungs-Mails gesendet werden. Der Agent genehmigt seine Adresse und führt Test & Enable auf seinem Postfach aus. Zwei Dinge können Ihnen überlassen werden: Die Adresse benötigt ein Postfach in Exchange Online – ein gemeinsames Postfach, das keine Lizenz benötigt – und die Genehmigung benötigt einen Office 365 Global Administrator oder Exchange Administrator. Wenn einer von beiden fehlt, sagt der Agent, welches; beheben Sie es und bitten Sie den Agenten, den Schritt erneut auszuführen.
Die Verbindungseinstellungen landen in den Benutzergeheimnissen des Projekts, sobald jeder Schritt abgeschlossen ist. Der Agent beendet den Ablauf, indem er erneut ausgeführt check_setup wird; sobald das sauber ist, startet man das Projekt – F5 oder dotnet run im Serverprojekt – und man sieht die Startseite und die Beispielseiten der Vorlage.
5. Entscheiden, was Kunden sehen sollen
Beschreiben Sie das gewünschte Ergebnis in geschäftlichen Begriffen und lassen Sie den Agenten die Tabelle finden. Es lohnt sich, vor dem Schreiben zu fragen: Der Agent liest Ihre Umgebung und schlägt vor, was tatsächlich vorhanden ist, inklusive Ihrer eigenen Tabellen und Spalten.
Kunden, die sich anmelden, sollten die Support-Fälle sehen, die sie angesprochen haben, einen öffnen, um die Details zu sehen, und einen neuen Fall eintragen. Welche Tabelle und welche Spalten sollten wir verwenden? Ändern Sie noch nichts.
Erwarte, dass er die Tabelle mit list_tables und describe_table, seine Ansichten mit list_viewsliest, und mit der Case-Tabelle (incident), der Suche, die einen Fall mit dem Kunden verknüpft (customerid), sowie den Spalten, die angezeigt und bearbeitet werden sollen, zurückkommt. Passen Sie diese Liste jetzt an: Sie entscheidet, was das Portal veröffentlicht.
6. Sichern Sie den Tisch
Ein Portal zeigt nichts, was ihm nicht aufgetragen wurde zu zeigen: Bis eine Tabelle registriert ist, geben seine Seiten 403 oder ein leeres Raster zurück. Bitte den Agenten, die Tabelle zu öffnen – nur so weit, wie du es beabsichtigst:
Sichern Sie die Falltabelle: Angemeldete Kunden können nur ihre eigenen Fälle lesen, erstellen und bearbeiten, mit den von uns vereinbarten Spalten. Sie wählen die Priorität, wenn sie einen Fall protokollieren, können sie aber danach nicht mehr ändern. Geben wir unserer eigenen Sicherheitsrolle die Privilegien, die der Anwendungsnutzer für Fälle benötigt.
Der Agent arbeitet sich durch die secure-a-table Fähigkeit des Projekts, bestätigt, für wen der Zugriff gilt, für welche Zeilen, welche Operationen und welche Spalten. Überspringe keine davon: Jede Antwort ändert, was veröffentlicht wird.
Dann schreibt es die Registrierung im Serverprojekt. Program.csFür dieses Beispiel erwarte man etwas wie:
builder.Services.AddTableAccess("incident", t => t
.ForSignedInUsers()
.RowsOwnedByContact("customerid")
.Allow(TableSecurityPermission.Read | TableSecurityPermission.Create | TableSecurityPermission.Write)
.Reading("title", "ticketnumber", "prioritycode", "statuscode", "createdon", "description")
.Writing("title", "description")
.WritingOnCreate("prioritycode"));
RowsOwnedByContact("customerid") beschränkt jede Abfrage auf die eigenen Fälle des angemeldeten Kontakts und macht ihn zum Kunden in einem von ihm erstellten Fall. Spalten sind opt-in: Alles, was nicht namentlich ist Reading , wird zurückgehalten, und nur die Spalten in Writing können geändert werden. WritingOnCreate Deckt die Priorität ab – wird beim Protokollieren des Falls festgelegt, ab da nur lesbar. Sicherheit deckt jede Option ab.
Die eigene Rolle des Anwendungsbenutzers
Die Registrierung entscheidet, was jeder Kunde tun darf, aber das Portal kommuniziert weiterhin mit Dataverse als Anwendungsbenutzer, und dieser Nutzer benötigt Rechte direkt in der Tabelle. Sie übernehmen ab Schritt 4 die eigene Sicherheitsrolle, nie die Power Portals Pro-Rolle. Der Agent:
- Findet deine Rolle auf dem Anwendungsbenutzer mit
get_application_user– und falls Schritt 4 keine erstellt hat, erstellst du sie mitcreate_security_roleund weist sie mitassign_application_user_rolezu. - Gewährt ihr das, was die Registrierung benötigt mit
add_table_privileges_to_role: Lesen, Erstellen, Schreiben und Anhängen aufincident, und Anhängen An aufcontact, weil jeder neue Fall mit einem Kontakt verknüpft ist. Dann läuftcheck_setupes , das die Tabellen, die deine Seiten verwenden, mit den Tabellen vergleicht, die dein Code registriert.
Warum eine eigene Rolle?
Die Power Portals Pro-Rolle wird in einer verwalteten Lösung ausgeliefert. Dataverse würde es ermöglichen, Privilegien hinzuzufügen, aber das nächste Upgrade dieser Lösung kann sie wieder so versetzen, wie sie ausgeliefert wurde, und deine Zuschüsse mitnehmen – daher weigert sich der MCP-Server, Privilegien zu einer verwalteten Rolle hinzuzufügen. Eine eigene Rolle zeigt jedem, der später die Umgebung überprüft, genau, was das Portal erreichen kann.
7. Fügen Sie die Seiten hinzu
Nachdem der Tisch gesichert ist, fordern Sie beide Seiten auf einmal an – die Liste im Menü und die Seite, auf der ein Fall geöffnet wird:
Füge im Hauptmenü eine Case-Seite mit einem Raster der angemeldeten Fälle hinzu und der Seite, auf der ein Fall geöffnet wird: Titel, Fallnummer, Priorität und Status in einem Bereich, die Beschreibung in einem anderen. Kunden können Titel und Beschreibung ändern, die Priorität nur beim Protokollieren eines neuen Falls festlegen und sonst nichts.
Der Agent folgt der add-table-pages Kompetenz des Projekts. Er fügt die Routen, eine Listenseite mit , MainGridden Menüeintrag und eine RecordContext Seite, die ebenfalls leer zum Loggen eines neuen Falls geöffnet wird, hinzugefügt. Er liest reale Ansichts-IDs mit list_views statt Platzhalter zu schreiben und behält jede Spalte innerhalb dessen, was die Registrierung den Kunden erlaubt – die Bestands-Dynamics-Ansichten enthalten nur agentenbasierte Spalten, also erwarten Sie, dass sie eigene Ansichten anbietet. Wenn Sie nach einer Spalte fragen, die die Registrierung weglässt, sollte sie aufhören und fragen, anstatt den Zugang stillschweigend zu erweitern. Verwandte Datensätze können als Unterraster auf die Fallseite gehen; benennen Sie sie, und auch diese Tabelle wird gesichert.
8. Versuchen Sie es als zwei Kunden
Der Agent kann sich nicht als Kunde anmelden, daher gehört dieser Teil Ihnen. Es ist auch der Test, der am wichtigsten ist: Der Sinn der Registrierung ist, was ein Kunde nicht sehen kann .
- Starten Sie das Portal und registrieren Sie einen Kunden. Die Bestätigungs-E-Mail erscheint, sobald das Postfach der E-Mail-Warteschlange Test & Enable in Schritt 4 bestanden hat.
- Öffne Fälle, logge einen neuen Fall und öffne ihn dann erneut aus dem Raster. Ändere den Titel und speichere.
- Melden Sie sich ab, registrieren Sie einen zweiten Kunden und öffnen Sie Cases. Das Raster sollte leer sein: Der Fall des ersten Kunden gehört nur ihm. Das Einfügen der Adresse dieses Falls in diese Sitzung sollte sie ebenfalls nicht anzeigen.
Wenn einer der Kunden etwas sieht, das er nicht sehen sollte, passen Sie es nicht von Hand an. Sagen Sie dem Agenten, was Sie gesehen und erwartet haben, und lassen Sie es erneut ablaufen secure-a-table .
Wenn etwas nicht richtig aussieht
- Das Raster ist leer, oder die Seite gibt 403 zurück. Bitte den Agenten, eine Tabelle zu erstellen
check_setup, die deine Seiten verwenden, ohne Registrierung, ist dort aufgeführt. Andernfalls hat der Kunde vielleicht noch keine Fälle. - Eine Spalte ist immer leer. Sie steht nicht in der
ReadingListe der Registrierung. Spalten werden absichtlich zurückgehalten, es sei denn, sie werden namentlich genannt. - Jede Datenanfrage gibt 402 zurück. Die Lizenzprüfung ist gescheitert – meistens, weil die verwaltete Lösung noch nicht installiert ist.
check_setupsagt welche. - Das Portal startet nicht oder zeigt an: "Einige Inhalte sind nicht verfügbar". Es kann sich nicht in Dataverse anmelden. Der Startpunkt
Could not connect to Dataverseder Logline nennt die zu behebende Einstellung undcheck_setupmeldet sie ebenfalls.
Wohin als Nächstes gehen
- Fügen Sie auf die gleiche Weise weitere Tabellen hinzu : Schritt 5 zur Auswahl, Schritt 6 zum Sichern, Schritt 7 für die Seiten.
- Geben Sie einigen Kunden mehr Zugang als anderen mit Portalrollen – fragen Sie den Agenten nach einer Rolle wie Case Manager , die jeden Fall des Unternehmens des Kunden sieht. Die Sicherheit erklärt, wie Rollen zu den portalweiten Registrierungen beitragen.
- Deploye es. "Deploy this portal to Azure" startet die Azure-Deployment, mit eigener Anmeldung und einem Preis für jede Ressource, bevor sie erstellt wird.
- Bevorzugen Sie die Webrollen und Tabellenberechtigungen von Power Pages? Erstellen Sie das Projekt mit
--EnableEnhancedAuthorization true. Der Zugriff erfolgt dann von Dataverse-Sicherheitsrollen stattProgram.cs— siehe Dataverse Security.
