通过


使用客户端 API 在生成页面之间导航

本文提供了使用客户端 API navigateTo 方法导航到模型驱动应用中的生成页面的示例。 了解如何在内联或对话框中打开生成页面,以及如何传递输入参数,例如记录 ID 或自定义数据。

注释

此方法仅在统一接口上受支持。

查找页面 ID

以下示例中的每个示例都需要目标生成页的 ID。 若要查找页面 ID,请执行以下操作:

  1. 在应用设计器中打开包含生成页面的模型驱动应用。
  2. 在页面列表中选择生成页。
  3. 在“属性”窗格中,复制 Generative 页面 字段中显示的 GUID。

在无参数时以内联方式打开生成页

以没有输入参数的全页内联视图的形式打开生成页。

var pageInput = {
    pageType: "generative",
    pageId: "<genPageID>"
};
var navigationOptions = {
    target: 1
};
Xrm.Navigation.navigateTo(pageInput, navigationOptions)
    .then(
        function () {
            // Called when page opens
        }
    ).catch(
        function (error) {
            // Handle error
        }
    );

使用记录上下文内联打开生成页面

传递一个 recordIdentityName 到生成页面,以便页面可以加载和显示特定记录。 必须设置目标生成页 才能接受这些参数

var pageInput = {
    pageType: "generative",
    pageId: "<genPageID>",
    entityName: "account",
    recordId: "00aa00aa-bb11-cc22-dd33-44ee44ee44ee" // replace with actual record GUID
};
var navigationOptions = {
    target: 1
};
Xrm.Navigation.navigateTo(pageInput, navigationOptions)
    .then(
        function () {
            // Called when page opens
        }
    ).catch(
        function (error) {
            // Handle error
        }
    );

使用自定义数据内联打开生成页

data 包含自定义键值对的对象传递给生成页。 必须设置目标生成页 才能接受这些参数

var pageInput = {
    pageType: "generative",
    pageId: "<genPageID>",
    data: { status: "active", category: "premium" }
};
var navigationOptions = {
    target: 1
};
Xrm.Navigation.navigateTo(pageInput, navigationOptions)
    .then(
        function () {
            // Called when page opens
        }
    ).catch(
        function (error) {
            // Handle error
        }
    );

以居中对话框形式打开生成页面

在居中对话框中打开生成页,同时传递记录上下文和自定义数据。 根据需要调整 widthheight

var pageInput = {
    pageType: "generative",
    pageId: "<genPageID>",
    entityName: "account",
    recordId: "00aa00aa-bb11-cc22-dd33-44ee44ee44ee", // replace with actual record GUID
    data: { view: "summary" }
};
var navigationOptions = {
    target: 2,
    position: 1,
    width: { value: 70, unit: "%" },
    height: { value: 80, unit: "%" },
    title: "<dialog title>"
};
Xrm.Navigation.navigateTo(pageInput, navigationOptions)
    .then(
        function () {
            // Called when the dialog closes
        }
    ).catch(
        function (error) {
            // Handle error
        }
    );

以侧对话框的形式打开生成页面

使用 position: 2 以侧对话的形式打开生成页。

var pageInput = {
    pageType: "generative",
    pageId: "<genPageID>"
};
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
        }
    );

不支持:在侧窗格中打开生成页面

重要

目前不支持使用 Xrm.App.sidePanes.createPane() 打开生成页。

// Not supported — page content doesn't render
const pane = await Xrm.App.sidePanes.createPane({
    title: "My Generative Page",
    paneId: "GenPage",
    canClose: false,
    width: 400
});
pane.navigate({ pageType: "generative", pageId: "<genPageID>" });

请改用 Xrm.Navigation.navigateTo 居中对话框或侧边对话框。

在生成页组件内部导航时,使用 (window as any).Xrm 访问 Xrm 对象,因为 React 组件范围不提供对 Xrm 对象的直接访问。

const xrm = (window as any).Xrm;
xrm.Navigation.navigateTo({
    pageType: "generative",
    pageId: targetPageId,
    entityName: "account",
    recordId: selectedRecordId,
    data: { view: "summary" }
});

注释

在模型驱动应用中导航时,请避免构造原始 URL 或操作 window.location

可以通过构造以下结构的 URL 导航到生成式页面:

https://<your-org>.crm.dynamics.com/main.aspx?appid={app-id}&pagetype=genux&id={page-id}&recordid={recordId}&entityname={entityName}&data={encoded-json}

必须将 data 参数进行 URL 编码以表示 JSON。 例如,若要传递自定义筛选器对象,

https://<your-org>.crm.dynamics.com/main.aspx?appid={app-id}&pagetype=genux&id={page-id}&data=%7B%22status%22%3A%22active%22%7D

必须 设置目标生成页才能接受这些参数