Freigeben über


Probleme mit Formularen in modellbasierten Apps beheben

Dieser Artikel enthält Informationen, die Ihnen sollen, einige der häufigsten Probleme zu beheben, die bei der Arbeit mit modellgesteuerten App-Formularen auftreten können.

Wichtig

  • Die in diesem Artikel beschriebenen Tools dienen der Problembehandlung; Sie sind nicht für den täglichen Einsatz in Produktionsszenarien gedacht, obwohl Sie sie zum Beheben von Problemen in Produktionsumgebungen verwenden können.
  • Diese Tools zur Fehlerbehebung wirken sich nur auf die aktuelle Benutzersitzung aus, sofern nicht anders angegeben (z. B. wenn eine Browserregisterkarte auf die modellgesteuerte App zugreift). Sie ändern keine Systemanpassungen und wirken sich nicht auf andere Benutzer oder Sitzungen aus. Nach dem Schließen der aktuellen Sitzung wird der Effekt nicht mehr angewendet.
  • Die meisten Tools sind in allen Produktionsumgebungen verfügbar. Einige der im Artikel erwähnten wurden möglicherweise noch nicht in Ihrer Organisation bereitgestellt. In regelmäßigen Abständen werden neue Werkzeuge hinzugefügt.
  • Die in diesem Artikel aufgeführten Tools sind szenariogesteuert geschrieben. Sie können sie unabhängig voneinander verwenden, um verschiedene Arten von Problemen zu beheben.
  • URL-Parameter verwenden, um verschiedene Formularkomponenten zu deaktivieren und zum Anzeigen von registrierten Formularereignishandlern und Bibliotheken in Monitor sind wichtige und grundlegende Tools, die Sie häufig zur Fehlerbehebung in vielen Szenarien verwenden.
  • Weitere Informationen zur Verwendung von Überwachen finden Sie unter Überwachen für die Fehlerbehebung bei Formularverhalten in modellbasierten Apps verwenden

Verwenden von URL-Parametern, um verschiedene Formularkomponenten zu deaktivieren

Wenn Sie Probleme mit Formularen beheben, müssen Sie die URL-Parameter verwenden, um Komponenten zu deaktivieren, während Sie daran arbeiten, die spezifische Komponente zu isolieren, die das Problem verursacht hat. Wir empfehlen, dass Sie die Flags einzeln verwenden, um die Ursache des Problems einzugrenzen. Sie können die folgenden URL-Parameter verwenden:

  • DisableFormCommandbar

    Deaktiviert die Befehlsleiste im Formular. Es deaktiviert nur die Befehlsleiste auf Formularseiten und unterstützt keine Liste (Raster), Dashboard usw.

    https://myorg.crm.dynamics.crm/main.aspx?appid=00000000-0000-0000-0000-000000000000&pagetype=entityrecord&id=00000000-0000-0000-0000-000000000000**&flags=DisableFormCommandbar=true
    
  • DisableFormHandlers

    Deaktiviert alle Formularhandler. Wenn Sie das Flag DisableFormHandlers=true verwenden, werden folgende Ereignishandler deaktiviert: OnLoad, OnSave, Geschäftsregel OnChange und TabStateChange.

    Weitere Informationen zum Abrufen von Ereignis- oder Bibliotheksindizes für granulare Steuerelemente finden Sie unter Registrierte Formularereignishandler und Bibliotheken im Monitor anzeigen.

    https://myorg.crm.dynamics.crm/main.aspx?appid=00000000-0000-0000-0000-000000000000&pagetype=entityrecord&id=00000000-0000-0000-0000-000000000000**&flags=DisableFormHandlers=true
    
    • &flags=DisableFormHandlers=eventName

      Deaktiviert den Formularhandler durch Angabe des Ereignisnamens, beispielsweise **DisableFormHandlers=onload.

      https://myorg.crm.dynamics.crm/main.aspx?appid=00000000-0000-0000-0000-000000000000&pagetype=entityrecord&id=00000000-0000-0000-0000-000000000000**&flags=DisableFormHandlers=true
      
    • &flags=DisableFormHandlers=eventName_index

      Deaktiviert den Ereignishandler am angegebenen Index für alle unterstützten Ereignisnamen. Zum Beispiel deaktiviert DisableFormHandlers=true_0 alle Ereignishandler bei Index 0. DisableFormHandlers=onload_2 deaktiviert den OnLoad-Ereignishandler bei Index 2.

    • &flags=DisableFormHandlers=eventName_startIndex_endIndex

      Deaktiviert alle Ereignishandler innerhalb des angegebenen Bereichs durch Angabe der Werte startIndex und endIndex (beide sind enthalten). Zum Beispiel deaktiviert DisableFormHandlers=true_0_2 alle Ereignishandler von Index 0, 1 und 2. DisableFormHandlers=onload_2_5 deaktiviert den OnLoad-Ereignishandler von Index 2, 3, 4 und 5. Wenn Sie über mehr Ereignishandler verfügen, können Sie mit diesem Ansatz problematische Handler schnell eingrenzen.

    Hinweis

    Geschäftsregeln werden im Geschäftsregel-Designer erstellt, in das clientseitige Skript kompiliert und in mehreren Formularereignissen registriert, wie z. B. OnLoad, OnSave, und OnChange. Die Vorgehensweise zum Deaktivieren von Geschäftsregeln ist anderen Formularereignissen sehr ähnlich. Es gibt mehrere entscheidende Unterschiede:

    • Wenn Sie DisableFormHandlers=true, businessrule, businessrule_*index*, oder businessrule_*startIndex_endIndex* verwenden, deaktivieren Sie die Geschäftsregeln in allen Formularereignissen, für die sie registriert sind.
    • Die folgenden Abbildung zeigt beispielsweise Anweisungen zum Aktualisieren von Geschäftsregeln im Back-End. Sie müssen dies nur einmal in Ihrer Organisation tun, und Sie können Ihre Änderungen nach der Fehlerbehebung rückgängig machen.
      Geschäftsregeln aktualisieren
    • Nachdem Sie die obige Aktion ausgeführt und das Formular aktualisiert haben, sehen Sie eine andere Meldung mit zusätzlichen Informationen, wie im folgenden Bild gezeigt:
      Geschäftsregeln individuelle Kontrolle
  • DisableFormLibraries

    Deaktiviert Formularbibliotheken und verhindert das Laden der Bibliotheken. Weitere Informationen zum Abrufen von Ereignis- oder Bibliotheksindizes für granulare Steuerelemente finden Sie unter Registrierte Formularereignishandler und Bibliotheken im Monitor anzeigen . Die Verwendung ist ähnlich wie DisableFormHandlers, außer dass als Wert kein Ereignisname verwendet wird.

    • &flags=DisableFormLibraries=true: Deaktivieren Sie alle Formularbibliotheken.
    • &flags=DisableFormLibraries= Index**: Formularbibliotheken am angegebenen Index deaktivieren.
    • &flags=DisableFormLibraries= startIndex_endIndex**: Formularbibliotheken im Bereich von startIndex und endIndex (beide enthalten) deaktivieren.
  • DisableWebResourceControls

    Deaktiviert alle Webressourcensteuerelemente im Formular.

    https://myorg.crm.dynamics.crm/main.aspx?appid=00000000-0000-0000-0000-000000000000&pagetype=entityrecord&id=00000000-0000-0000-0000-000000000000**&flags=DisableWebResourceControls=true
    

    Webressource deaktivieren

  • DisableFormControl

    Deaktiviert ein Formularsteuerelement. Geben Sie den Namen des Steuerelements an, um das Steuerelement zu deaktivieren. Wenn Sie sehen, dass das Problem mit &flags=DisableWebResourceControls=true verschwindet, und das Formular mehr als ein Webressourcensteuerelement enthält, können Sie diese Flag verwenden, um das Steuerelement weiter zu identifizieren, das das Problem verursacht.

    https://myorg.crm.dynamics.crm/main.aspx?appid=00000000-0000-0000-0000-000000000000&pagetype=entityrecord&id=00000000-0000-0000-0000-000000000000**&flags=DisableFormControl=controlname
    
  • DisableBusinessProcessFlow

    Deaktiviert alle Geschäftsprozessflüsse auf dem Formular.

    https://myorg.crm.dynamics.crm/main.aspx?appid=00000000-0000-0000-0000-000000000000&pagetype=entityrecord&id=00000000-0000-0000-0000-000000000000**&flags=DisableBusinessProcessFlow=true
    
  • navbar Dies ist kein flag-Parameter; verwenden Sie stattdessen navbar=off in der URL.

