MCP-Server

Der Power Portals Pro MCP-Server gibt KI-Programmierassistenten beim Bau direktes Wissen über dieses Framework. Es handelt sich um einen Model Context Protocol-Server , der mit dem Framework ausgeliefert wird, und es gibt keinen Lizenzschlüssel und nichts, wofür man sich anmelden müsste.

Warum es existiert

Zwei Dinge, die ein Agent allein aus der Dokumentation nicht bekommen kann, und beide verursachen fehlerhaften Code:

Was es beantwortet

Anmerkung

Jedes Dataverse-Tool liest Metadaten. Keines von ihnen liest, schreibt oder löscht einen Datensatz, daher ermöglicht es einem Agenten, einen Agenten auf eine Produktionsumgebung zu zeigen, die Form Ihrer Daten zu erkennen, ohne sie berühren zu können.

Hinzufügen zu einem Projekt

Zwei Orte, an denen es leben kann

Hier gibt es ein Henne-Ei-Problem, das es wert ist, explizit zu sein. Die Vorlagen schreiben die Konfiguration in das von ihnen erstellte Projekt ein – aber der Server ist am nützlichsten, bevor dieses Projekt existiert, wenn man eine Vorlage und ihre Optionen auswählt. Installiere sie also einmal für dich selbst und lass die jeweilige Projektdatei übernehmen.

Einmal pro Maschine, für jeden Ordner

Dadurch ist der Server überall verfügbar, auch in einem leeren Ordner, in den du gleich einbauen willst. Er kann dann antworten, welche Vorlage verwendet werden soll, welche Optionen es bedeuten und was danach konfiguriert werden soll. Absichtlich entpinnt, damit er die neueste Version verfolgt:

Visual Studio liest eine Benutzerebene .mcp.json aus deinem Profilordner, Cursor verwendet ~/.cursor/mcp.json, und VS Code hat in seinen Einstellungen eine benutzerdefinierte MCP-Konfiguration. Jeder nimmt denselben servers Block.

Pro Projekt, an seine Version angepinnt

Projekte, die aus den Power Portals Pro-Vorlagen erstellt wurden, sind bereits verkabelt: Die Vorlage schreibt eine .mcp.json an der Lösungswurzel, die an die passende Serverversion gepinnt ist. Es gibt nichts zu tun.

Um es zu einem bestehenden Projekt hinzuzufügen, führe das im Projektordner aus – es schreibt dasselbe .mcp.json für dich:

Beachte, was das nicht bewirkt: Der Server bleibt ungebunden, sodass der Ordner den neuesten veröffentlichten Server bekommt, anstatt den, der mit den Paketen übereinstimmt, auf PowerPortalsPro.* die dein Projekt verweist. Das ist der richtige Standard für ein Projekt, das die aktuelle Version verfolgt, und der falsche für ein Projekt, das absichtlich auf einer älteren Version gespeichert wird – pinne ihn, indem du die Version anhängst, so wie es die Vorlagen tun:

Oder schreibe die Datei selbst, am Kern deiner Lösung:

Welche Datei dein Redakteur liest

Visual Studio 2022 17.14+ und Visual Studio 2026 lesen .mcp.json aus dem Solution-Ordner, ebenso wie Claude Code. VS Code liest .vscode/mcp.json und Cursor liest .cursor/mcp.json – beide verwenden denselben servers Block, also kopieren Sie ihn quer.

dnx Wird mit dem .NET 10 SDK ausgeliefert, das Sie bereits besitzen: Jedes Power Portals Pro-Projekt wird von ASP.NET Core gehostet, inklusive React SPAs. Der erste Durchlauf lädt das Paket herunter und cacht.

Beide Einträge sind die vorgesehene Einrichtung. Die beiden Einträge verwenden denselben Servernamen, sodass ein Client, der beide Scopes versteht, die des Projekts verwendet – das heißt, du bekommst die versionsabgestimmten Antworten innerhalb eines Projekts und die neuesten überall sonst.

Der ppp-mcp-Befehl, falls du ihn möchtest

Die Terminalbefehle auf dieser Seite — login, status, und logout der Rest — laufen ohne Installation durch: dnx dnx PowerPortalsPro.Mcp login. Wenn Sie lieber tippen ppp-mcp loginmöchten, installieren Sie das Paket als globales .NET-Tool:

