Microsoft Dynamics CRM 2011 窗体编程的新模型:Xrm.Page
Microsoft Dynamics CRM 2011在form编程扩展方面引入了新的对象模型:Xrm.Page。这个新的对象模型提供了以下新的功能:
· 显示/隐藏UI组件。
· 支持form上对单个属性有多个控件。
· 支持一个实体有多个form。
· 操作form的导航项。
Microsoft Dynamics CRM 4.0 使用crmForm来提供对form上控件的访问。Microsoft Dynamics CRM 2011已经弃用了crmForm,但用crmForm编写的script仍然能够在Microsoft Dynamics CRM 2011中使用,使其具有向后的兼容性。使用crmForm无法实现上述新功能。
Xrm.Page提供了一个命名空间(namespace)的容器,其中包括三个对象:
context:提供了获取下述信息相关的方法。
· 组织
· 用户
· 在查询语句中传到form的参数
data: 提供操作实体数据的方法。
ui:提供获取UI信息的方法。
下面将给出三个实例,分别介绍三种对象的使用方法。
使用Xrm.Page.context
本实例将在Account form的OnLoad事件中调用jscript,来显示CRM Server地址,当前用户的GUID和组织名称。
1. 在default solution中,新建一个新的jscript类型webresource,取名为/Jscript/demo.js, 其文本内容填入(创建webresource详细过程可参考博客 Microsoft Dynamics CRM 2011 Web Resource简介 ):
function ShowContext() {
alert("The CRM Server URL is " + Xrm.Page.context.getServerUrl());
alert("The current user ID is " + Xrm.Page.context.getUserId());
alert("The Organization name is " + Xrm.Page.context.getOrgUniqueName());
}
2. 保存并发布该webresource。
3. 在default solution中点击Account->Forms,打开main form.
4. 点击Ribbon上的Form Properties。
5. 在Events页,Form Libraries中点击Add,添加刚才创建/Jscript/demo.js。
6. 在Event Handlers中,点击Add,Function中填入ShowContext。确保填写正确,因为系统在这里不会做验证。
7. 点击OK。保存并Publish All customizations.
8. 浏览到My Workspace。点击Account并打开一条记录,这是可以看到三个弹出框分别显示了CRM Server地址,User ID和组织名称。
使用Xrm.Page.ui
本实例将在Account form中Account Name的OnChange事件中调用jscript,来隐藏Main Phone并锁定Other phone。
1. 打开刚才创建的webresource /Jscript/demo.js,打开文本编辑器,在其中添加以下函数:
function UiDemo(){
var field1 = Xrm.Page.getControl("telephone1");
field1.setVisible(false);
var field2 = Xrm.Page.getControl("telephone2");
field2.setDisabled(true);
}
2. 保存并发布。
3. 在default solution中点击Account->Forms,打开main form.
4. 双击Account Name,点击Events页。
5. 在Form Libraries中点击Add,添加刚才创建/Jscript/demo.js。
6. 在Event Handlers中,点击Add,Function中填入UiDemo。
7. 点击OK。保存并Publish All customizations.
8. 浏览到My Workspace。点击Account并打开一条记录,更改Account Name后点击Form上其他位置以移开光标,这时可以发现Main Phone被隐藏,Other phone被锁定。
使用Xrm.Page.entity
本实例将在Account form的OnSave事件中调用jscript,来显示实体类型,该条记录的GUID,要传到服务器的包含所修改数据的xml,以及表示是否有数据被修改的Boolean型返回值。
1. 打开刚才创建的webresource /Jscript/demo.js,打开文本编辑器,在其中添加以下函数:
function EntityDemo(){
alert("The entity is " + Xrm.Page.data.entity.getEntityName());
alert("The GUID of the entity is " +Xrm.Page.data.entity.getId());
alert("These data change will be sent to server: " +Xrm.Page.data.entity.getDataXml());
alert("Any field has been modified? " +Xrm.Page.data.entity.getIsDirty());
}
2. 保存并发布。
3. 在default solution中点击Account->Forms,打开main form.
4. 点击Ribbon上的Form Properties。
5. 选择Event页,在Form Libraries中可以看到刚才所添加的/Jscript/demo.js。
6. 在Event Handlers中,选择Form-OnSave。点击Add,Function中填入EntityDemo。
7. 点击OK。保存并Publish All customizations.
8. 浏览到My Workspace。点击Account并打开一条记录,修改任意几个属性的值然后点Save,这时会弹出以下窗口。若不修改任何值,最后一项会显示false。
Xrm.Page的引入增强了form编程的功能并且使用起来十分灵活。本文对Xrm.Page做了简单的介绍,若希望了解更多关于客户端编程的知识,可参考SDK文档。
谢谢
Jackie Chen(陈攀)