Sie können auch mehrere durch Komma (,) getrennte URL-Parameter hinzufügen.

https://myorg.crm.dynamics.crm/main.aspx?appid=00000000-0000-0000-0000-000000000000&pagetype=entityrecord&id=00000000-0000-0000-0000-000000000000**&flags=DisableFormHandlers=true,DisableWebResourceControls=true,DisableFormCommandbar=true,DisableBusinessProcessFlow=true&navbar=off

Hinweis

Die Unterschiede zwischen DisableFormHandler und DisableFormLibraries sind:

  • Die Flag DisableFormHandler deaktiviert Formularhandler unabhängig von den enthaltenen Formularbibliotheken. Im Gegensatz dazu deaktiviert die Flag DisableFormLibraries die Formularbibliotheken (Webressourcen) unabhängig von den in den Bibliotheken enthaltenen Funktionen (Ereignishandler). Einfach gesagt, DisableFormLibraries stellt sicher, dass die angegebenen JavaScript-Webressourcendateien nicht geladen werden.
  • Die Flag DisableFormHandler verhindert nicht, dass die enthaltende Formularbibliothek geladen wird. Somit wird nicht verhindert, dass der in der Bibliothek vorhandene, aber nicht als Ereignishandler registrierte JavaScript-Code ausgeführt wird. Wenn beispielsweise eine Formularbibliothek new_myscript.js wie folgt geschrieben ist (nicht empfohlene Praxis):
  • Sie sollten mit DisableFormHandler beginnen, um zu sehen, ob das Problem verschwindet, und wenn nicht, können Sie DisableFormLibraries versuchen. Das Deaktivieren eines Skripts birgt immer ein gewisses Risiko, Ihre Formularszenarien möglicherweise zu beschädigen. Letztere haben jedoch aufgrund der Deaktivierung der gesamten JavaScript-Dateien tendenziell mehr Nebenwirkungen. Unterschied zwischen DisableFormHandlers und DisableFormLibraries
  • Angenommen, die myOnloadHandler ist registriert als ein OnLoad-Ereignishandler. Die Flag DisableFormHandlers=true verhindert nur die zweite Warnung, während die Flag DisableFormLibraries=true beide Warnungen verhindert.

Anzeigen registrierter Formularereignishandler und -bibliotheken in Monitor

Um registrierte Formularereignis-Handler und -bibliotheken anzuzeigen, können Sie die Operation FormEvents in Monitor anzeigen.

Formularereignisse

Sie benötigen die Parameterwerte eventIndex und libraryIndex bei Verwendung der URL-Flags DisableFormHandlers oder DisableFormLibraries. Nachdem ein Ereignis oder eine Bibliothek deaktiviert wurde, wird der Status „Ereignis aktiviert“ in beiden FormularEvents-Vorgängen angezeigt (eine Gesamtansicht aller registrierten Eventhandler aller Events) und FormEvents.eventName Operation (Details werden protokolliert, wenn ein bestimmtes Ereignis eintritt).

Formular-Ereignis OnLoad

Unerwartetes Verhalten beim Laden eines Formulars

Einige häufige Probleme, die beim Laden eines modellgesteuerten App-Formulars zu unerwartetem Verhalten führen können, sind:

  • Spalten oder Steuerelemente haben nicht die erwarteten Werte.
  • Steuerelemente sind deaktiviert oder nicht aktiviert.
  • Steuerelemente werden nicht angezeigt oder sind nicht ausgeblendet.

Vorgehensweise bei der Problembehandlung

Es gibt mehrere Gründe, warum beim Öffnen eines Formulars unerwartetes Verhalten auftreten kann. Eine der häufigsten sind die OnLoad Skripte, die synchron oder asynchron ausgeführt werden, um das Spalten- oder Steuerungsverhalten zu ändern. Um festzustellen, ob Ihr Skript das Problem verursacht, können Sie die Formularhandler deaktivieren, indem Sie &flags=DisableFormHandlers=true an das Ende der App-URL anfügen.