Das setzt auf dein PATH: Das .NET SDK fügt normalerweise seinen globalen Tools-Ordner – %USERPROFILE%\.dotnet\tools unter Windows, ~/.dotnet/tools macOS und Linux – hinzu. Wenn der Befehl nicht gefunden wird, öffne ein neues Terminal; falls nicht, füge diesen Ordner dir selbst hinzuPATH.ppp-mcp

Ein globales Tool bleibt auf der von dir installierten Version erhalten, wo dnx die neueste Version abgerufen wird, also aktualisiere es wie unten beschrieben. Dein MCP-Client kann den Server dnx in beide Richtungen starten: Beide lesen dieselben Ordnerbelegungen und dieselben gespeicherten Anmeldungen.

Ich prüfe, ob es funktioniert

Frag deinen Assistenten etwas, das nur der Server beantworten kann – zum Beispiel: "Benutze get_component_api, um mir alle Parameter auf MainGrid zu zeigen". Wenn das Tool nicht verfügbar ist, hat der Client die Konfigurationsdatei nicht übernommen; die meisten benötigen einen Neustart, nachdem sie hinzugefügt wurde.

Aktualisierung

Wie du aktualisierst, hängt davon ab, wie du es installiert hast.

Installiert als globales Tool (dotnet tool install --global PowerPortalsPro.Mcp, was ppp-mcp auf deinem PATH):

Wichtig

Schließen Sie zuerst Ihren MCP-Client. Ein laufender Server hält seine eigenen Dateien offen, und das Update scheitert mit Zugriff auf den Pfad ... wird verweigert , bis sie nicht mehr verwendet werden. Starten Sie den Client danach erneut, um die neue Version zu laden.

Verbindung zu Dataverse

Die Dokumentationstools benötigen überhaupt keine Konfiguration. Die Metadaten-Tools benötigen eine Verbindung zu deiner Umgebung, und diese Verbindung gehört zum Ordner, nicht zur Maschine. Führe dies einmal im Projekt aus:

Umgebungen gehören zum Ordner

Das bindet diesen Ordner an eine Umgebung. Wenn Sie über mehrere Kunden hinweg arbeiten, bleibt jedes Projekt in seinen eigenen Umgebungen angemeldet und Agenten in verschiedenen Ordnern überschneiden sich nie. Das ist das Einzige pac auth select , was man nicht kann – es wechselt ein einziges maschinenweites Profil, sodass ein Kundenwechsel an einem Ort das überall verändert.

Die Anmeldung verwendet standardmäßig den Gerätecode-Flow, also funktioniert es über SSH, innerhalb eines Containers und in WSL, und du kannst es auf einem Handy beenden. Lehn ab, --browser wenn du lieber einen öffnen möchtest.

Mehrere Umgebungen in einem Ordner

Ein Ordner kann gleichzeitig in mehrere Umgebungen angemeldet werden – zum Beispiel in den Entwicklungs-, Test- und Produktionsumgebungen eines Kunden. Jede login mit einer weiteren Umgebung fügt ihn der Liste des Ordners hinzu und --name gibt ihm den Namen, mit dem du ihn ansprechen wirst:

Die erste Umgebung ist die primäre, und jedes Werkzeug wirkt darauf, es sei denn, du fragst nach einem anderen: "Liste die Ansichten zum Kontakt im Test auf" wird von testbeantwortet, und die nächste Frage geht zurück zur primären. Übergebe zulogin, --make-primary um stattdessen eine Umgebung als primäre Umgebung hinzuzufügen, oder bitte deinen Assistenten, sie neu zu ordnen.

Jede Antwort, die Dataverse berührt, beginnt damit, die Umgebung zu benennen, aus der sie stammt – Name, Position und URL – sodass eine in der Produktion vorgenommene Änderung nie genauso liest wie eine in der Entwicklung vorgenommene.

Wo Dinge gelagert werden

Der Token-Cache wird nach Umgebung verschlüsselt, sodass ein zweiter Klon desselben Kunden-Repositorys Sie nicht erneut auffordert, sich erneut anzumelden, während ein anderer Kunde das immer tut – und das gilt auch für jede Umgebung, die Sie einem Ordner hinzufügen.

Kommandos

Führe sie aus als dnx PowerPortalsPro.Mcp <command>, oder als ppp-mcp <command> ob du das globale Tool installiert hast. Alle diese funktionieren im aktuellen Ordner, es sei denn, du gibst --workspace.

