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 o = event.srcElement;
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中加入。

  

 

Code
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加入相应代码。

  

Code
        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 
= "";
        }
posted @ 2008-12-30 18:48  AlexLiu  阅读(1794)  评论(2编辑  收藏  举报