Dynamics CRM 2011 编程系列(5):JS脚本编程之实战一

时间:2022-11-09 00:10:20

     在前面的章节中,我们学习了脚本编程中的onload,onsave,onchange事件。在这章节中,我们将学习一个小例子,让大家明白在日常的开发中应该怎么组合它们来完成开发获取。(下载本节的完整代码

     在制作这个小例子前我们首先得搭建实验环境:

     1.新建自定义实体“实战一”

     2.修改站点地图,在地图上添加选项卡“实战”

    

     完成上述步骤后,我们就可以开始进行后续操作了。“实战一”的具体需求如下:

    1.只有属性“当前状态”的值为“草稿”时,才可以修改记录。

    2.属性“最晚处理时间”的值必须大于或等于当前日期。

    3.如果在属性“当前状态”的值为“草稿”时保存了记录,那么将属性“当前状态”的值修改为“已提交”

 

    接下来我们就来看看能完成上面需求的解决方案吧:

    1.在实体的onload事件中判断属性“当前状态”的值是否为“草稿”,如果不为草稿则禁用表单上的所有字段

    2.在属性“最晚处理时间”的onchange事件里添加验证函数,判断当前选择的日期是否符合需求中的规则

    3.在实体的onsave事件中判断属性“当前状态”的值是否为“草稿”,如果为草稿则将属性“当前状体”的值换为“已提交”并进行保存处理

 

   现在我们就来具体实现这个解决方案吧,具体操作如下图所示:

Dynamics CRM 2011 编程系列(5):JS脚本编程之实战一

图 5-1-1 新建一条测试数据

 

Dynamics CRM 2011 编程系列(5):JS脚本编程之实战一

图 5-1-2 添加脚本资源文件,后续的javascript函数需要保持在这个文件中

 

Dynamics CRM 2011 编程系列(5):JS脚本编程之实战一

图 5-2-1 获取属性“最晚处理时间”的名称

 

Dynamics CRM 2011 编程系列(5):JS脚本编程之实战一

图 5-2-2 为属性“最晚处理时间”添加onchange事件

 

Dynamics CRM 2011 编程系列(5):JS脚本编程之实战一

图 5-2-3 编写onchange事件触发的脚本函数

 

Dynamics CRM 2011 编程系列(5):JS脚本编程之实战一

图 5-2-4 onchange事件执行后的效果

 

Dynamics CRM 2011 编程系列(5):JS脚本编程之实战一

图 5-3-1 为实体添加“onload”事件

 

Dynamics CRM 2011 编程系列(5):JS脚本编程之实战一

图 5-3-2

 

Dynamics CRM 2011 编程系列(5):JS脚本编程之实战一

图 5-3-3 “onload”事件执行后的效果

 

Dynamics CRM 2011 编程系列(5):JS脚本编程之实战一

图 5-4-1 为实体添加“onsave”事件

 

Dynamics CRM 2011 编程系列(5):JS脚本编程之实战一

图 5-4-2

 

Dynamics CRM 2011 编程系列(5):JS脚本编程之实战一

图 5-4-3 记录保存前

 

Dynamics CRM 2011 编程系列(5):JS脚本编程之实战一

图 5-4-4 记录保存后

 

 使用到的脚本:

属性“最晚处理时间”的onchange事件

//选择的日期是否大于或等于当前日期。
//是返回true
function CheckDeadLine()
{
var new_deadline=Xrm.Page.getControl("new_deadline").getAttribute().getValue();
var tmpDate=new Date();
var today=new Date(tmpDate.getYear(),tmpDate.getMonth(),tmpDate.getDate());

if(new_deadline<today)
{
Xrm.Page.getControl("new_deadline").getAttribute().setValue(null);
alert("最晚处理时间必须大于或等于当前日期");
}

}


 

 

实体的“onload”事件

function Project_Form_Onload()
{
var new_statuscode=Xrm.Page.getControl("new_statuscode").getAttribute().getValue();
if(new_statuscode != "1")//不为草稿
{
//迭代表达元素并将他们禁用
Xrm.Page.data.entity.attributes.forEach(function (item, index) {
item.controls.get(0).setDisabled(true);
});
}
}


 

实体的“onsave”事件

function Project_Form_Onsave()
{
var new_statuscode=Xrm.Page.getControl("new_statuscode").getAttribute().getValue();
if(new_statuscode == "1")
{
var new_statuscode=Xrm.Page.getControl("new_statuscode").getAttribute().setValue("2");//设置为已提价

}
}


 

 

小结:通过合理的组合使用“onchange”,“onload”,“onsave”事件可以完成大部的日常开发。并且你也可以在这些事件中使用Ajax技术,让程序执行能灵活。