Weitere Verbindungsmöglichkeiten

Die Umgebung und die Zugangsdaten werden in dieser Reihenfolge aufgelöst, sodass die expliziteste Absichtserklärung gewinnt:

  1. Umgebungsvariablen — PPP_D365_URL, PPP_D365_CLIENT_ID und PPP_D365_CLIENT_SECRET im Serverblock env . Ein Service Principal, und der Weg, dies in CI oder einem gemeinsamen Container zu verdrahten. PPP_D365_URL wird zur primären Umgebung, bevor der Ordner gebunden ist, und der Service Principal wird nur für die primäre verwendet.
  2. Die Anmeldung des Ordners – geschrieben von login. Der normale Pfad.
  3. Die eigenen Einstellungen des Projekts – dieselben D365:Url, D365:ClientId und D365:ClientSecret (oder D365:Secret) das Portal selbst liest aus Benutzergeheimnissen und appsettings. Ein konfiguriertes Power Portals Pro-Projekt benötigt daher oft gar keine Anmeldung.

Power Platform CLI-Profile

Wenn du bereits Umgebungen in pacbehältst, kannst du von einer beginnen, anstatt nach einer URL zu suchen:

Die CLI hat keinen Befehl, der ein Zugriffstoken ausgibt, und speichert Zugangsdaten in ihrem eigenen Store, sodass ihre Sitzung nicht direkt wiederverwendet werden kann. Was --pac-profile das tut, ist, die Umgebung und das Konto aus einem Profil zu nehmen und sich als dieses Konto anzumelden – meist ohne Aufforderung, weil du bereits eine Sitzung hast.

Anmerkung

Das eigene aktive Profil der CLI wird nie geändert. pac auth select wird absichtlich nicht verwendet: Es würde jedes Projekt gleichzeitig verschieben.

Die Werkzeuge

Man muss selten ein Werkzeug benennen – die Assistenten wählen es aus den Beschreibungen – aber es hilft zu wissen, was dort ist.

Dokumentation, immer verfügbar

Deine Umgebung, einmal verbunden

Wahl zwischen Umgebungen

Jedes Werkzeug, das Dataverse erreicht, nimmt einen optionalen environment Namen – einen Namen wie test, eine Position wie 2, oder die URL – und verwendet den primären ohne URL. Ein Name, der zu nichts passt, wird mit der Liste der vorhandenen Umgebungen abgelehnt und nie mit der nächstgelegenen abgeglichen.

Das Hinzufügen einer Umgebung erfordert eine Anmeldung, also login nur das. Den Rest kann dein Assistent erledigen, wenn du darum bittest. Das Verschieben einer Umgebung auf Position 1 ändert standardmäßig jede spätere Schreibfunktion, fragt set_environment_index dich zuerst, wann die Hauptumgebung geändert wird, und remove_environment fragt immer.

Die Platten selbst

Metadaten sagen, was die Form ist; diese sagen, was tatsächlich darin ist – welcher Optionsset-Wert eine Zeile wirklich trägt, ob eine Abfrage angezeigt wird, ob die Zeile, die dein Code gerade geschrieben hat, richtig war. Ein Agent, der nicht schauen kann, wird stattdessen raten.

Das Lesen liest sich wie Sie – der Service-Principal oder der angemeldete Benutzer, niemals als Portal-Nutzer. Keine der Tabellen-, Spalten- oder Zeilen-Berechtigungen des Portals gilt, sodass dies zeigt, was sich in der Umgebung befindet und nicht, was ein bestimmter Portal-Nutzer angezeigt hätte. Das FetchXML einer gespeicherten Ansicht läuft wortwörtlich.

Ein neues Projekt zum Laufen bringen

get_upgrade_plan ist derjenige, der aufgerufen werden muss, bevor eine Versionszeichenkette geändert wird. Es liest die Version, auf die dieses Projekt verweist, berechnet heraus, welche Freigaben zwischen dieser und dem Ziel liegen, und gibt jede fehlerhafte Änderung darin mit seinen Migrationsanweisungen zurück – zusammen mit den Dateien, die eine Version benennen, einschließlich des Server-Pins .mcp.json , den sonst nichts fangen würde. Das Bumpen der Pakete ohne diese führt zu Build-Fehlern, deren Ursache mehrere Releases zurückliegt.

