MSCRM------JS代码操作CRM中的FORM
这两天一直学习了解CRM这个系统。并且用简单的JS代码,操作FORM表单,达到一种约束的目的。总的来说对于FORM部分用户的扩展还是比较容易的。
- CRM概念
CRM(Customer Relationship Management,客户关系管理),这个概念最初由Gartner Group提出来,伴随着因特网和电子商务的大潮进入中国。对CRM的定义,目前还没有一个统一的表述。但就其功能来看,CRM是通过采用信息技术,使企业市场营销、销售管理、客户服务和支持等经营流程信息化,实现客户资源有效利用的管理软件系统。其核心思想是以“客户为中心”,提高客户满意度,改善客户关系,从而提高企业的竞争力。
- CRM修改的需求(谨以本文为例)
需求一:基于CRM数据成型了之后,如何的进行数据之间的约束呢?举一个简单的例子,Tpye是一个Entity中的一个FORM的属性之一。通俗的讲,我的这个Type是一个下拉列表,如果选择其中的一个若是"Stock"的话,另一个属性比如叫做"Booking"在这个需求之下,就会变得不能让用户所使用。若是选择其他的Type类型的话,那么还是可以使用的。
需求二:再说一个例子就是,还是Type类型。如果是"Scheduled"的那么另外的一个属性若是"internal"的话,那么这个属性的值为空,我们就不能让用户保存成功。
需求三:在每一个页面加载的时候,要显示出来加载的Form的类型是什么。
- CRM FORM用户扩展的一点介绍
几种Event类型,一共有三种:
onLoad Event
onLoad event会在form加载之后执行。使用这个事件用来给user预处理一些数据。一些其它的使用有:
- 基于之改变的计算。
- 提示用户所处的形式。
- 禁用一些不能被更新的区域。
- 在form中基于数据的IFRAME设置一个目标。
onSave Event
OnSave 事件和标准HTML中的OnSubmit方法是不一样。这个事件在用户点击了 Save or Save and Close 按钮的时候被触发。或者用户的某种行为导致的form的保存就好像Save方法一样。这个事件经常的发生,即便是数据在form中并没有改变。
onChange Event
onChange 事件在任何一个区域都是有效的. OnChange 事件触发需要两个条件为真才行:
- 这个区域的数据必须发生了改变。
- 这个区域必须失去关注。(理解为光标离开关注的位置)
在这个事件触发了之后,数据域将会重新的验证有效性。这就意味着使用这个不可能输入一个无效的数据。
onChange 事件的例子:
- 当一个改变了值的区域之后显示其他区域的变化。
- 改变一个区域的格式,比如说电话号码。
- 实现动态的picklists也就是下拉列表。
以上是一些SDK中的内容经过我的整理的重新加工的。总结一下无非是有三种,说的一种很明确了。这三个事件的触发是也是很明了的。
onChange 事件:数据改变了之后,光标挪走了就触发了。
onSave 事件:用户企图保存修改触发。
onLoad 事件:Form在加载的时候触发。
- JS解决方案和代码
以上的分析学习之后,我们可以得出那三个需求的解决方案了。
需求一解决方案:在onChange加入JS代码。
我们可以看到,CRM为我们提供好了OnChange()方法,直接在Event Detail 属性中,对事件有效打上钩钩,之后在里面写入想写入的代码就好了。当然具体的还是和标准的JS是有一定的区别的。详细操作还是要在SDK中好好的学习的。
var Resource = crmForm.all.bookableresourceid;
switch(o.SelectedText)
{
case "Stock":
Resource.Disabled = true;
Resource.DataValue = "";
break;
default:
Resource.Disabled = false;
Resource.DataValue = Resource.DefaultValue;
break;
}
alert(o.SelectedText);
需求二解决方案:在onSave中加入。
var interval = crmForm.all.interval;
var duration = crmForm.all.duration;
var type = crmForm.all.type;
var CRM_FORM_SAVE_MODE_SAVE = 1;
var CRM_FORM_SAVE_MODE_SAVEANDCLOSE = 2;
// Validate only if the user clicked "Save".
switch (event.Mode)
{
case CRM_FORM_SAVE_MODE_SAVE:
case CRM_FORM_SAVE_MODE_SAVEANDCLOSE:
if( type.SelectedText == "Scheduled")
{
if (interval.DataValue == null || duration.DataValue == null )
{
// Tell the user what is wrong.
alert("interval or duration can not be empty");
// Give the control focus.
if(duration.DataValue == null)
duration.SetFocus();
else
interval.SetFocus();
// Cancel the save operation.
event.returnValue = false;
return false;
}
}
break;
}
需求三解决方案:在onLoad加入相应代码。
var CRM_FORM_TYPE_CREATE = 1;
var CRM_FORM_TYPE_UPDATE = 2;
var readonly = 3;
var disable = 4;
switch(crmForm.FormType)
{
case CRM_FORM_TYPE_CREATE:
alert("this is a create form, the id is" + crmForm.ObjectId);
break;
case CRM_FORM_TYPE_UPDATE:
alert("this is an update form, the ID is" + crmForm.ObjectId);
break;
case readonly:
alert("this is a readonly form, the id is" + crmForm.ObjectId);
break;
case disable:
alert("this is a disable form ,the id is" + crmForm.ObjectId);
break;
default:
alert("this is a default message");
break;
}
var Resource = crmForm.all.bookableresourceid;
var type = crmForm.all.type;
if(type.SelectedText =="Stock")
{
Resource.Disabled = true;
Resource.DataValue = "";
}
作者:Alexliu(alex dotNet Learning)
出处:http://alexliu.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,转载请注明。并且保留文章链接。否则保留追究法律责任的权利。