Wenn das unerwartete Verhalten nach dem Deaktivieren des Formularhandlers nicht mehr auftritt, ist dies ein starker Hinweis darauf, dass der bestimmte Formularhandler dieses Verhalten verursacht. Wenn Sie das Skript identifizieren, das dieses Verhalten verursacht, unternehmen Sie eine Nachverfolgung bei dem Skriptbesitzer, um dieses Problem weiter zu beheben.

Fehlermeldung „Wird gespeichert...“

Wenn Sie ein Formular speichern, sehen Sie manchmal eine Wird gespeichert ...-Fehlermeldung.

Dieser Fehler tritt auf, wenn das Formularereignis OnSave ausgelöst wird, ehe das vorherige OnSave-Ereignis abgeschlossen wird. Dieses Verhalten wird nicht unterstützt, und der Fehler ist Design-bedingt, da der Aufruf des OnSave-Ereignisses vor dem Abschluss des vorherigen OnSave-Ereignisses rekursive Speicherschleifen mit unbeabsichtigten Folgen verursacht.

Eine typische Ursache für diesen Fehler ist das Skript, das die save()-Methode im OnSave-Ereignishandler aufruft. Eine andere mögliche Ursache können gleichzeitige save()-Aufrufe in der setTimeout()-Methode sein, die dazu führen, dass der Fehler zeitweise angezeigt wird, je nachdem, ob der vorherige save()-Aufruf abgeschlossen ist, ehe ein weiterer save()-Aufruf getätigt wird.

Vorgehensweise bei der Problembehandlung

In Monitor bietet der FormEvents.onsave-Vorgang alle Details, die den Fehler verursachen (diese Aufrufliste wird zu Demonstrationszwecken geändert). Die Aufrufliste gibt an, welche genaue Webressource, Funktion, Zeile und Zeilennummer diesen Fehler verursacht. Die Formularüberprüfung kann den Fehler nicht erkennen, wenn das Problem nicht reproduziert werden kann.

![Fehler „Speichern in Bearbeitung“](media/save-in-progress-error.png "Fehler "Speichervorgang wird durchgeführt..."")

Nachverfolgung mit dem Skriptbesitzer, um das Problem weiter zu beheben.

Intermittierende Formularfehler

Die häufigste Ursache für intermittierende oder zufällige Formularfehler ist die Verwendung nicht unterstützter Client-API-Methoden. Diese Fehler weisen folgende Merkmale auf:

  • Sie treten nur für bestimmte Datensätze, Benutzer, Regionen oder Browser auf oder nur in Zeiten hoher Netzwerk- oder Dienstlast.

  • Sie treten selten in Support-Instanzen auf.

  • Sie können einmalig auf einem Computer auftreten. Der Fehler kann sich wiederholen, wenn der Browser-Cache geleert wird.

  • formContext.getControl oder formContext.getControl (arg).getAttribute () gibt zufällig null für ein gültiges Steuerelement oder eine gültige Spalte zurück.

Es gibt viele Möglichkeiten, nicht unterstützte Client-API-Methoden zu schreiben, und alle haben ein gemeinsames Muster: Sie verursachen eine Race-Bedingung in der Formularladungs-Pipeline. Da sie eine Race-Bedingung einführen, tritt das Problem nur auf, wenn das benutzerdefinierte Skript ausgeführt wird, bevor das Formular vollständig für den Zugriff über die Client-API bereit ist. Viele Faktoren können eine Race-Bedingung verursachen:

  • In der JavaScript-Webressource wird Code in einem globalen Bereich platziert, der sofort ausgeführt wird, wenn die Webressourcendatei geladen wird, ohne darauf zu warten, dass das Formular zugriffsbereit ist. Stellen Sie sicher, dass der Code in einem gültigen Formularhandler ausgeführt wird, beispielsweise in einem OnLoad-Handler.

    Nicht unterstützte Client-API-Methode

  • In der Komponentenskriptdatei des Power Apps Component Framework wird auf Client API-Methoden innerhalb der init- oder updateView-Funktion zugegriffen. Die Funktionen init() und updateView() werden sofort ausgeführt, wenn die Komponente geladen wird, ohne darauf zu warten, ob ohne Weiteres auf das Formular zugegriffen werden kann. Sie können keine nicht unterstützten Client-API-Methoden in Komponenten des Power Apps Component Framework verwenden.

Auf die Client-API wird innerhalb von einer window.setTimeout()-Funktion in der Webressourcendatei zugegriffen. Der Seitenstatus ist unvorhersehbar, wenn die setTimeout()-Methode die umschlossene Funktion ausführt. Aufgrund der Natur der Zeitgeberfunktion befindet sich die Seite bei der Ausführung möglicherweise in einem Übergangszustand (während des Ladens oder Speicherns der Seite), auf den die Client-API nicht ohne weiteres zugreifen kann.

Vorgehensweise bei der Problembehandlung

Mit Monitor können Sie auf Informationen zugreifen, mit denen Sie feststellen können, wann der nicht unterstützte Clientzugriff stattgefunden hat und wann der Zugriff aufgrund einer Race-Bedingung zur falschen Zeit erfolgte. Die Formularüberprüfung meldet einen solchen nicht unterstützten Clientzugriff jedoch nicht, wenn der nicht unterstützte Code zum richtigen Zeitpunkt ausgeführt wird, der kein Problem verursacht.

Nicht unterstützte Client API

Hinweis

Der Aufrufstapel wurde zu Illustrationszwecken geändert. Die Aufrufliste zeigt Details wie Webressource, Funktion und die den Fehler verursachende Zeile an.

Nachverfolgung mit dem Skriptbesitzer, um das Problem weiter zu beheben.

Das Formular oder der Datensatz werden nicht gespeichert, wenn Sie versuchen, das Formular zu speichern

Eine häufige Ursache ist ein OnSave-Ereignishandler, der die executionContext.getEventArgs().preventDefault()-Methode aufruft, um den Speichervorgang abzubrechen.

Vorgehensweise bei der Problembehandlung

In Monitor liefert der FormEvents.onsave-Vorgang alle Details dazu, warum das Sicherungsereignis abgebrochen wird, Details, die über die Formular-UI selbst verfügbar sind.

Fehler "Datensatz wurde nicht gespeichert"

Nachverfolgung mit dem Skriptbesitzer, um das Problem weiter zu beheben.

Formular friert ein, lädt langsam oder gibt unbekannte Fehler aus