Die verwaltete Lösung

Das Framework muss installiert werden PowerPortalsProCore , bevor ein Portal läuft, und PowerPortalsProLocalization wenn du lokalisierst. Diese rufen eine Veröffentlichung ab und importieren sie ohne Power Platform CLI, sodass die Umgebung, die sie erreichen, diejenige ist, an die dieser Ordner gebunden ist, und nicht die, auf die pac gerade verwiesen wird.

Ein Import ist langwierig, startet install_solution ihn daher und gibt eine Job-ID zurück; get_solution_import_status berichtet Fortschritt und Ergebnis mit der eigenen Nachricht von Dataverse, wenn er fehlschlägt.

Anmerkung

publish_customizations ist dieselbe Aktion wie Alle Anpassungen im Maker-Portal veröffentlichen , sodass alles , was in der Umgebung aussteht, nicht nur Ihre eigenen Änderungen veröffentlicht werden – sondern in einer gemeinsamen Entwicklungsumgebung, die die halbfertige Arbeit eines Kollegen live machen kann. Sie ist nicht mehr erforderlich install_solution: Das Importieren einer verwalteten Lösung veröffentlicht, was sie bringt.

Deine eigene Lösung

Änderungen, die der Server an einer Umgebung vornimmt – eine erstellte Sicherheitsrolle, ein gewährtes oder zurückgenommenes Privileg – gehen in eine eigene Lösung ein, die für diese Umgebung in aufgezeichnet wird.ppp/mcp.jsoncreate_solution. Richtet den Publisher und die Lösung einmal in der von dir erstellten Umgebung ein; bis eine aufgezeichnet ist, weigern sich die Tools, die Dataverse anpassen, weil eine außerhalb einer Lösung vorgenommene Änderung in der Standardlösung feststeckt, wo sie nichts exportieren kann.

Die Bindung zeichnet außerdem auf, ob die Lösung unmanaged reist (standardmäßig für Umgebungen, in denen auch gearbeitet wird ) oder verwaltet (für Umgebungen, die sie nur erhalten). export_solution Sie hebt den letzten Teil der Version hoch, speichert die ZIP im Arbeitsbereich, exportiert push_solution sie und importiert sie in eine andere Umgebung, die an denselben Ordner gebunden ist – Build in Dev, Push to Test und Production. Eine Lösung, die von Power Portals Pro abhängt, kann nicht importieren, bis das Ziel diese ebenfalls hat.

Portalrollen

Eine Portal-Rolle besteht zur Hälfte aus Code, zur Hälfte aus Daten. Der Entwickler entscheidet, was der Name "Dealer" verleiht; ein Administrator entscheidet, wer sie hält; nichts verbindet die beiden außer dem String. Diese halten das Dataverse zur Hälfte vom selben Ort aufrecht, an dem der AddPortalRole Aufruf geschrieben ist.

Die Zeichenkette ist der gesamte Join. Ein Tippfehler zwischen der Registrierung und dem Datensatz erzeugt eine Rolle, die registriert, zuweisend ist und nichts gewährt – ohne Fehler. Wenn der Agent, der gerade die Registrierung geschrieben hat, den passenden Datensatz erstellen lässt, schließt das diese Lücke und check_setup erkennt die bereits vorhandenen Fehlanpassungen: Es vergleicht jeden im Projekt geschriebenen Rollennamen mit den Datensätzen und meldet alle fehlenden oder inaktiven Personen.

Eine Portal-Rollenkonfigurationszeile entscheidet, welche neu registrierten Benutzer eine Rolle erhalten: jeden einzelnen oder solche, die den FetchXML-Kriterien entsprechen. Kriterien werden vor der Erstellung der Zeile mit den Regeln des Portals überprüft, weil das Portal bei schlechten Kriterien nicht geschlossen wird und eine defekte Regel genau wie eine Regel aussieht, die korrekt zu niemandem passt. Administratoren bearbeiten dieselben Zeilen auf der Rollenkonfigurationsseite des Portals.

Anmerkung

Das Löschen einer Rolle wirft jede Zuweisung weg und nichts erinnert sich, wer sie hatte. Deaktivierung gewährt nichts und macht auch keinen Anspruch, behält aber die Zuweisungen, sodass es der rückgängige Weg ist, eine Rolle auszuschalten. Beide Löschwerkzeuge bitten dich zuerst um eine Bestätigung.

