Zu einer benutzerdefinierten Seite mithilfe Client-API navigieren

Dieser Artikel enthält Beispiele für die Navigation von einer modellgesteuerten App-Seite mithilfe der Client API zu einer benutzerdefinierten Seite.

In diesem Artikel werden die Schritte zum Verwenden der Client-API zum Öffnen einer benutzerdefinierten Seite als ganze Seite, als Dialogfeld oder als Bereich beschrieben. Es bietet Beispiele für Benutzerdefiniert als ein pageType-Wert in navigateTo (Client-API-Referenz).

Wichtig

Benutzerdefinierte Seiten sind eine neue Funktion mit erheblichen Produktänderungen und weisen derzeit eine Reihe bekannter Einschränkungen auf, die in Bekannte Probleme mit benutzerdefinierten Seiten beschrieben werden.

Finden des logischen Namens

Jedes der folgenden Client-API-Beispiele verwendet den logischen Namen der benutzerdefinierten Seite als erforderlichen Parameter. Der logische Name ist der Name-Wert der Seite im Lösungs-Explorer.

Logischen Namen der Seite suchen.

Als Inline-Ganzseite ohne Kontext öffnen

Rufen Sie in einem modellgesteuerten App-Client-API-Ereignishandler den folgenden Code auf und aktualisieren Sie den Parameter name als logischen Namen der Seite.

// Inline Page
var pageInput = {
    pageType: "custom",
    name: "<logical name of the custom page>",
};
var navigationOptions = {
    target: 1
};
Xrm.Navigation.navigateTo(pageInput, navigationOptions)
    .then(
        function () {
            // Called when page opens
        }
    ).catch(
        function (error) {
            // Handle error
        }
    );

Als Inline-Ganzseite mit einem Datensatzkontext öffnen

Dieses Beispiel verwendet den recordId-Parameter innerhalb der Funktion NavigierenZu, um die benutzerdefinierte Seite mit dem zu verwendenden Datensatz bereitzustellen.

// Inline Page
var pageInput = {
    pageType: "custom",
    name: "<logical name of the custom page>",
    entityName: "<logical name of the table>",
    recordId: "<record id>",
};
var navigationOptions = {
    target: 1
};
Xrm.Navigation.navigateTo(pageInput, navigationOptions)
    .then(
        function () {
            // Called when page opens
        }
    ).catch(
        function (error) {
            // Handle error
        }
    );

Die Param-Funktion innerhalb der benutzerdefinierten Seite ruft den Wert ab und verwendet die Lookup-Funktion, um den Datensatz abzurufen.

App.OnStart=Set(RecordItem, 
    If(IsBlank(Param("recordId")),
        First(<entity>),
        LookUp(<entity>, <entityIdField> = GUID(Param("recordId"))))
    )

Als zentrierter Dialog öffnen

Rufen Sie in einem modellgesteuerten App-Client-API-Ereignishandler den folgenden Code auf und aktualisieren Sie den Parameter name als logischen Namen der benutzerdefinierten Seite. Dieser Modus unterstützt die Größenparameter ähnlich wie die Hauptformulardialoge.

// Centered Dialog
var pageInput = {
    pageType: "custom",
    name: "<logical custom page name>",
};
var navigationOptions = {
    target: 2, 
    position: 1,
    width: {value: 50, unit:"%"},
    title: "<dialog title>"
};
Xrm.Navigation.navigateTo(pageInput, navigationOptions)
    .then(
        function () {
            // Called when the dialog closes
        }
    ).catch(
        function (error) {
            // Handle error
        }
    );

Als Seitendialog öffnen

Rufen Sie in einem modellgesteuerten App-Client-API-Ereignishandler den folgenden Code auf und aktualisieren Sie den Parameter name als logischen Namen der benutzerdefinierten Seite.

// Side Dialog
var pageInput = {
    pageType: "custom",
    name: "<logical page name>",
};
var navigationOptions = {
    target: 2, 
    position: 2,
    width: {value: 500, unit: "px"},
    title: "<dialog title>"
};
Xrm.Navigation.navigateTo(pageInput, navigationOptions)
    .then(
        function () {
            // Called when the dialog closes
        }
    ).catch(
        function (error) {
            // Handle error
        }
    );

Dieses Beispiel verwendet den recordId-Parameter innerhalb der Funktion navigateTo, um die benutzerdefinierte Seite mit dem zu verwendenden Datensatz bereitzustellen. Die Param-Funktion innerhalb der benutzerdefinierten Seite ruft den Wert ab und verwendet die Lookup-Funktion, um den Datensatz abzurufen.