Es gibt viele mögliche Gründe dafür, dass ein Formular einfriert, langsam geladen wird oder einen Skriptfehler vom Typ „Webressourcenmethode existiert nicht“ oder einen Fehler auslöst, der kein häufiger Skriptfehler ist. Zu den möglichen Gründen zählen:

  • Schlechte OnLoad-Skripte.
  • Webressourcen-Steuerelemente.
  • Skripte und Regeln für Menübandschaltflächen.
  • Synchrone Netzwerkanforderungen.
  • Benutzerdefiniertes Plug-ins.
  • Fehler im Geschäftsprozessfluss.

Vorgehensweise bei der Problembehandlung

Stellen Sie fest, ob das Problem ohne Einbeziehung von Formularen reproduziert wird. Wenn dies der Fall ist, gibt es ein umfassenderes Problem, das außerhalb des Kontexts des Formulars untersucht werden sollte. Die tatsächliche Verantwortung für das Problem hängt von den jeweiligen Details von Fall zu Fall ab.

  • Wenn Sie glauben, dass dieses Problem nur bei Formularen auftritt, lesen Sie Verwenden von URL-Parametern, um verschiedene Formularkomponenten zu deaktivieren, um die Komponente einzugrenzen, die das Problem verursacht.
  • Wenn Sie feststellen, dass das Problem durch bestimmte Formularbibliotheken/Skriptdateien verursacht wurde, wenden Sie sich unter Nachverfolgung an den Besitzer, der diese Anpassungen vorgenommen hat, um die Ursache des Problems herauszufinden.
  • Wenn Sie feststellen, dass Webressourcensteuerelemente das Problem mit dem Flag DisableWebResourceControls verursachen, dann können Sie das DisableFormControl-Flag verwenden, um jeden einzeln zu deaktivieren, bis das Problem länger reproduziert wird. Das Letzte deaktivierte Steuerelement, das das Problem nicht reproduziert, ist dasjenige, das das Problem verursacht. Nachverfolgung mit dem Besitzer der Steuerelements, um das Problem weiter zu beheben.
  • Wenn Sie feststellen, dass das Problem durch die Befehlsleiste/das Menüband mit dem Flag DisableFormCommandbar verursacht wird, bedeutet dies, dass dies kein Problem mit dem Formular, sondern ein Problem mit der Befehlsleiste ist. Verwenden Sie Befehlsüberprüfung, um einzelne Befehle zu beheben und festzustellen, welcher das Problem verursacht.

Eine Geschäftsregel oder ein benutzerdefiniertes Skript funktioniert nicht

Dieses Problem tritt auf, wenn eine Geschäftsregel oder ein benutzerdefiniertes Skript, das früher im Legacy-Webclient funktioniert hat, in Einheitliche Oberfläche nicht mehr funktioniert. Einer der Hauptgründe für das Auftreten dieses Fehlers ist, dass eine Geschäftsregel oder ein Skript in der einheitlichen Oberfläche auf ein Steuerelement verweist, das in der einheitlichen Oberfläche nicht verfügbar ist.

Vorgehensweise bei der Problembehandlung

Einer der Gründe dafür, dass die Geschäftsregel oder das Skript in Einheitliche Oberfläche nicht funktioniert, besteht darin, dass die zugehörigen Steuerelemente in Einheitliche Oberfläche nicht vorhanden sind. Zusammengesetzte Steuerelemente sind im Webclient vorhanden, aber in Einheitliche Oberfläche sind zusammengesetzte Steuerelemente in Teile zerlegt und anders gespeichert. Wenn beispielsweise die Spalte fullname Teil der Geschäftsregel oder des benutzerdefinierten Skripts ist, sollte Spalten firstname, middlename, oder lastname stattdessen verwendet werden.

Sobald Sie die Formularüberprüfung starten, können Sie weitere Details in dem CompositeControl-Vorgang einschließlich des zusammengesetzten Steuerelements sehen, das das Problem verursacht, der Spalten, die stattdessen in der Geschäftsregel oder dem benutzerdefinierten Skript verwendet werden können, und einer vollständigen Aufrufliste (die Aufrufliste wird zu Demonstrationszwecken geändert).

Benutzerdefiniertes Skript funktioniert nicht

Nachverfolgung mit dem entsprechenden Besitzer der Geschäftsregel oder des benutzerdefinierten Skripts, um das vom Formularprüfer vorgeschlagene Steuerelement zu ändern.

Die meisten Formulare verfügen über eine Registerkarte Verknüpft. Es öffnet das Verknüpfte Menü mit Verknüpften Menüelementen.

Registerkarte „Verknüpft“ in einem Formular, erweitert

Ein Verknüpftes Menüelement wird möglicherweise nicht wie erwartet angezeigt.

Vorgehensweise bei der Problembehandlung

Ein verknüpftes Menüelement wird möglicherweise nicht angezeigt, weil:

Zwischen der Haupttabelle und der zugehörigen Tabelle sollte eine Eins-zu-viele- oder Viele-zu-viele-Beziehung bestehen. Ein Formular zeigt eine Zeile aus der Haupttabelle. Die verknüpfte Tabelle ist diejenige, die im Menü Verknüpft des Formulars erscheinen sollte. Wenn diese Beziehungen nicht vorhanden sind, wird der verknüpfte Menüpunkt nicht angezeigt.

Gehen Sie zum Verifizieren zum Power Apps-Portal, wählen Sie Tabellen und wählen Sie die Tabelle aus, die die Beziehung enthält, die Sie anzeigen möchten.

Das Menü Verknüpft zeigt keine verknüpften Tabellen von bestimmten Beziehungen an, die von Dataverse erstellt wurden. Diese Beziehungen sind als nicht anpassbar markiert.

Die AssociatedMenuConfiguration.IsCustomizable-Eigenschaft gibt an, ob die Beziehung angepasst werden kann. Die einfachste Möglichkeit zur Überprüfung besteht darin, die Beziehung mithilfe der Web-API abzufragen, um die Daten des AssociatedMenuConfiguration-Komplextyps anzuzeigen.

Angenommen, Sie möchten überprüfen, ob die Beziehung zwischen den Tabellen Geschäftseinheit und Ziel anpassbar ist. Der SchemaName dieser Beziehung ist business_unit_goal. Geben Sie diese URL in Ihrem Browser ein:

