Dynamics CRM 2011编程系列(51):FetchExpression(二)----JavaScript也疯狂

    本文来探索下在弱客户端下通过FetchExpression来访问Dynamics CRM 2011系统中的数据。在Dynamics CRM 2011系统中客户端居然用FetchExpression来获取系统中的数据,看上去是那么的复古(当前开发人员可以使用系统的REST端点)。但本文仅仅起到一个抛砖引玉的作用,Dynamics CRM 2011 系统存在大量的消息类(API)。通过这些消息类,我们可以完成对系统的各种操作(禁用记录,激活工作流等),详细内容各位看官可以参阅文章《Dynamics CRM 2011 消息类列表》。

 当然啦,如果我们在强客户端(C#,VB.Net)调用这些消息类。微软会为我们提供非常好的开发人员体验,SOAP报文的发送和接收完全被封装,一切都不需要自己干预。但如果我们要在弱客户端上调用这些消息类,那该如何是好呢?元芳你怎么看呢?

各位看官莫慌,莫慌,请参考文章《Dynamics CRM 2011编程系列(50):使用SOAPLogger抓取报文》,在这里我已经给出了解决方案了。

 好吧,现在一切准备都完毕了,让我们动起来吧。

1.运行SOAPLogger抓取报文,在Run方法中输入填入如下代码:

      FetchExpression fetchExp = new FetchExpression(@"
  
    
    
    
  
");
      slos.RetrieveMultiple(fetchExp);


 

 

2.在output.txt文件中获取截获的SOAP报文。

HTTP REQUEST
--------------------------------------------------
POST http://msstore-test-02.northamerica.corp.microsoft.com:5550/Example/XRMServices/2011/Organization.svc/web
Content-Type: text/xml; charset=utf-8
SOAPAction: http://schemas.microsoft.com/xrm/2011/Contracts/Services/IOrganizationService/RetrieveMultiple


  
    
      
        
  
    
    
    
  

      
    
  

--------------------------------------------------

 

3.当前系统中存在的数据

 

图1


4.在Contact实体的表单OnLoad事件中编写如下代码(用Ajax向服务器提交SOAP报文)

var queryurl = "http://Server Name/Organization Name/XRMServices/2011/Organization.svc/web";
var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
var fetchExp = [''
              , ''
              , ''
              , ''
              , ''
              , ''
              , '  '
              , '    '
              , '    '
              , '    '
              , '  '
              , ''
              , ']]>'
              , ''
              , ''
              , ''
              , ''
              , ''];


xmlhttp.Open("POST", queryurl, false);
xmlhttp.setRequestHeader("Accept", "application/xml, text/xml, */*");
xmlhttp.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
xmlhttp.setRequestHeader("SOAPAction", " http://schemas.microsoft.com/xrm/2011/Contracts/Services/IOrganizationService/RetrieveMultiple");

xmlhttp.Send(fetchExp.join('').toString());  

if (xmlhttp.readyState == 4) {  
   if (xmlhttp.status == 200) {
       alert(xmlhttp.responseText);
   } 
   } 
   else {  
  }  


5.系统返回如下报文

图2

 


  
    
      
        
          
            
              
                fullname
                Bob Li
              
              
                contactid
                441f1166-5c56-e211-af85-00155d1ce818
              
            
            
            
            441f1166-5c56-e211-af85-00155d1ce818
            contact
            
          
          
            
              
                fullname
                Clark Wang1
              
              
                contactid
                71e70aab-5c56-e211-af85-00155d1ce818
              
            
            
            
            71e70aab-5c56-e211-af85-00155d1ce818
            contact
            
          
          
            
              
                fullname
                Hitesh White
              
              
                contactid
                87cf252c-7463-e211-9a59-00155d1ce818
              
            
            
            
            87cf252c-7463-e211-9a59-00155d1ce818
            contact
            
          
          
            
              
                fullname
                Jim Green
              
              
                contactid
                396a665a-5c56-e211-af85-00155d1ce818
              
            
            
            
            396a665a-5c56-e211-af85-00155d1ce818
            contact
            
          
        
        contact
        -1
        false
        
        -1
        false
      
    
  


小结

  1. 在这里我没有处理服务器返回的SOAP报文,但官们可以根据自己的需要来处理它们。
  2. 在Dynamics CRM 2011 系统中,所有的消息类都能通过这样的方式在JavaScript函数中进行调用。
  3. 当然各位看官们可以结合第三方的JavaScript类库来提交SOAP报文。

 

你可能感兴趣的:(Dynamics,CRM,Microsoft,Dynamics,CRM,编程系列)