MSCRM javascript Fetchxml

Code

//Get Reference Unit Price

function getRefUnitPrice(oproductId)
{
  
var aryRet=new Array(3);
  
  
var discountNodes=getDiscountNodes(oproductId);
    
if (discountNodes!=null)
       {
            
var stdAmount;
             
var maxCnt=(discountNodes.length>2?2:discountNodes.length);
             
if (maxCnt>0)
             {
                
//std unit price 
                  aryRet[0]=new Object();
               
var lowquantity=discountNodes[0].selectSingleNode("./discounttypeid.lowquantity").text;
                aryRet[
0].caption=(parseInt(lowquantity)-1).toString()+"PCS";
                aryRet[
0].value=parseFloat(discountNodes[0].selectSingleNode("./amount").text);
                stdAmount
=parseFloat(aryRet[0].value);
                 aryRet[
0].value=aryRet[0].value.toFixed(2);
                setControl(
"esp_ref_perunitprice1",aryRet[0]);

             }
                          
           
for ( var i = 0; i < maxCnt; i++ ) 
           {
                  
                 
var discount;
                  
if (discountNodes[i].selectSingleNode("./discounttypeid.isamounttype").text=="1")
                  {
                    discount
=discountNodes[i].selectSingleNode("./discounttypeid.amount").text;
                  aryRet[i
+1]=new Object();
                    aryRet[i
+1].caption=discountNodes[i].selectSingleNode("./discounttypeid.lowquantity").text;
                     aryRet[i
+1].caption+="PCS~";
                     aryRet[i
+1].caption+=discountNodes[i].selectSingleNode("./discounttypeid.highquantity").text;
                     aryRet[i
+1].caption+="PCS"
                    aryRet[i
+1].value=stdAmount-parseFloat(discount);
                    aryRet[i
+1].value= aryRet[i+1].value.toFixed(2);
                    setControl(
"esp_ref_perunitprice"+(i+2).toString(),aryRet[i+1]);
                   }
                  
else
                 {
                  aryRet[i
+1]=new Object();
                     discount
=discountNodes[i].selectSingleNode("./discounttypeid.percentage").text;
                    aryRet[i
+1].caption=discountNodes[i].selectSingleNode("./discounttypeid.lowquantity").text;
                     aryRet[i
+1].caption+="PCS~";
                     aryRet[i
+1].caption+=discountNodes[i].selectSingleNode("./discounttypeid.highquantity").text;
                     aryRet[i
+1].caption+="PCS";
                    aryRet[i
+1].value=stdAmount* (1-parseFloat(discount)/100);
                    aryRet[i+1].value.toFixed(2);
                    setControl(
"esp_ref_perunitprice"+(i+2).toString(),aryRet[i+1]);

                  }
                  
           }
       }

}
//Han Jianxing 
//
set control caption and text for Text Control
//
fieldValue.value =Text
//
fieldValue.caption=Display Name
function setControl(fieldName, fieldValue)
{
   
var fieldObjData = crmForm.all[fieldName];
   
var fieldObjTcControl = document.getElementById( fieldName + "_c" );
    fieldObjData.innerText
=fieldValue.value;
    fieldObjTcControl.innerText
=fieldValue.caption;

}

function getDiscountNodes(oproductId)
{
var  fetchXml=
[
"<fetch mapping='logical'>",
    
"<entity name='productpricelevel'>",
        
"<attribute name='amount'/>",
        
"<attribute name='transactioncurrencyid'/>",
        
"<filter type='and'>",
            
"<condition attribute='pricelevelid' operator='eq' value='{9439FF4D-8613-DE11-B063-001EC9B6EAFD}'/>",
            
"<condition attribute='productid' operator='eq' value='"+oproductId+"'/>",
        
"</filter>",
        
"<link-entity name='discount' from='discounttypeid' to='discounttypeid' link-type='outer'>",
            
"<attribute name='amount'/>",
            
"<attribute name='highquantity'/>",
            
"<attribute name='isamounttype'/>",
            
"<attribute name='lowquantity'/>",
            
"<attribute name='percentage'/>",
            
"<attribute name='transactioncurrencyid'/>",
            
"<order attribute='lowquantity'/>",
        
"</link-entity>",
    
"</entity>",
"</fetch>"
].join(
"");

  fetchXml
=fetchXml.replace(/</g,'&lt;')
  fetchXml
=fetchXml.replace(/>/g,'&gt;')

  
var xml = 
  [ 
 
"<?xml version='1.0' encoding='utf-8'?>",
  
"<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" ",
  "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" ",
  "xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">", 
  GenerateAuthenticationHeader(),
   
"<soap:Body>"
  
"    <Fetch xmlns=\"http://schemas.microsoft.com/crm/2007/WebServices\">" ,
   " <fetchXml>",
    fetchXml,
      
" </fetchXml>",
    
"    </Fetch>",
  
"</soap:Body>",
  
"</soap:Envelope>"
].join(
"");
  
var resultXml = executeSoapRequest("Fetch",xml);
  
var node=resultXml.selectSingleNode("//error");
  
if (node!=null)
  {  
      alert(node.xml);
  }
 
else
  {
     
var fetchResult= resultXml.selectSingleNode("//FetchResult");
     
if (fetchResult!=null)
      {
           fetchResult
=fetchResult.text;
     
var xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
     xmlDoc.async
=false;
     xmlDoc.loadXML(fetchResult);
      
return xmlDoc.selectNodes("//result");

     }
  
  }
 
return null;
}

// Helper method to execute a SOAP request
function executeSoapRequest(action, xml)
{
  
var actionUrl = "http://schemas.microsoft.com/crm/2007/WebServices/";
  actionUrl 
+= action;
  
  
var xmlHttpRequest = new ActiveXObject("Msxml2.XMLHTTP");
  xmlHttpRequest.Open(
"POST""/mscrmservices/2007/CrmService.asmx"false);
  xmlHttpRequest.setRequestHeader(
"SOAPAction",actionUrl);
  xmlHttpRequest.setRequestHeader(
"Content-Type""text/xml; charset=utf-8");
  xmlHttpRequest.setRequestHeader(
"Content-Length", xml.length);
  xmlHttpRequest.send(xml);

  
var resultXml = xmlHttpRequest.responseXML;
  
return resultXml;
}

// Helper method to return a single node value from XML
function getNodeValue(tree, el)
{
  
var retVal = null;
  
var e = null;
  e 
= tree.getElementsByTagName(el);

  
if (e != null && e[0!= null) {
    retVal 
= e[0].firstChild.nodeValue;
  }
  
return retVal;
}

// Helper method to return a multiple node value from XML
function getMultipleNodeValues(tree, el)
{
  
var retVal = new Array();
  
var e = null;
  e 
= tree.getElementsByTagName(el);

  
for(i = 0; i < e.length; i++) {
    retVal[i] 
= e[i].firstChild.nodeValue;
  }

  
return retVal;
}
原文地址:https://www.cnblogs.com/janmson/p/1513245.html