GET [Organization URI]/api/data/v9.2/RelationshipDefinitions(SchemaName='business_unit_goal')/Microsoft.Dynamics.CRM.OneToManyRelationshipMetadata?$select=AssociatedMenuConfiguration

Sie können dieselben Daten auch erhalten, indem Sie die Tabellendefinition abfragen:

GET [Organization URI]/api/data/v9.2/EntityDefinitions(LogicalName='businessunit')/OneToManyRelationships(SchemaName='business_unit_goal')/AssociatedMenuConfiguration

Die Antwort für beide Anfragen könnte wie folgt aussehen:

{
    "@odata.context": "[Organization URI]/api/data/v9.2/$metadata#RelationshipDefinitions/Microsoft.Dynamics.CRM.OneToManyRelationshipMetadata(AssociatedMenuConfiguration)/$entity",
    "MetadataId": "2124b4bd-f013-df11-a16e-00155d7aa40d",
    "AssociatedMenuConfiguration": {
        "Behavior": "UseCollectionName",
        "Group": "Details",
        "Order": null,
        "IsCustomizable": false,
        "Icon": null,
        "ViewId": "00000000-0000-0000-0000-000000000000",
        "AvailableOffline": true,
        "MenuId": null,
        "QueryApi": null,
        "Label": {
            "LocalizedLabels": [],
            "UserLocalizedLabel": null
        }
    }
}

Beachten Sie, dass IsCustomizable gleich false ist. Daher ist die Beziehung nicht anpassbar und das Ziel erscheint nicht im Menü Verknüpft.

Wenn die Tabelle im Web Client erstellt wurde (veraltet seit 2019), wird sie möglicherweise nicht angezeigt, da sie für Unified Client deaktiviert ist.

Gehen Sie zur Überprüfung zum Lösungs-Explorer und wählen Sie die Tabelle (Entität) aus. Stellen Sie sicher, dass Für Unified Client aktivieren aktiviert ist.

Der Lösungs-Explorer zeigt an, dass eine Entität nicht für Unified Client aktiviert ist

Bei Tabellen, die mit dem modernen Designer erstellt wurden, tritt dieses Problem nicht auf. Sie sind immer für Unified Client aktiviert.

Hinweis

Bestimmte Systemtabellen können nicht für Unified Client aktiviert werden. Beispielsweise kann Prozesssitzung nicht in modellgesteuerten Apps verwendet werden.

Überwachungsverlauf befindet sich nicht im Menü „Verknüpft“.

Vorgehensweise bei der Problembehandlung

Der Überwachungsverlauf wird in den folgenden Fällen nicht unterstützt:

Ein Verknüpftes Menüelement erscheint vielleicht, obwohl es nicht erscheinen sollte.

Vorgehensweise bei der Problembehandlung

Ein verknüpftes Menüelement wird möglicherweise angezeigt, weil:

Das System ignoriert Formular-XML-Anpassungen für auf sich selbst verweisende n:n-Beziehungen. Das System ignoriert diese Anpassungen, da nicht angegeben werden kann, ob die Anpassungen für die primäre Tabelle oder die zugehörige Tabelle gelten, bei denen es sich in diesem Fall um dieselbe Tabelle handelt. Daher ignoriert das System diese Anpassungen.

Wenn Sie die Formular-XML ändern, um das zugehörige Menüelement auszublenden, wird es trotzdem angezeigt. Alle Formular-XML-Anpassungen zu auf sich selbst verweisenden Beziehungen, wie etwa das Ändern der Reihenfolge oder der Bezeichnung des zugehörigen Elements, werden ignoriert.

Einige Systemtabelle können nicht ausgeblendet werden

Benutzerdefinierte Tabellen zeigen zum Beispiel immer das verknüpfte Menüelement Aktivitäten an. Es ist nicht möglich, es mit dem Formulardesigner oder durch Ändern der Formular-XML auszublenden.

Der Text für verknüpfte Menüelemente erscheint nicht in der erwarteten Sprache.

Vorgehensweise bei der Problembehandlung

Wenn einige verknüpfte Menüelemente in einer anderen Sprache als der der Benutzenden angezeigt werden, prüfen Sie, ob in der Formular-XML übersetzte Beschriftungen fehlen.

Überprüfen Sie in der Formular-XML, ob für jede Sprache Beschriftungen festgelegt sind. Dieses Formular-XML zeigt beispielsweise, dass das navContacts-Element nur die Bezeichnung in amerikanischem Englisch (1033) hat: Contacts.

<NavBarByRelationshipItem Id="navContacts" Area="Sales" Sequence="10064" RelationshipName="contact_customer_accounts" Show="true">
  <Titles>
    <Title LCID="1033" Title="Contacts" />
  </Titles>
</NavBarByRelationshipItem>

Um dieses Problem zu beheben, fügen Sie die übersetzten Beschriftungen der Formular-XML hinzu. Diese Formular-XML zeigt beispielsweise, dass das navContacts-Element Beschriftungen in amerikanischem Englisch (1033) und Deutsch (1031) hat.

<NavBarByRelationshipItem Id="navContacts" Area="Sales" Sequence="10064" RelationshipName="contact_customer_accounts" Show="true">
  <Titles>
    <Title LCID="1033" Title="Contacts" />
    <Title LCID="1031" Title="Kontakte" />
  </Titles>
</NavBarByRelationshipItem>

Wenn kein Text für die Sprache des Benutzenden festgelegt ist, verwendet das System die Ausgangssprache der Organisation. Ist auch dieser nicht vorhanden, verwendet das System den Text in amerikanischem Englisch.

Warum wird ein Formular in der Formularauswahl angezeigt oder nicht?

Die Formularauswahl ist ein Dropdown-Menü, mit dem Benutzer zwischen verschiedenen Formularen für eine bestimmte Tabelle wechseln können.

Erweiterte Formularauswahl, die verschiedene verfügbare Formulare anzeigt

Sie müssen die Bedingungen verstehen, die steuern, ob das Formular angezeigt wird.

Vorgehensweise bei der Problembehandlung

Wenn alle folgenden Bedingungen erfüllt sind, ist in der Auswahl ein Formular verfügbar:

  1. Der Benutzer hat die Berechtigung, auf das Formular zuzugreifen.
  2. Das Formular wird dem App-Modul hinzugefügt.
  3. Das Formular wird mit der Client-API nicht ausgeblendet.
  4. Für Dynamics Customer Service workspace-Formulare ist ShowInFormSelector auf True gesetzt.

