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(陈攀)