本文提供了使用客户端 API navigateTo 方法导航到模型驱动应用中的生成页面的示例。 了解如何在内联或对话框中打开生成页面,以及如何传递输入参数,例如记录 ID 或自定义数据。
注释
此方法仅在统一接口上受支持。
查找页面 ID
以下示例中的每个示例都需要目标生成页的 ID。 若要查找页面 ID,请执行以下操作:
- 在应用设计器中打开包含生成页面的模型驱动应用。
- 在页面列表中选择生成页。
- 在“属性”窗格中,复制 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
}
);
使用记录上下文内联打开生成页面
传递一个 recordId 和 entityName 到生成页面,以便页面可以加载和显示特定记录。 必须设置目标生成页 才能接受这些参数。
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
}
);
以居中对话框形式打开生成页面
在居中对话框中打开生成页,同时传递记录上下文和自定义数据。 根据需要调整 width 和 height。
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 居中对话框或侧边对话框。
使用客户端 API 从生成性页面内进行导航
在生成页组件内部导航时,使用 (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 导航到生成页面(仅限外部调用方)
可以通过构造以下结构的 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
必须 设置目标生成页才能接受这些参数。