Wenn ein Formular nicht in der Formularauswahl angezeigt wird,

  1. Prüfen Sie die betroffenen Sicherheitsrechte des Benutzers.
  2. Überprüfen Sie, ob das Formular dem App-Modul hinzugefügt wird.
  3. Deaktivieren Sie benutzerdefinierte Skripte.

Warum wird ein erwartetes Standardformular nicht standardmäßig angezeigt?

Wenn für eine Tabelle mehrere Formulare vorhanden sind, wird das gewünschte nicht als Standard verwendet.

Vorgehensweise bei der Problembehandlung

Die folgenden Kriterien bestimmen, welches Formular dem Benutzer zuerst angezeigt wird:

  1. Wenn beim Öffnen eines Formulars eine formId angegeben wird, wird dieses Formular angezeigt. Eine formId kann über Client-API-Funktionen wie openForm oder in einer URL bereitgestellt werden.
  2. Andernfalls wird das zuletzt vom Benutzer ausgewählte Formular angezeigt. Das System merkt sich die letzte Auswahl aus der Formularauswahl.
  3. Wenn der Benutzer die Formularauswahl noch nicht verwendet hat, verwendet das System die Formularreihenfolge.

Wenn das Formular für den Benutzer nicht verfügbar ist, sucht das System weiterhin nach einem geeigneten Formular zur Anzeige.

Ein Formular steht dem Benutzer zur Verfügung, wenn:

  1. Der Benutzer hat die Berechtigung, auf das Formular zuzugreifen.
  2. Das Formular wird dem App-Modul hinzugefügt.

Wenn Benutzenden keine Formulare zur Verfügung stehen, wird das Ausweichformular verwendet.

Warum ein Steuerelement aktiviert/deaktiviert bzw. sichtbar/nicht sichtbar ist

Es gibt viele mögliche Gründe, warum ein Steuerelement beim Laden des Formulars deaktiviert oder ausgeblendet ist.

Vorgehensweise bei der Problembehandlung

Sie können Monitor verwendenl, um die FormControls-Operation zu sehen, die alle Details zum anfänglichen Steuerelementstatus beim Laden des Formulars enthält.

Prüfung der Formular-Steuerelemente

Ein weiterer Ort zum Überprüfen ist der Vorgang ControlStateChange.visible oder ControlStateChange.disabled, der erklärt, warum der Steuerelement-Deaktivierungs- oder Sichtbarkeitsstatus jederzeit auf dem Formular geändert wird. Dieser Vorgang erklärt den Steuerungszustand vor der Änderung, die beabsichtigte Zustandsänderung, die erfolgreich sein kann, und den Zustand nach der Änderung. Nicht alle Versuche zur Änderung des Steuerzustands sind erfolgreich. Für ein durch Formular-XML deaktiviertes Steuerelement können Sie es über die Client-API in einem OnLoad-Ereignishandler. Wenn die Steuerung jedoch aus Sicherheitsgründen deaktiviert ist, ist es sehr unwahrscheinlich, dass ein Versuch, sie über die Client-API zu aktivieren, den Status erfolgreich ändern würde.

Steuerelementstatus geändert

Ein Steuerelement kann deaktiviert werden, indem Sie die folgende Regelliste verwenden. Wenn eine Regel erfüllt ist, werden die folgenden Regeln ignoriert. Wenn Sie ändern möchten, ob ein Steuerelement deaktiviert ist, müssen Sie die Eingabe in die für das Ergebnis verwendete Regel oder in eine Regel weiter oben in der Liste ändern.

  • Wenn die Flags DisableWebResourceControls=true oder DisableFormControl=<control name> übergeben werden und Auswirkungen auf das Steuerelement haben, wird das Steuerelement deaktiviert.
  • Wenn die besitzende Tabelle in Einheitliche Oberfläche in Tabellendefinitionen schreibgeschützt ist, ist das Steuerelement deaktiviert.
  • Wenn die Tabelle im Offline-Modus nicht verfügbar ist, ist die Steuerung deaktiviert.
  • Wenn der aktuelle Benutzer keine Schreibberechtigungen für den Datensatz hat, ist das Steuerelement deaktiviert.
  • Wenn die Spaltendefinition IsValidforCreate auf false gesetzt hat, ist das Steuerelement deaktiviert.
  • Wenn die Spaltendefinition IsValidforUpdate auf false gesetzt hat, ist das Steuerelement deaktiviert.
  • Wenn der aktuelle Benutzer keine Assign to Rechte hat, ist die Besitzerspalte deaktiviert.
  • Wenn der Benutzer keine Schreibberechtigungen für die durch Sicherheit auf Feldebene definierte Spalte hat, ist das Steuerelement deaktiviert.
  • Wenn ein Client-API-Skript das Steuerelement aktiviert oder deaktiviert, berücksichtigt der Status für das deaktivierte Steuerelement diese Einstellung.
  • Wenn das Steuerelement im Formulardesigner deaktiviert ist, ist das Steuerelement deaktiviert.
  • Wenn der Benutzer keine Append To Rechte für die Tabelle des Suchsteuerelements oder Append Rechte für die Tabelle des aktuellen Datensatzes hat, ist das Suchsteuerelement deaktiviert

Wenn das Steuerelement alle oben genannten Prüfungen besteht, bestimmt der Datensatzstatus schließlich, ob das Steuerelement deaktiviert ist. Das Steuerelement ist standardmäßig für aktive Datensätze aktiviert und für inaktive Datensätze deaktiviert.

Hinweis

Der Unterschied zwischen FormControls und ControlStateChange ist, dass die FormControls-Operation den anfänglichen Steuerstatus widerspiegelt, wenn das Formular geladen wird, während die ControlStateChange-Operation die Zustandsänderung jederzeit im Formular widerspiegelt, sei es während des Ladens des Formulars, in OnChange- oder OnSave-Ereignissen nach dem Laden des Formulars.

Wichtig