Lizenzierte Webseiten

Ein Power Portals Pro Website-Eintrag lizenziert ein Portal, das von einer bestimmten URL aus bereitgestellt wird. Diese listen sie auf, fügen sie hinzu und pflegen sie – typischerweise einmal pro Umgebung und erneut, wenn ein Portal zu seinem Produktionshost wechselt.

Das ist das Erste, was überprüft werden sollte, wenn jeder Endpunkt 402 zurückgibt. Ohne einen passenden aktiven Datensatz lehnt jeder Datenendpunkt auf diesem Host die Anfrage ab. Das Löschen eines Datensatzes nimmt die Lizenz ab der nächsten Anfrage mit, daher deaktiviere lieber während der Untersuchung; die Löschung bittet dich zur Bestätigung.

Azure-deployment

Die meisten dieser Tools lesen nur. Diese brauchen im Abonnement nichts anderes als Reader und beantworten die Fragen, die die Leute Tage kosten. check_deployment Ist das, was man kennen sollte: Es vergleicht, was das Projekt braucht, mit dem, was der App Service tatsächlich hat, und nennt den Fehler – eine erforderliche Einstellung, die nur in Ihren Benutzergeheimnissen existierte, in der Umgebung, die auf Development verbleibt, WebSockets auf einem Blazor-Portal, einen Portal-Website-Eintrag, der den bereitgestellten Host nicht abdeckt, ein Portal, das keinen Zugang zu Dataverse hat.

Sieben Tools ändern den App Service: create_app_service, , , deploy_to_app_serviceset_app_service_settings, , restart_app_service, und create_deployment_slot swap_slots. Jedes von ihnen bittet dich zu bestätigen und teilt dir mit, was es kosten wird, bevor du antwortest – die tatsächliche monatliche Zahl für deine Region, abgelesen aus der öffentlichen Preisliste von Azure, mit dem Hinweis, dass die Einzelhandelsliste jegliche Enterprise Agreement oder Reservierungen ignoriert, die du hältst. Neue Ressourcen setzen standardmäßig auf die günstigste Stufe, die für jede Umgebung einschließlich der Produktion warm bleibt, in der Annahme, dass spätere Skalierung eine Minute dauert und Überprovisionierung ein Gesetz ist, das niemand wieder aufnimmtconfigure_app_service.

Bei einem Standard- oder Premium-Tarif kann ein Portal Deployment-Slots haben, von denen jeder gegen seine eigene Dataverse-Umgebung läuft – einen uat Slot gegen UAT, während die Produktion gegen die Produktion läuft. create_deployment_slot Erstellt einen und verknüpft ihn mit der Umgebung, sodass beim Arbeiten in UAT und eine Deploy-Anfrage der Build an den UAT-Slot statt in die Produktion geht. Die Einstellungen, die eine Umgebung benennen, sind so markiert, dass sie bei ihrem Slot bleiben, sodass swap_slots der getestete Build in die Produktion gebracht werden kann und er startet mit den Produktionsdaten. Ein Swap wird abgelehnt, wenn das eine Umgebung in eine andere übertragen würde.

Anmerkung

Diese verwenden nicht die Azure-CLI und lesen oder ändern niemals den angemeldeten Zustand. Laufen ppp-mcp azure login Sie im Ordner: Wie bei der Dataverse-Bindung gehört das Abonnement ausschließlich zu diesem Ordner, sodass mehrere Projekte gleichzeitig verschiedene Kunden ansprechen können. az account show Sagt Ihnen nichts darüber, was diese Tools bewirken.

Entra-App-Registrierungen

Die beiden Registrierungen, die ein Portal benötigt, und die darauf folgenden Jobs. Das sind die Schritte, die die meisten Setups blockieren: Es sind zwei separate Registrierungen statt einer, die Anmelde-App benötigt eine Antwort-URL mit einem Port, der die Vorlage zufällig generiert hat, und ein Client-Geheimnis verliert ein Jahr später und stoppt das Portal mit einem Fehler, der Entra nie erwähnt.