Ein vollständigeres Beispiel dafür finden Sie unter Das standardmäßige Öffnungsverhalten von Datenzeilen in einem entitätsgebundenen Raster überschreiben.

  1. Erstellen Sie eine Webressource vom Typ JScript und aktualisieren Sie den Parameter name als logischer Seitenname. Fügen Sie der Webressource den folgenden Code hinzu.

    function run(selectedItems)
    {
        let selectedItem = selectedItems[0];
    
        if (selectedItem) {     
            let pageInput = {
                pageType: "custom",
                name: "<logical page name>",
                entityName: selectedItem.TypeName,
                recordId: selectedItem.Id,
            };
            let navigationOptions = {
                target: 1
            };
            Xrm.Navigation.navigateTo(pageInput, navigationOptions)
                .then(
                    function () {
                        // Handle success
                    }
                ).catch(
                    function (error) {
                        // Handle error
                    }
                );
        }
    }
    
  2. Passen Sie das Tabellenband CommandDefinition für OpenRecordItem an, um die obige Funktion aufzurufen und CrmParameter mit dem Wert SelectedControlSelectedItemReferences einzuschließen.

        <CommandDefinition Id="Mscrm.OpenRecordItem">
            <Actions>
                <JavaScriptFunction FunctionName="run" Library="$webresource:cr62c_OpenCustomPage">
                    <CrmParameter Value="SelectedControlSelectedItemReferences" />
                </JavaScriptFunction>
            </Actions>
        </CommandDefinition>
    
  3. Überschreiben Sie auf der benutzerdefinierten Seite der App die Eigenschaft OnStart, damit diese die Funktion Param zum Abrufen von recordId und dem Lookup-Datensatz verwendet.

    App.OnStart=Set(RecordItem, 
        If(IsBlank(Param("recordId")),
            First(<entity>),
            LookUp(<entity>, <entityIdField> = GUID(Param("recordId"))))
        )
    

    Hinweis

    Nach dem Ändern der OnStart-Eigenschaft müssen Sie OnStart aus dem App-Kontextmenü ausführen. Diese Funktion funktioniert nur einmal innerhalb einer Sitzung.

  4. Dann kann die benutzerdefinierte Seite den RecordItem-Parameter als Datensatz verwenden. Unten finden Sie ein Beispiel für die Verwendung von EditForm.

    EditForm.Datasource=<datasource name>
    EditForm.Item=RecordItem
    

Öffnen aus einem ausgewählten Datensatz im bearbeitbaren Raster als zentrierten Dialog mit Datensatz-ID

Das bearbeitbare Raster kann zum Auslösen des OnRecordSelect-Ereignisses für Szenarien verwendet werden, in denen Sie eine Aktion ausführen möchten, wenn ein bestimmter Datensatz in einer Ansicht ausgewählt wird. Dieses Beispiel verwendet den recordId-Parameter innerhalb der Funktion navigateTo, um die benutzerdefinierte Seite mit dem zu verwendenden Datensatz bereitzustellen. Die Datensatz-ID wird mithilfe der getId-Methode im GridEntity-Objekt abgerufen. Die Param-Funktion innerhalb der benutzerdefinierten Seite ruft den Wert ab und verwendet die Lookup-Funktion, um den Datensatz abzurufen.

  1. Steuerelement Bearbeitbares Raster aktivieren in der Tabelle.

  2. Erstellen Sie eine Webressource vom Typ JScript und aktualisieren Sie den Parameter name als logischer Seitenname. Fügen Sie der Webressource den folgenden Code hinzu.

    function RunOnSelected(executionContext) {
    // Retrieves the record selected in the editable grid
    var selectedRecord = executionContext.getFormContext().data.entity;
    var Id = selectedRecord.getId().replace(/[{}]/g, ""); 
    
    // Centered Dialog
    var pageInput = {
        pageType: "custom",
        name: "<logical page name>",
        recordId: Id,
    };
    var navigationOptions = {
        target: 2,
        position: 1,
        width: { value: 50, unit: "%" },
        title: "<dialog title>"
    };
    Xrm.Navigation.navigateTo(pageInput, navigationOptions)
        .then(
            function () {
                // Called when the dialog closes
            }
        ).catch(
            function (error) {
                // Handle error
            }
        );
     }
    
  3. Überschreiben Sie auf der benutzerdefinierten Seite der App die Eigenschaft OnStart, damit diese die Funktion Param zum Abrufen von recordId und dem Lookup-Datensatz verwendet.

    App.OnStart=Set(RecordItem, 
        If(IsBlank(Param("recordId")),
            First(<entity>),
            LookUp(<entity>, <entityIdField> = GUID(Param("recordId"))))
        )
    

    Hinweis

    Nach dem Ändern der OnStart-Eigenschaft müssen Sie OnStart aus dem App-Kontextmenü ausführen. Diese Funktion funktioniert nur einmal innerhalb einer Sitzung.

  4. Dann kann die benutzerdefinierte Seite den RecordItem-Parameter als Datensatz verwenden. Im Folgenden erfahren Sie, wie Sie es in einem EditForm verwenden.

    EditForm.Datasource=<datasource name>
    EditForm.Item=RecordItem
    

Übersicht über die benutzerdefinierte Seite der modellgesteuerten App
Eine benutzerdefinierte Seite zu ihrer modellgesteuerten App hinzufügen
navigateTo (Client-API-Referenz)