Der deaktivierte und ausgeblendete Status eines Steuerelements kann sich beim ersten Laden eines Formulars mehrmals ändern. Um den Grund zu erfahren, warum ein Steuerelement ausgeblendet oder deaktiviert ist, überprüfen Sie den letzten im Monitor protokollierten Vorgang. Wenn zum Beispiel keine ControlStateChange.visible/ControlStateChange.hidden-Operationen für die zu untersuchende Kontrolle vorhanden ist, befinden sich der Wert und die Begründung in der FormControls-Operation. Andernfalls sind es der Wert und der Grund in der letzten ControlStateChange.visible/ControlStateChange.hidden-Operation. Sie können Protokolle nach Zeitstempel sortieren, um nach dem letzten Vorgang zu suchen.

Warum ein Steuerelement beim Laden des Formulars einen bestimmten Wert hat

Ein Steuerelement kann einen bestimmten Wert beim Laden des Formulars nicht haben, wie vom Benutzer erwartet.

Vorgehensweise bei der Problembehandlung

Es gibt viele mögliche Gründe, warum das Steuerelement beim Laden eines Formulars einen Wert haben kann. Die ControlDefaultValue-Operation in Monitor erklärt die Quelle der Standardwerte.

Standardwert des Steuerelements

Wenn der Wert eines Steuerelements mehrfach aktualisiert wird, zeigt Update Sequence den Endwert an. Hier ist beispielsweise ein Steuerelement mit einem Standardwert, das dann mit einem Wert überschrieben wird, der mit einem Client-API-Skript übergeben wird. Es ist ein Aufrufstapel vorhanden.

Steuerelement Wert vorher

Es gibt Szenarien, in denen Spalten auf der Basis einer Beziehungsspalten-Zuordnung aufgefüllt werden; in diesem Fall zeigt das Ereignis das an.

Steuerelement Wert nach

Überprüfen Sie, woher der Wert kommt, und ergreifen Sie anhand der folgenden Tabelle Maßnahmen:

Ausgangssprache Vorgehensweise zur Behebung
Client-API-Skript Kontaktieren Sie den Besitzer des Skripts.
Standardwert Überprüfen Sie die Konfiguration des Steuerelements.
Beziehungsspalten-Zuordnung Überprüfen Sie die Beziehungskonfiguration und aktualisieren Sie die Zuordnung der Spalte.
Von Seiteneingabedaten übergebener Wert wird über URL übergeben Prüfen Sie, ob die API, die das betreffende Formular öffnet, den Wert weitergibt.

Warum eine Registerkarte oder ein Abschnitt sichtbar oder ausgeblendet ist

Es gibt viele mögliche Gründe dafür, warum eine Registerkarte oder ein Abschnitt ausgeblendet oder sichtbar ist.

Vorgehensweise bei der Problembehandlung

Die Operationen TabStateChange oder SectionStateChange in Monitor erklären die sichtbare Statusänderung, wie im folgenden Bild gezeigt. Wenn dies durch ein Skript verursacht wird, zeigt die Aufrufliste die Webressourcendatei, die Zeilennummer und den Funktionsnamen an, die dieses Verhalten verursacht haben.

Registerkartenabschnitt

Nachverfolgung gemäß dem Vorschlag im Zustandsgrund oder dem Eigentümer der Webressource/Geschäftsregeln, um das Verhalten zu ändern oder zu beheben.

Unerwartete Dialogfelder oder Navigation

Es gibt viele mögliche Gründe, warum ein Dialogfeld angezeigt wird oder die Navigation unerwartet erfolgt. Eine der häufigsten Ursachen ist die Xrm.Navigation-API-Methoden werden aufgerufen, um einen Datensatz oder ein Formular von einem benutzerdefinierten Skript zu öffnen. Wenn Sie beispielsweise ein Formular öffnen, wird eine Benachrichtigung angezeigt, wie in der folgenden Abbildung dargestellt.

Dialogfeld für Benachrichtigungen

Vorgehensweise bei der Problembehandlung

Die XrmNavigation-Operation in Monitor enthält eine Aufrufliste, die Ihnen hilft, das Skript zu identifizieren, das unerwartetes Verhalten verursacht.

XrmNavigation-Vorgang in Monitor

Nachverfolgung mit dem Eigentümer der Webressource, um das Verhalten zu ändern oder zu beheben.

Öffnen eines anderen Formulars anstelle eines Formulars zum schnellen Erstellen

Beim Öffnen eines Schnellerfassungsformulars aus einer Suche oder einem Raster wird möglicherweise ein anderes Formular (Bearbeitungs- oder Hauptformular) anstelle eines Schnellerfassungsformulars geöffnet. Es gibt einige Gründe, warum dieses Problem auftreten kann:

  • Das Flag für die Erzwingung des Hauptformulars ist festgelegt.
  • Das Schnellerfassungsformular ist nicht verfügbar.

Vorgehensweise bei der Problembehandlung

Sie können Monitor verwenden, um den FormType-Vorgang zu sehen, der alle Gründe enthält, warum ein Schnellerfassungsformular nicht geöffnet wird.

Tabelle nicht für schnelles Erstellen aktiviert

Sie müssen mit dem Tabellenbesitzer Nachverfolgung sprechen, der die Schnellerfassung durch Tabellendefinitionen (Metadaten) deaktiviert hat.

Tabelle erscheint nicht im Schnell-Erstellen-Menü-Flyout

Wenn Sie das globale Schnellstart-Menü-Flyout öffnen, sind nicht alle Tabellen verfügbar. Es gibt einige Gründe, warum die Tabellen in dieser Liste gefiltert sind:

  • Es ist kein Formular zum schnellen Erfassen für die Tabelle verfügbar.
  • Tabelle ist nicht für das Formular zum schnellen Erfassen aktiviert.
  • Die Tabelle ist nicht für die neue Einheitliche Oberfläche aktiviert.
  • Die Tabelle ist in der Einheitlichen Benutzeroberfläche schreibgeschützt.
  • Die Sichtbarkeit der Tabelle auf dem mobilen Client kann nicht geändert werden.
  • Tabelle ist nicht Teil des App-Moduls.
  • Der Benutzer verfügt nicht über ein Erstellungsrecht für die Tabelle.
  • Die Berechtigung zum Erstellen wird für die Tabelle nicht unterstützt.

Vorgehensweise bei der Problembehandlung

Sie können Monitor verwenden, um den QuickCreateMenu-Vorgang zu sehen, der alle Tabellen und Gründe für deren Filterung aus dem Flyout des Schnellerfassungsmenüs enthält.

Sehen Sie sich die folgenden Beispiele an, um die Gründe für die Filterung zu verstehen. Wenden Sie sich anhand der Erklärungen an die verantwortliche Stelle oder nehmen Sie entsprechende Änderungen vor.