Die Werkzeuge haben keine eigenen Rechte. Jeder Aufruf läuft über ein delegiertes Token für das Konto, mit dem du dich angemeldet hast, das an einen öffentlichen Client ausgegeben wird, der kein Geheimnis enthält – jede Operation ist also genau dann erfolgreich, wenn du sie manuell im Portal hättest ausführen können, und wird mit einem 403-Formular abgelehnt, das die Verzeichnisrolle nennt, die du brauchst, obwohl du es nicht könntest. Melde dich als Account Inhaber von Application Developer oder höher an, und diese funktionieren; melde dich als jeder andere an, und sie können keinen Schaden anrichten. Es werden keine API-Berechtigungen angefordert und keine Admin-Zustimmung erteilt, da keine der Registrierungen eine benötigt.

Beide Hälften, weil keine allein funktioniert. Eine App-Registrierung erhält ein Token; ein Nutzer der Dataverse-Anwendung entscheidet, was dieses Token bewirken darf. Eine Registrierung ohne solche authentifiziert sich perfekt und wird dann von jedem Aufruf abgelehnt, was als unterbrochene Verbindung und nicht als fehlendes Objekt gelesen wird – und ein Anwendungsbenutzer ohne Sicherheitsrolle wird erstellt, sichtbar, scheinbar in Ordnung und darf nichts tun. create_dataverse_application_user Macht die zweite Hälfte und weist die Rolle im selben Schritt zu. Dies ist der einzige Ort, an dem der Server außerhalb seiner eigenen drei Tabellen schreibt, zugegeben, weil ein Anwendungsbenutzer Infrastruktur und nicht Kundendaten ist; kein Tool erstellt, ändert oder löscht einen Geschäftseintrag.

Sie arbeiten an bereits existierenden Registrierungen. Jedes create_*_registration Tool akzeptiert ein clientId, und mit einem übernimmt es diese Registrierung, anstatt eine zu erstellen – fügt ein Geheimnis hinzu, fügt neue Antwort-URLs zusammen, schreibt die Zugangsdaten an der gewünschten Stelle. Die Bestätigung sagt dann, man soll der bestehenden Registrierung ein Geheimnis hinzufügen , anstatt es zu erstellen, sodass man nie eine Operation genehmigt und eine andere bekommt. Die Tools, die eine bestehende Registrierung ändern, add_app_registration_redirect_uri und add_app_registration_secret, nehmen ebenfalls eine Client-ID und bevorzugen sie: Anzeigenamen sind nicht eindeutig, und ein Tenant mit drei Registrierungen namens "Portal" ist normal.

Ein erstelltes Client-Geheimnis wird standardmäßig nicht zurückgegeben. Es geht direkt von der Graph-Antwort in die Benutzergeheimnisse des Projekts, eine App-Service-Anwendungseinstellung oder beides, und das Tool berichtet, wohin es gegangen ist und wann es abläuft, anstatt das, was es war. Wenn ein Geheimnis an einen Ort gelangen muss, den der Server nicht schreiben kann – die Maschine eines Kollegen, ein CI-Geheimspeicher, ein Tresor in einem anderen Abonnement – fragen Sie nach destination: "return" und der Wert wird Ihnen zum Kopieren angezeigt. Die Bestätigung sagt das, bevor Sie zustimmen, und das Ergebnis enthält die Warnung, die sie verdient: Das Geheimnis befindet sich dann im Transkript, also behandeln Sie es als offen, wenn dieses Transkript gespeichert ist, und rotieren Sie es bei Zweifeln. Geheimnisse werden standardmäßig für 24 Monate geprägt – das längste, das Entra-Portal bietet – weil der Ausfall dieses Frameworks tatsächlich ein verfallenes Geheimnis und kein gestohlenes ist: Das Portal beginnt an einem Datum, das niemand erwähnt hat, mit einem Fehler, der Entra nie erwähnt. Diese Obergrenze gehört der Benutzeroberfläche des Portals, nicht der API, sodass expiryMonths alles bis zu 120 (10 Jahre) akzeptiert wird, obwohl man lieber alle fünf Jahre rotieren würde, als ein Ausfall zu riskieren. Es ist nicht der Standard, denn ein Zugangsdaten, den kein Administrator von Hand erstellt haben könnte, ist überraschend – also sagt die Bestätigung, wie viele Jahre man angefordert hat und dass das Portal es nicht liefern konnte.

