Showing posts with label fetch. Show all posts
Showing posts with label fetch. Show all posts

Monday, November 14, 2011

Status Duration


if you're statistics of your opportunities that counting status duration can be very useful for you.
Status Duration - this is how many days opportunity is the current status.


Add new field on opportunity form "new_statusduration" to set Status Duration value.

function getDuration() {
 var thetime = new Date();
 var oneday = 1000 * 60 * 60 * 24;
 var currentMonth = thetime.getMonth() + 1;
 var currentYear = thetime.getFullYear();
 var currentDay = thetime.getDate();
 var currentdate = currentMonth + "/" + currentDay + "/" + currentYear;
 var newdate = new Date(currentdate);



 if (Xrm.Page.getAttribute("opportunityratingcode").getValue() == null) {
  Xrm.Page.getAttribute("new_statusduration").setValue(null);
 }
 else {
  var statusduration = "";
  var xml = "";
  xml += '';
  xml += '';
  xml += '';
  xml += '';
  xml += '';
  xml += '';
  xml += '';
  xml += ''
  xml += '';
  xml += '';
  xml += '';



  var doc = Fetch(xml);
  var nodes = doc.selectNodes("//resultset/result/createdon");
  if (nodes[0] != null) {
   var statusnode = nodes[0].getAttribute("date");
   var statusdate = new Date(statusnode);
   var duration = Math.round((newdate - statusdate) / oneday);
   if (duration < 1) {
    statusduration = duration + " d";
   }
   else {
    statusduration = Math.floor(duration / 30) + " m " + (duration % 30) + " d";
   }
   Xrm.Page.getAttribute("new_statusduration").setSubmitMode("always");
   Xrm.Page.getAttribute("new_statusduration").setValue(statusduration);
  }
 }
}
To use this script you need "Fetch" function
function Fetch(xml) {
 var Xml = "";
 Xml += GenerateAuthenticationHeader();
 Xml += "";
 Xml += "";
 Xml += "";
 Xml += CrmEncodeDecode.CrmXmlEncode(xml); // Microsoft _HtmlEncode function
 Xml += "";
 Xml += "";
 Xml += "";
 Xml += "";
 var XmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); // Microsot CreateXmlHttp function
 XmlHttp.open("POST", "/mscrmservices/2007/crmservice.asmx", false); //Sync Request
 XmlHttp.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
 XmlHttp.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/crm/2007/WebServices/Fetch");
 XmlHttp.send(Xml);
 var XmlDoc = new ActiveXObject("Msxml2.DOMDocument");
 XmlDoc.async = false;
 XmlDoc.resolveExternals = false;
 XmlDoc.loadXML(XmlHttp.responseXML.text);
 return XmlDoc;
}
Result:
Don't forget enable auditing for Opportunity entity!