Tabelle nicht für Einheitliche Oberfläche

Tabelle nicht für Schnelles Erstellen verfügbar

Tabelle nicht Teil des App-Moduls

Unerwarteter Nachricht bei nicht gespeicherten Änderungen

Bei der Bearbeitung von Formularen erhalten Sie eine Meldung zu nicht gespeicherten Änderungen in der Formularfußzeile, wenn Sie das aktuelle Formular verlassen oder das Formular ohne Änderungen speichern.

Vorgehensweise bei der Problembehandlung

Die Fehlermeldung nicht gespeicherte Änderungen tritt auf, wenn Sie das Formular ändern und die Änderungen nicht gespeichert werden. Wenn Sie keine Änderungen manuell vorgenommen haben, stammen diese möglicherweise von einem JavaScript, einem Plug-In oder einer Geschäftsregel. Sie können Überwachen verwenden, um den Vorgang UnsavedChanges anzuzeigen, das bei der Suche nach der Quelle der Änderungen hilft. Sie können nach OperationType UnsavedChanges filtern.

Der Abschnitt all attributes modified enthält eine kurze Zusammenfassung der Spalten, die den Fehler aufgrund nicht gespeicherter Änderungen und ihren Werten verursachen. Der Abschnitt unsaved changes zeigt, was mit den Spalten im Detail passiert ist. Für jede Spalte können Sie eine Liste von Steuerelementen sehen, die eine Änderung verursachen könnten. Die Wertänderung wird ebenfalls angezeigt (previousValue, newValue) sowie eine Aufrufliste.

Der folgende Screenshot zeigt die Ursache des Problems. Sie können sehen, dass die Änderung vom OnLoad-Skript herrührte.

Fehler aufgrund nicht gespeicherter Änderungen

Hinweis

Wenn der Benutzer die Änderungen am Formular manuell vorgenommen hat, wird keine Aufrufliste bereitgestellt.

Überprüfen Sie, woher die Änderung kommt und ob das Verhalten erwartet wird oder nicht. Wenn ein Skript die Änderung verursacht, kann die ursprüngliche Webressource in der Aufrufliste zurückverfolgt werden. In den meisten Fällen handelt es sich um ein Skript. Treffen Sie eine Entscheidung basierend auf der Webressource selbst.

Die geschäftserforderliche Spaltenvalidierung verhält sich nicht wie erwartet

Geschäftsrelevante Spalten blockieren standardmäßig den Vorgang zum Speichern des Formulars, wenn der Wert leer ist. In vielen entwurfsbedingten Szenarien kann es jedoch sein, dass eine geschäftserforderliche Spalte den Speichervorgang nicht blockiert, wenn der Wert leer ist, oder die Speicherung blockiert, wenn Sie der Meinung sind, dass dies nicht der Fall sein sollte.

Vorgehensweise bei der Problembehandlung

Der RequiredFieldValidation-Vorgang wird protokolliert, wenn ein Speicherversuch unternommen wird, unabhängig davon, ob der Speichervorgang erfolgreich war oder nicht. Dieser Vorgang erklärt, warum jede geschäftserforderliche Spalte den Speichervorgang blockiert oder nicht blockiert.

Das folgende Bild ist ein Beispiel für diesen Vorgang. Die Nachricht erklärt, wie die detaillierten Berichte jeder erforderlichen Spalte gelesen werden. In diesem Beispiel ist die Spalte fax an ein Steuerelement gebunden, und das Steuerelement mit demselben Namen ist schreibgeschützt. Daher wird die erforderliche Spaltenvalidierung nicht ausgelöst.

Validierung von Spalten

Das folgende Bild ist ein weiteres Beispiel, in dem jobtitle eine geschäftlich erforderliche Spalte im Geschäftsprozessfluss ist, aber nicht im Formular, und die Spalte wird nicht geändert. Dadurch wird der Speichervorgang auch dann nicht blockiert, wenn es leer ist.

Validierung erforderlicher Spalte

Nachverfolgung

In den meisten Fällen ist das Verhalten beabsichtigt, und die RequiredFieldValidation-Operation erklärt, warum sich diese Spalte beim Speichern von Formularen auf eine bestimmte Weise verhält. Wenn die erforderliche Spaltenvalidierung für eine Spalte übersprungen wird, weil das Steuerelement deaktiviert oder ausgeblendet ist, wie im ersten Beispiel veranschaulicht, lesen Sie die Vorschläge zur Formularprüfung zur weiteren Analyse.

Dies kann zu einem anderen Problembehandlungsszenario führen, wie z. B. Warum ein Steuerelement deaktiviert/aktiviert oder sichtbar/ausgeblendet ist.

Einige Spalten werden im Zusammenführungsdialog nicht angezeigt

Der Zusammenführungsdialog verwendet die Standardhauptformulardefinition für die Tabelle und rendert selektiv die meisten, aber nicht alle Spalten im Dialogfeld. Dieser Vorgang der Formularüberprüfung erklärt, warum einige der Spalten im Zusammenführungsdialog nicht angezeigt werden, obwohl sie möglicherweise im Hauptformular angezeigt werden.

Vorgehensweise bei der Problembehandlung

Der folgende MergeDialog.load-Vorgang erklärt den Grund, warum einige Spalten nicht angezeigt werden.

In diesem Beispiel wird die Spalte parentcustomerid im Kontaktformular im Zusammenführungsdialog nicht unterstützt. Die Visitenkartenspalte wird nicht angezeigt, da der enthaltende Abschnitt in der XML-Definition des Hauptformulars ausgeblendet ist. Obwohl es möglich ist, den besitzenden Abschnitt im Hauptformular über die Client-API anzuzeigen, berücksichtigt der Zusammenführungsdialog die Formular-XML-Konfiguration, da Ereignishandler im Zusammenführungsdialog nicht unterstützt werden.

Dialog zum Zusammenführen laden

Hinweis

Können Sie uns Ihre Präferenzen für die Dokumentationssprache mitteilen? Nehmen Sie an einer kurzen Umfrage teil. (Beachten Sie, dass diese Umfrage auf Englisch ist.)

Die Umfrage dauert etwa sieben Minuten. Es werden keine personenbezogenen Daten erhoben. (Datenschutzbestimmungen).