Eine App kann sich mit einem Zertifikat statt mit einem Geheimnis anmelden.add_app_registration_certificate erstellt ein Zertifikat in Key Vault, dessen privater Schlüssel niemals exportiert werden kann, und fügt seine öffentliche Hälfte zur Registrierung hinzu. Binde eine Umgebung an diese App mit ppp-mcp login --environment <url> --client-id <id> --certificate <url> und der Vault signiert jede Anmeldung für denjenigen, der Key Vault Crypto User darauf hält, sodass kein Geheimnis auf einer Maschine liegt. Um zu rotieren, führe dasselbe Tool erneut aus;remove_app_registration_certificate das alte Zertifikat wird zurückgezogen, sobald es niemand mehr nutzt.

Anmerkung

Zwei Dinge fehlen absichtlich. Das Löschen einer Registrierung kann die Anmeldung für jede Anwendung in einem Tenant deaktivieren und kann nur innerhalb eines 30-Tage-Fensters wiederhergestellt werden. Das Erteilen der Administrator-Zustimmung ist die Operation, die eine enge delegierte Handlung in eine dauerhafte tenantweite Berechtigung verwandelt. Beides ist nicht nötig, um ein Portal zum Laufen zu bringen, daher wird keines angeboten. Das Erstellen des Dataverse-Anwendungsbenutzers für die neue Client-ID ist ebenfalls ein separater Schritt – die Toolausgabe gibt Ihnen den Befehl.

Das Geheimnis entfernen, das abläuft

Ein Client-Geheimnis ist der Teil eines bereitgestellten Portals, der an einem Datum aufhört zu funktionieren, das niemand aufgeschrieben hat. Diese entfernen es oder verschieben den Rest an einen Ort, an dem es ohne Neu-Deploying rotiert werden kann.

Setze D365__ManagedIdentityId auf die Client-ID der Identität – nicht auf die Objekt- oder Haupt-ID, die das Azure-Portal zuerst zeigt – und gib dieser Client-ID einen eigenen Dataverse-Anwendungsnutzer, wie create_dataverse_application_user bei jedem anderen Portal. Das Portal verbindet sich dann ohne jegliches Geheimnis.

Der E-Mail-Absender

Das Portal sendet Bestätigungs- und Passwort-Zurücksetzungs-Mails von einer Adresse, die zu einer Warteschlange oder einem aktivierten Benutzer in Dataverse aufgelöst werden muss. create_email_queue Erstellt die Warteschlange, genehmigt ihr Postfach und führt Test & Enable aus, wobei das Ergebnis gemeldet wird; check_email_sender erklärt, warum ein Absender nicht zustellt. Eine Warteschlange ist der richtige Absender für eine No-Response-Adresse, statt des Briefkastens einer Person.

Wichtig

Zwei Dinge, die es für Sie nicht tun kann. Die Adresse benötigt ein Postfach in Exchange Online – ein gemeinsames Postfach, das keine Lizenz benötigt – und nur ein Office-365-Globaladministrator oder Exchange-Administrator kann es genehmigen. Wenn eines eines fehlt, sagt das Tool an, welches, und das erneute Ausführen, sobald es behoben ist, ist der Auftrag abgeschlossen. Bis Test & Enable bestanden ist, akzeptiert Dataverse die E-Mail des Portals und liefert nichts – vom Erfolg des Portals nicht zu unterscheiden, weshalb das Tool es testet, anstatt einen sauberen Abschluss zu melden.

Arbeit in anderen Sprachen

Das Wissen, das der Server zurückgibt, ist Englisch, und das ist absichtlich. Dein Assistent liest es – du siehst nie direkt eine Antwort des Tools – also übersetzt es für dich: Frag in deiner eigenen Sprache, und es antwortet in deiner eigenen Sprache. Was es nicht übersetzen darf, ist der Code. Komponenten-, Parameter- und Spaltennamen sind in jedem Projekt auf Englisch, egal in welcher Sprache das Gespräch stattfindet, daher verhindert das Beibehalten des Referenzenglischen dafür, dass ein Assistent einen übersetzten Parameternamen erfindet, der nicht existiert.

Anmerkung

Fragen, die etwas benennen — “MainGrid Ansichten konfigurieren” — funktionieren bereits in jeder Sprache, weil Komponentennamen überall gleich sind. Die Tools sagen Ihrem Assistenten auch, er soll auf Englisch suchen, daher funktionieren auch Fragen, die nichts benennen.

Fehlerbehebung