在Model-Driven App中使用自定义页面(Custom Page)

Posted luoyong0201

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Model-Driven App中使用自定义页面(Custom Page)相关的知识,希望对你有一定的参考价值。

我是微软Dynamics 365 & Power Platform方面的工程师/顾问罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面的微软最有价值专家(Microsoft MVP),这是我的第478篇原创文章,写于2022年8月24日。

这个文章不是以前我写的博文 ​​嵌入Canvas App到Model-Driven App中​​ 那种,而且以前嵌入的这种也不再推荐使用了。

今天要介绍的内容请参考官方文档:

为了说明,我假想个场景,就是在一个实体的表单上增加一个按钮,点击打开一个custom page,这个page展示文件字段的图片(假设上传的文件是图片)。

添加Custom Page的方法有多种,我使用常见的这种,登录 ​​https://make.powerapps.com/​​ ,打开自己建立的解决方案,点击 New > App > Page.

在Model-Driven


打开的界面如下,这个和Canvas App的开发界面非常相似,就是个简版的Power Apps Studio。从官方文档也可以知道,目前只支持独立Canvas App程序支持的部分控件。

在Model-Driven


我这里插入一个Media分组下的 Image控件,将其 X, Y属性都设置为0, Width设置为Parent.Width, Height 设置为Parent.Height 。

在Model-Driven


然后点击左侧的 Data图标,添加数据源,点击Add data将用到的表添加进来。

在Model-Driven



我这里设置 App对象 的OnStart 事件代码如下:

Set(
RecordItem,
If(
IsBlank(Param("recordId")),
First(Test Entities),
LookUp(
Test Entities,
Test Entity = GUID(Param("recordId"))
)
)
)

在Model-Driven


然后我将前面插入到屏幕中的Image的Image属性设置为 "​https://org51fb1eac.crm5.dynamics.com/api/data/v9.2/ly_testentities​​(" & Text(RecordItem.Test Entity) & ")/ly_file/$value" 。可以看到我这个url的前面部分是写死的,可以将这个作为环境变量存储起来,这样就灵活些,如何做请参考我的博文 ​​Canvas App中获取存储格式为JSON的环境变量的值并解析成集合​​ ,我这里为了简化就不做这么复杂了。

在Model-Driven


点击Save按钮,输入个好名字,然后保存。

在Model-Driven


最好发布下:

在Model-Driven


然后在解决方案中就会新增一条Type为Page的记录,复制好Name,后面代码要用。

在Model-Driven


当前的这个Model-Driven App要能使用的话还需要添加进来,编辑这个App,点击  Add page.

在Model-Driven


选择 Custom 后点击 Next 按钮。

在Model-Driven


选择 Use an existing custom page,然后选择要添加的custom page,因为这个page我不需要显示在导航栏,所以取消掉 Show in navigation 这个前面的复选框,然后点击 Add 按钮。

在Model-Driven


然后我还需要保存并发布这个App。以后若是修改了Custom Page,除了这个Custom Page要发布外,用到这个Custom Page的Model-driven App也要发布。

在Model-Driven


为了测试效果,我在表单界面新增一个查看图片的按钮。

在Model-Driven

执行的代码如下:注意代码传递recordId的时候要去掉前后的 和 字符,否则custom page接收到的这个参数的值为空。

"use strict";
var LuoYong = window.LuoYong || ;
LuoYong.TestEntity = LuoYong.TestEntity || ;
(function ()

this.ShowCustomPageAction = function (primaryControl)
try
var formContext = primaryControl;
var pageInput =
pageType: "custom",
name: "ly_luoyongdemocustompageapp_b9378",
entityName: "ly_testentity",
recordId: formContext.data.entity.getId().replace(, ).replace(, ),
;
var navigationOptions =
target: 2,
position: 1,
width: value: 50, unit: "%" ,
title: "查看图片"
;
Xrm.Navigation.navigateTo(pageInput, navigationOptions)
.then(
function ()
// Called when page opens

).catch(
function (error)
// Handle error

);

catch (ex)
Xrm.Navigation.openErrorDialog( message: ex.message );

;
).call(LuoYong.TestEntity);


点击后看到的效果如下:

在Model-Driven

以上是关于在Model-Driven App中使用自定义页面(Custom Page)的主要内容,如果未能解决你的问题,请参考以下文章

如何将 create-react-app 使用的错误页面合并到自定义项目中?

Next.js - 页面没有让 GetServerSideProps 进入页面组件道具(使用自定义 _app.js)

Django实现自定义template页面并在admin site的app模块中加入自定义跳转链接

fusion app自定义事件源码介绍(上)

在 Google App Engine 上放置自定义错误页面的位置

UINavigationController 自定义转场动画(模仿淘宝App跳转)