Monday, October 31, 2011

Retrieve a List Of Provisioned Languages in Microsoft Dynamics CRM 2011 Using .NET or Jscript

This illustration shows how to retrieve a list of provisioned languages in Microsoft Dynamics CRM 2011 with RetrieveProvisionedLanguagesRequest.   This example will be given in Jscript (SOAP) and in C# (.NET).
    Ok, here is what the code looks like!
    First in C#:

    RetrieveProvisionedLanguagesRequest req = new RetrieveProvisionedLanguagesRequest();
    RetrieveProvisionedLanguagesResponse resp = (RetrieveProvisionedLanguagesResponse)slos.Execute(req);
    
    

    If you need help instantiating a service object in .NET within a plugin check out this post:
    http://mileyja.blogspot.com/2011/04/instantiating-service-object-within.html

    Now here is the Jscript nicely formatted by the CRM 2011 SOAP formatter. Available at: http://crm2011soap.codeplex.com/

    Now in Jscript


    This example is asynchronous, if you want to learn how to make JScript SOAP calls synchronously please visit this posthttp://mileyja.blogspot.com/2011/07/using-jscript-to-access-soap-web.html

    
    if (typeof (SDK) == "undefined")
       { SDK = { __namespace: true }; }
           //This will establish a more unique namespace for functions in this library. This will reduce the 
           // potential for functions to be overwritten due to a duplicate name when the library is loaded.
           SDK.SAMPLES = {
               _getServerUrl: function () {
                   ///<summary>
                   /// Returns the URL for the SOAP endpoint using the context information available in the form
                   /// or HTML Web resource.
                   ///</summary>
                   var OrgServicePath = "/XRMServices/2011/Organization.svc/web";
                   var serverUrl = "";
                   if (typeof GetGlobalContext == "function") {
                       var context = GetGlobalContext();
                       serverUrl = context.getServerUrl();
                   }
                   else {
                       if (typeof Xrm.Page.context == "object") {
                             serverUrl = Xrm.Page.context.getServerUrl();
                       }
                       else
                       { throw new Error("Unable to access the server URL"); }
                       }
                      if (serverUrl.match(/\/$/)) {
                           serverUrl = serverUrl.substring(0, serverUrl.length - 1);
                       } 
                       return serverUrl + OrgServicePath;
                   }, 
               RetrieveProvisionedLanguagesRequest: function () {
                   var requestMain = ""
                   requestMain += "<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">";
                   requestMain += "  <s:Body>";
                   requestMain += "    <Execute xmlns=\"http://schemas.microsoft.com/xrm/2011/Contracts/Services\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\">";
                   requestMain += "      <request i:type=\"b:RetrieveProvisionedLanguagesRequest\" xmlns:a=\"http://schemas.microsoft.com/xrm/2011/Contracts\" xmlns:b=\"http://schemas.microsoft.com/crm/2011/Contracts\">";
                   requestMain += "        <a:Parameters xmlns:c=\"http://schemas.datacontract.org/2004/07/System.Collections.Generic\" />";
                   requestMain += "        <a:RequestId i:nil=\"true\" />";
                   requestMain += "        <a:RequestName>RetrieveProvisionedLanguages</a:RequestName>";
                   requestMain += "      </request>";
                   requestMain += "    </Execute>";
                   requestMain += "  </s:Body>";
                   requestMain += "</s:Envelope>";
                   var req = new XMLHttpRequest();
                   req.open("POST", SDK.SAMPLES._getServerUrl(), true)
                   // Responses will return XML. It isn't possible to return JSON.
                   req.setRequestHeader("Accept", "application/xml, text/xml, */*");
                   req.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
                   req.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/xrm/2011/Contracts/Services/IOrganizationService/Execute");
                   var successCallback = null;
                   var errorCallback = null;
                   req.onreadystatechange = function () { SDK.SAMPLES.RetrieveProvisionedLanguagesResponse(req, successCallback, errorCallback); };
                   req.send(requestMain);
               },
           RetrieveProvisionedLanguagesResponse: function (req, successCallback, errorCallback) {
                   ///<summary>
                   /// Recieves the assign response
                   ///</summary>
                   ///<param name="req" Type="XMLHttpRequest">
                   /// The XMLHttpRequest response
                   ///</param>
                   ///<param name="successCallback" Type="Function">
                   /// The function to perform when an successfult response is returned.
                   /// For this message no data is returned so a success callback is not really necessary.
                   ///</param>
                   ///<param name="errorCallback" Type="Function">
                   /// The function to perform when an error is returned.
                   /// This function accepts a JScript error returned by the _getError function
                   ///</param>
                   if (req.readyState == 4) {
                   if (req.status == 200) {
                   if (successCallback != null)
                   { successCallback(); }
                   }
                   else {
                       errorCallback(SDK.SAMPLES._getError(req.responseXML));
                   }
               }
           },
           _getError: function (faultXml) {
               ///<summary>
               /// Parses the WCF fault returned in the event of an error.
               ///</summary>
               ///<param name="faultXml" Type="XML">
               /// The responseXML property of the XMLHttpRequest response.
               ///</param>
               var errorMessage = "Unknown Error (Unable to parse the fault)";
               if (typeof faultXml == "object") {
                   try {
                       var bodyNode = faultXml.firstChild.firstChild;
                       //Retrieve the fault node
                       for (var i = 0; i < bodyNode.childNodes.length; i++) {
                           var node = bodyNode.childNodes[i];
                           //NOTE: This comparison does not handle the case where the XML namespace changes
                           if ("s:Fault" == node.nodeName) {
                           for (var j = 0; j < node.childNodes.length; j++) {
                               var faultStringNode = node.childNodes[j];
                               if ("faultstring" == faultStringNode.nodeName) {
                                   errorMessage = faultStringNode.text;
                                   break;
                               }
                           }
                           break;
                       }
                   }
               }
               catch (e) { };
            }
            return new Error(errorMessage);
         },
     __namespace: true
    };
    
    


    To understand how to parse the response please review my post on using the DOM parser.
    Now you can call the SDK.SAMPLES.RetrieveProvisionedLanguagesRequest function from your form jscript handler.


    Thats all there is to it!
    -

    Friday, October 28, 2011

    Copy All Products From Any Opportunity to Any Invoice in Microsoft Dynamics CRM 2011 Using .NET or Jscript

    This illustration shows how to copy all products from any opportunity to any invoice in Microsoft Dynamics CRM 2011 with GetInvoiceProductsFromOpportunityRequest.   This example will be given in Jscript (SOAP) and in C# (.NET).
      Ok, here is what the code looks like!
      First in C#:

      GetInvoiceProductsFromOpportunityRequest req = new GetInvoiceProductsFromOpportunityRequest();
      req.OpportunityId = new Guid("AE2A290D-53FA-E011-8E76-1CC1DEF1353B");
      req.InvoiceId = new Guid("B7C5EA04-6901-E111-8E26-1CC1DEF1B5FF");
      GetInvoiceProductsFromOpportunityResponse resp = (GetInvoiceProductsFromOpportunityResponse)slos.Execute(req);
      
      

      If you need help instantiating a service object in .NET within a plugin check out this post:
      http://mileyja.blogspot.com/2011/04/instantiating-service-object-within.html

      Now here is the Jscript nicely formatted by the CRM 2011 SOAP formatter. Available at: http://crm2011soap.codeplex.com/

      Now in Jscript


      This example is asynchronous, if you want to learn how to make JScript SOAP calls synchronously please visit this posthttp://mileyja.blogspot.com/2011/07/using-jscript-to-access-soap-web.html

      
      if (typeof (SDK) == "undefined")
         { SDK = { __namespace: true }; }
             //This will establish a more unique namespace for functions in this library. This will reduce the 
             // potential for functions to be overwritten due to a duplicate name when the library is loaded.
             SDK.SAMPLES = {
                 _getServerUrl: function () {
                     ///<summary>
                     /// Returns the URL for the SOAP endpoint using the context information available in the form
                     /// or HTML Web resource.
                     ///</summary>
                     var OrgServicePath = "/XRMServices/2011/Organization.svc/web";
                     var serverUrl = "";
                     if (typeof GetGlobalContext == "function") {
                         var context = GetGlobalContext();
                         serverUrl = context.getServerUrl();
                     }
                     else {
                         if (typeof Xrm.Page.context == "object") {
                               serverUrl = Xrm.Page.context.getServerUrl();
                         }
                         else
                         { throw new Error("Unable to access the server URL"); }
                         }
                        if (serverUrl.match(/\/$/)) {
                             serverUrl = serverUrl.substring(0, serverUrl.length - 1);
                         } 
                         return serverUrl + OrgServicePath;
                     }, 
                 GetInvoiceProductsFromOpportunityRequest: function () {
                     var requestMain = ""
                     requestMain += "<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">";
                     requestMain += "  <s:Body>";
                     requestMain += "    <Execute xmlns=\"http://schemas.microsoft.com/xrm/2011/Contracts/Services\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\">";
                     requestMain += "      <request i:type=\"b:GetInvoiceProductsFromOpportunityRequest\" xmlns:a=\"http://schemas.microsoft.com/xrm/2011/Contracts\" xmlns:b=\"http://schemas.microsoft.com/crm/2011/Contracts\">";
                     requestMain += "        <a:Parameters xmlns:c=\"http://schemas.datacontract.org/2004/07/System.Collections.Generic\">";
                     requestMain += "          <a:KeyValuePairOfstringanyType>";
                     requestMain += "            <c:key>OpportunityId</c:key>";
                     requestMain += "            <c:value i:type=\"d:guid\" xmlns:d=\"http://schemas.microsoft.com/2003/10/Serialization/\">ae2a290d-53fa-e011-8e76-1cc1def1353b</c:value>";
                     requestMain += "          </a:KeyValuePairOfstringanyType>";
                     requestMain += "          <a:KeyValuePairOfstringanyType>";
                     requestMain += "            <c:key>InvoiceId</c:key>";
                     requestMain += "            <c:value i:type=\"d:guid\" xmlns:d=\"http://schemas.microsoft.com/2003/10/Serialization/\">b7c5ea04-6901-e111-8e26-1cc1def1b5ff</c:value>";
                     requestMain += "          </a:KeyValuePairOfstringanyType>";
                     requestMain += "        </a:Parameters>";
                     requestMain += "        <a:RequestId i:nil=\"true\" />";
                     requestMain += "        <a:RequestName>GetInvoiceProductsFromOpportunity</a:RequestName>";
                     requestMain += "      </request>";
                     requestMain += "    </Execute>";
                     requestMain += "  </s:Body>";
                     requestMain += "</s:Envelope>";
                     var req = new XMLHttpRequest();
                     req.open("POST", SDK.SAMPLES._getServerUrl(), true)
                     // Responses will return XML. It isn't possible to return JSON.
                     req.setRequestHeader("Accept", "application/xml, text/xml, */*");
                     req.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
                     req.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/xrm/2011/Contracts/Services/IOrganizationService/Execute");
                     var successCallback = null;
                     var errorCallback = null;
                     req.onreadystatechange = function () { SDK.SAMPLES.GetInvoiceProductsFromOpportunityResponse(req, successCallback, errorCallback); };
                     req.send(requestMain);
                 },
             GetInvoiceProductsFromOpportunityResponse: function (req, successCallback, errorCallback) {
                     ///<summary>
                     /// Recieves the assign response
                     ///</summary>
                     ///<param name="req" Type="XMLHttpRequest">
                     /// The XMLHttpRequest response
                     ///</param>
                     ///<param name="successCallback" Type="Function">
                     /// The function to perform when an successfult response is returned.
                     /// For this message no data is returned so a success callback is not really necessary.
                     ///</param>
                     ///<param name="errorCallback" Type="Function">
                     /// The function to perform when an error is returned.
                     /// This function accepts a JScript error returned by the _getError function
                     ///</param>
                     if (req.readyState == 4) {
                     if (req.status == 200) {
                     if (successCallback != null)
                     { successCallback(); }
                     }
                     else {
                         errorCallback(SDK.SAMPLES._getError(req.responseXML));
                     }
                 }
             },
             _getError: function (faultXml) {
                 ///<summary>
                 /// Parses the WCF fault returned in the event of an error.
                 ///</summary>
                 ///<param name="faultXml" Type="XML">
                 /// The responseXML property of the XMLHttpRequest response.
                 ///</param>
                 var errorMessage = "Unknown Error (Unable to parse the fault)";
                 if (typeof faultXml == "object") {
                     try {
                         var bodyNode = faultXml.firstChild.firstChild;
                         //Retrieve the fault node
                         for (var i = 0; i < bodyNode.childNodes.length; i++) {
                             var node = bodyNode.childNodes[i];
                             //NOTE: This comparison does not handle the case where the XML namespace changes
                             if ("s:Fault" == node.nodeName) {
                             for (var j = 0; j < node.childNodes.length; j++) {
                                 var faultStringNode = node.childNodes[j];
                                 if ("faultstring" == faultStringNode.nodeName) {
                                     errorMessage = faultStringNode.text;
                                     break;
                                 }
                             }
                             break;
                         }
                     }
                 }
                 catch (e) { };
              }
              return new Error(errorMessage);
           },
       __namespace: true
      };
      
      


      To understand how to parse the response please review my post on using the DOM parser.
      Now you can call the SDK.SAMPLES.GetInvoiceProductsFromOpportunityRequest function from your form jscript handler.


      Thats all there is to it!
      -

      Thursday, October 27, 2011

      Retrieve All Entity Instances Related To Another Entity in Microsoft Dynamics CRM 2011 Using .NET or Jscript With RollupRequest

      This illustration shows how to retrieve all entity instances related to another entity in Microsoft Dynamics CRM 2011 with RollupRequest.   This example will be given in Jscript (SOAP) and in C# (.NET).

      To understand the types of rollups and the types of entities that are supported by this request, please refer to the following MSDN article:
      http://msdn.microsoft.com/en-us/library/microsoft.crm.sdk.messages.rolluprequest.aspx
        Ok, here is what the code looks like!
        First in C#:

        RollupRequest req = new RollupRequest();
        QueryExpression qe = new QueryExpression();
        //choose entity type to retrieve
        //review article for more info on supported rollups 
        //http://msdn.microsoft.com/en-us/library/microsoft.crm.sdk.messages.rolluprequest.aspx
        qe.EntityName = Quote.EntityLogicalName;
        //choose columns to bring back, new columnset(true) just brings back all columns
        qe.ColumnSet = new ColumnSet(true);
        req.Query = qe;
        //choose entity you are getting related entities for
        req.Target = new EntityReference("account", new Guid("E0D97648-A5F3-E011-8606-1CC1DEE89AA8"));
        //choose rollup type: related, extended, or none
        req.RollupType = RollupType.Related;       
        RollupResponse resp = (RollupResponse)service.Execute(req);
        
        

        If you need help instantiating a service object in .NET within a plugin check out this post:
        http://mileyja.blogspot.com/2011/04/instantiating-service-object-within.html

        Now here is the Jscript nicely formatted by the CRM 2011 SOAP formatter. Available at: http://crm2011soap.codeplex.com/

        Now in Jscript


        This example is asynchronous, if you want to learn how to make JScript SOAP calls synchronously please visit this posthttp://mileyja.blogspot.com/2011/07/using-jscript-to-access-soap-web.html

        
        if (typeof (SDK) == "undefined")
           { SDK = { __namespace: true }; }
               //This will establish a more unique namespace for functions in this library. This will reduce the 
               // potential for functions to be overwritten due to a duplicate name when the library is loaded.
               SDK.SAMPLES = {
                   _getServerUrl: function () {
                       ///<summary>
                       /// Returns the URL for the SOAP endpoint using the context information available in the form
                       /// or HTML Web resource.
                       ///</summary>
                       var OrgServicePath = "/XRMServices/2011/Organization.svc/web";
                       var serverUrl = "";
                       if (typeof GetGlobalContext == "function") {
                           var context = GetGlobalContext();
                           serverUrl = context.getServerUrl();
                       }
                       else {
                           if (typeof Xrm.Page.context == "object") {
                                 serverUrl = Xrm.Page.context.getServerUrl();
                           }
                           else
                           { throw new Error("Unable to access the server URL"); }
                           }
                          if (serverUrl.match(/\/$/)) {
                               serverUrl = serverUrl.substring(0, serverUrl.length - 1);
                           } 
                           return serverUrl + OrgServicePath;
                       }, 
                   RollupRequest: function () {
                       var requestMain = ""
                       requestMain += "<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">";
                       requestMain += "  <s:Body>";
                       requestMain += "    <Execute xmlns=\"http://schemas.microsoft.com/xrm/2011/Contracts/Services\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\">";
                       requestMain += "      <request i:type=\"b:RollupRequest\" xmlns:a=\"http://schemas.microsoft.com/xrm/2011/Contracts\" xmlns:b=\"http://schemas.microsoft.com/crm/2011/Contracts\">";
                       requestMain += "        <a:Parameters xmlns:c=\"http://schemas.datacontract.org/2004/07/System.Collections.Generic\">";
                       requestMain += "          <a:KeyValuePairOfstringanyType>";
                       requestMain += "            <c:key>Target</c:key>";
                       requestMain += "            <c:value i:type=\"a:EntityReference\">";
                       requestMain += "              <a:Id>e0d97648-a5f3-e011-8606-1cc1dee89aa8</a:Id>";
                       requestMain += "              <a:LogicalName>account</a:LogicalName>";
                       requestMain += "              <a:Name i:nil=\"true\" />";
                       requestMain += "            </c:value>";
                       requestMain += "          </a:KeyValuePairOfstringanyType>";
                       requestMain += "          <a:KeyValuePairOfstringanyType>";
                       requestMain += "            <c:key>Query</c:key>";
                       requestMain += "            <c:value i:type=\"a:QueryExpression\">";
                       requestMain += "              <a:ColumnSet>";
                       requestMain += "                <a:AllColumns>true</a:AllColumns>";
                       requestMain += "                <a:Columns xmlns:d=\"http://schemas.microsoft.com/2003/10/Serialization/Arrays\" />";
                       requestMain += "              </a:ColumnSet>";
                       requestMain += "              <a:Criteria>";
                       requestMain += "                <a:Conditions />";
                       requestMain += "                <a:FilterOperator>And</a:FilterOperator>";
                       requestMain += "                <a:Filters />";
                       requestMain += "              </a:Criteria>";
                       requestMain += "              <a:Distinct>false</a:Distinct>";
                       requestMain += "              <a:EntityName>quote</a:EntityName>";
                       requestMain += "              <a:LinkEntities />";
                       requestMain += "              <a:Orders />";
                       requestMain += "              <a:PageInfo>";
                       requestMain += "                <a:Count>0</a:Count>";
                       requestMain += "                <a:PageNumber>0</a:PageNumber>";
                       requestMain += "                <a:PagingCookie i:nil=\"true\" />";
                       requestMain += "                <a:ReturnTotalRecordCount>false</a:ReturnTotalRecordCount>";
                       requestMain += "              </a:PageInfo>";
                       requestMain += "              <a:NoLock>false</a:NoLock>";
                       requestMain += "            </c:value>";
                       requestMain += "          </a:KeyValuePairOfstringanyType>";
                       requestMain += "          <a:KeyValuePairOfstringanyType>";
                       requestMain += "            <c:key>RollupType</c:key>";
                       requestMain += "            <c:value i:type=\"b:RollupType\">Related</c:value>";
                       requestMain += "          </a:KeyValuePairOfstringanyType>";
                       requestMain += "        </a:Parameters>";
                       requestMain += "        <a:RequestId i:nil=\"true\" />";
                       requestMain += "        <a:RequestName>Rollup</a:RequestName>";
                       requestMain += "      </request>";
                       requestMain += "    </Execute>";
                       requestMain += "  </s:Body>";
                       requestMain += "</s:Envelope>";
                       var req = new XMLHttpRequest();
                       req.open("POST", SDK.SAMPLES._getServerUrl(), true)
                       // Responses will return XML. It isn't possible to return JSON.
                       req.setRequestHeader("Accept", "application/xml, text/xml, */*");
                       req.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
                       req.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/xrm/2011/Contracts/Services/IOrganizationService/Execute");
                       var successCallback = null;
                       var errorCallback = null;
                       req.onreadystatechange = function () { SDK.SAMPLES.RollupResponse(req, successCallback, errorCallback); };
                       req.send(requestMain);
                   },
               RollupResponse: function (req, successCallback, errorCallback) {
                       ///<summary>
                       /// Recieves the assign response
                       ///</summary>
                       ///<param name="req" Type="XMLHttpRequest">
                       /// The XMLHttpRequest response
                       ///</param>
                       ///<param name="successCallback" Type="Function">
                       /// The function to perform when an successfult response is returned.
                       /// For this message no data is returned so a success callback is not really necessary.
                       ///</param>
                       ///<param name="errorCallback" Type="Function">
                       /// The function to perform when an error is returned.
                       /// This function accepts a JScript error returned by the _getError function
                       ///</param>
                       if (req.readyState == 4) {
                       if (req.status == 200) {
                       if (successCallback != null)
                       { successCallback(); }
                       }
                       else {
                           errorCallback(SDK.SAMPLES._getError(req.responseXML));
                       }
                   }
               },
               _getError: function (faultXml) {
                   ///<summary>
                   /// Parses the WCF fault returned in the event of an error.
                   ///</summary>
                   ///<param name="faultXml" Type="XML">
                   /// The responseXML property of the XMLHttpRequest response.
                   ///</param>
                   var errorMessage = "Unknown Error (Unable to parse the fault)";
                   if (typeof faultXml == "object") {
                       try {
                           var bodyNode = faultXml.firstChild.firstChild;
                           //Retrieve the fault node
                           for (var i = 0; i < bodyNode.childNodes.length; i++) {
                               var node = bodyNode.childNodes[i];
                               //NOTE: This comparison does not handle the case where the XML namespace changes
                               if ("s:Fault" == node.nodeName) {
                               for (var j = 0; j < node.childNodes.length; j++) {
                                   var faultStringNode = node.childNodes[j];
                                   if ("faultstring" == faultStringNode.nodeName) {
                                       errorMessage = faultStringNode.text;
                                       break;
                                   }
                               }
                               break;
                           }
                       }
                   }
                   catch (e) { };
                }
                return new Error(errorMessage);
             },
         __namespace: true
        };
        
        


        To understand how to parse the response please review my post on using the DOM parser.
        Now you can call the SDK.SAMPLES.RollupRequest function from your form jscript handler.


        Thats all there is to it!
        -

        Wednesday, October 26, 2011

        Copy All Products From Any Opportunity to Any Quote in Microsoft Dynamics CRM 2011 Using .NET or Jscript

        This illustration shows how to copy all products from any opportunity to any quote in Microsoft Dynamics CRM 2011 with GetQuoteProductsFromOpportunityRequest.   This example will be given in Jscript (SOAP) and in C# (.NET).
          Ok, here is what the code looks like!
          First in C#:

          GetQuoteProductsFromOpportunityRequest req = new GetQuoteProductsFromOpportunityRequest();
          req.OpportunityId = new Guid("AE2A290D-53FA-E011-8E76-1CC1DEF1353B");
          req.QuoteId = new Guid("DB318A99-D7FF-E011-8E26-1CC1DEF1B5FF");
          GetQuoteProductsFromOpportunityResponse resp = (GetQuoteProductsFromOpportunityResponse)service.Execute(req);
          
          

          If you need help instantiating a service object in .NET within a plugin check out this post:
          http://mileyja.blogspot.com/2011/04/instantiating-service-object-within.html

          Now here is the Jscript nicely formatted by the CRM 2011 SOAP formatter. Available at: http://crm2011soap.codeplex.com/

          Now in Jscript


          This example is asynchronous, if you want to learn how to make JScript SOAP calls synchronously please visit this posthttp://mileyja.blogspot.com/2011/07/using-jscript-to-access-soap-web.html

          
          if (typeof (SDK) == "undefined")
             { SDK = { __namespace: true }; }
                 //This will establish a more unique namespace for functions in this library. This will reduce the 
                 // potential for functions to be overwritten due to a duplicate name when the library is loaded.
                 SDK.SAMPLES = {
                     _getServerUrl: function () {
                         ///<summary>
                         /// Returns the URL for the SOAP endpoint using the context information available in the form
                         /// or HTML Web resource.
                         ///</summary>
                         var OrgServicePath = "/XRMServices/2011/Organization.svc/web";
                         var serverUrl = "";
                         if (typeof GetGlobalContext == "function") {
                             var context = GetGlobalContext();
                             serverUrl = context.getServerUrl();
                         }
                         else {
                             if (typeof Xrm.Page.context == "object") {
                                   serverUrl = Xrm.Page.context.getServerUrl();
                             }
                             else
                             { throw new Error("Unable to access the server URL"); }
                             }
                            if (serverUrl.match(/\/$/)) {
                                 serverUrl = serverUrl.substring(0, serverUrl.length - 1);
                             } 
                             return serverUrl + OrgServicePath;
                         }, 
                     GetQuoteProductsFromOpportunityRequest: function () {
                         var requestMain = ""
                         requestMain += "<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">";
                         requestMain += "  <s:Body>";
                         requestMain += "    <Execute xmlns=\"http://schemas.microsoft.com/xrm/2011/Contracts/Services\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\">";
                         requestMain += "      <request i:type=\"b:GetQuoteProductsFromOpportunityRequest\" xmlns:a=\"http://schemas.microsoft.com/xrm/2011/Contracts\" xmlns:b=\"http://schemas.microsoft.com/crm/2011/Contracts\">";
                         requestMain += "        <a:Parameters xmlns:c=\"http://schemas.datacontract.org/2004/07/System.Collections.Generic\">";
                         requestMain += "          <a:KeyValuePairOfstringanyType>";
                         requestMain += "            <c:key>OpportunityId</c:key>";
                         requestMain += "            <c:value i:type=\"d:guid\" xmlns:d=\"http://schemas.microsoft.com/2003/10/Serialization/\">ae2a290d-53fa-e011-8e76-1cc1def1353b</c:value>";
                         requestMain += "          </a:KeyValuePairOfstringanyType>";
                         requestMain += "          <a:KeyValuePairOfstringanyType>";
                         requestMain += "            <c:key>QuoteId</c:key>";
                         requestMain += "            <c:value i:type=\"d:guid\" xmlns:d=\"http://schemas.microsoft.com/2003/10/Serialization/\">db318a99-d7ff-e011-8e26-1cc1def1b5ff</c:value>";
                         requestMain += "          </a:KeyValuePairOfstringanyType>";
                         requestMain += "        </a:Parameters>";
                         requestMain += "        <a:RequestId i:nil=\"true\" />";
                         requestMain += "        <a:RequestName>GetQuoteProductsFromOpportunity</a:RequestName>";
                         requestMain += "      </request>";
                         requestMain += "    </Execute>";
                         requestMain += "  </s:Body>";
                         requestMain += "</s:Envelope>";
                         var req = new XMLHttpRequest();
                         req.open("POST", SDK.SAMPLES._getServerUrl(), true)
                         // Responses will return XML. It isn't possible to return JSON.
                         req.setRequestHeader("Accept", "application/xml, text/xml, */*");
                         req.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
                         req.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/xrm/2011/Contracts/Services/IOrganizationService/Execute");
                         var successCallback = null;
                         var errorCallback = null;
                         req.onreadystatechange = function () { SDK.SAMPLES.GetQuoteProductsFromOpportunityResponse(req, successCallback, errorCallback); };
                         req.send(requestMain);
                     },
                 GetQuoteProductsFromOpportunityResponse: function (req, successCallback, errorCallback) {
                         ///<summary>
                         /// Recieves the assign response
                         ///</summary>
                         ///<param name="req" Type="XMLHttpRequest">
                         /// The XMLHttpRequest response
                         ///</param>
                         ///<param name="successCallback" Type="Function">
                         /// The function to perform when an successfult response is returned.
                         /// For this message no data is returned so a success callback is not really necessary.
                         ///</param>
                         ///<param name="errorCallback" Type="Function">
                         /// The function to perform when an error is returned.
                         /// This function accepts a JScript error returned by the _getError function
                         ///</param>
                         if (req.readyState == 4) {
                         if (req.status == 200) {
                         if (successCallback != null)
                         { successCallback(); }
                         }
                         else {
                             errorCallback(SDK.SAMPLES._getError(req.responseXML));
                         }
                     }
                 },
                 _getError: function (faultXml) {
                     ///<summary>
                     /// Parses the WCF fault returned in the event of an error.
                     ///</summary>
                     ///<param name="faultXml" Type="XML">
                     /// The responseXML property of the XMLHttpRequest response.
                     ///</param>
                     var errorMessage = "Unknown Error (Unable to parse the fault)";
                     if (typeof faultXml == "object") {
                         try {
                             var bodyNode = faultXml.firstChild.firstChild;
                             //Retrieve the fault node
                             for (var i = 0; i < bodyNode.childNodes.length; i++) {
                                 var node = bodyNode.childNodes[i];
                                 //NOTE: This comparison does not handle the case where the XML namespace changes
                                 if ("s:Fault" == node.nodeName) {
                                 for (var j = 0; j < node.childNodes.length; j++) {
                                     var faultStringNode = node.childNodes[j];
                                     if ("faultstring" == faultStringNode.nodeName) {
                                         errorMessage = faultStringNode.text;
                                         break;
                                     }
                                 }
                                 break;
                             }
                         }
                     }
                     catch (e) { };
                  }
                  return new Error(errorMessage);
               },
           __namespace: true
          };
          
          


          To understand how to parse the response please review my post on using the DOM parser.
          Now you can call the SDK.SAMPLES.GetQuoteProductsFromOpportunityRequest function from your form jscript handler.


          Thats all there is to it!
          -

          Tuesday, October 25, 2011

          Disassociate Two Entity Instances Related By a Many-To-Many Relationship in Microsoft Dynamics CRM 2011 Using .NET or Jscript

          This illustration shows how to disassociate two entity instances that are related by a many-to-many relationship in Microsoft Dynamics CRM 2011 with DisassociateEntitiesRequest.   This example will be given in Jscript (SOAP) and in C# (.NET).
            Ok, here is what the code looks like!
            First in C#:

            
            DisassociateEntitiesRequest req = new DisassociateEntitiesRequest();
            req.Moniker1 = new EntityReference("account", new Guid("E0D97648-A5F3-E011-8606-1CC1DEE89AA8"));
            req.Moniker2 = new EntityReference("contact", new Guid("44DA7648-A5F3-E011-8606-1CC1DEE89AA8"));
            req.RelationshipName = "new_account_contact";
            DisassociateEntitiesResponse resp = (DisassociateEntitiesResponse)service.Execute(req);
            
            

            If you need help instantiating a service object in .NET within a plugin check out this post:
            http://mileyja.blogspot.com/2011/04/instantiating-service-object-within.html

            Now here is the Jscript nicely formatted by the CRM 2011 SOAP formatter. Available at: http://crm2011soap.codeplex.com/

            Now in Jscript


            This example is asynchronous, if you want to learn how to make JScript SOAP calls synchronously please visit this posthttp://mileyja.blogspot.com/2011/07/using-jscript-to-access-soap-web.html

            if (typeof (SDK) == "undefined")
               { SDK = { __namespace: true }; }
                   //This will establish a more unique namespace for functions in this library. This will reduce the 
                   // potential for functions to be overwritten due to a duplicate name when the library is loaded.
                   SDK.SAMPLES = {
                       _getServerUrl: function () {
                           ///<summary>
                           /// Returns the URL for the SOAP endpoint using the context information available in the form
                           /// or HTML Web resource.
                           ///</summary>
                           var OrgServicePath = "/XRMServices/2011/Organization.svc/web";
                           var serverUrl = "";
                           if (typeof GetGlobalContext == "function") {
                               var context = GetGlobalContext();
                               serverUrl = context.getServerUrl();
                           }
                           else {
                               if (typeof Xrm.Page.context == "object") {
                                     serverUrl = Xrm.Page.context.getServerUrl();
                               }
                               else
                               { throw new Error("Unable to access the server URL"); }
                               }
                              if (serverUrl.match(/\/$/)) {
                                   serverUrl = serverUrl.substring(0, serverUrl.length - 1);
                               } 
                               return serverUrl + OrgServicePath;
                           }, 
                       DissociateEntitiesRequest: function () {
                           var requestMain = ""
                           requestMain += "<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">";
                           requestMain += "  <s:Body>";
                           requestMain += "    <Execute xmlns=\"http://schemas.microsoft.com/xrm/2011/Contracts/Services\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\">";
                           requestMain += "      <request i:type=\"b:DisassociateEntitiesRequest\" xmlns:a=\"http://schemas.microsoft.com/xrm/2011/Contracts\" xmlns:b=\"http://schemas.microsoft.com/crm/2011/Contracts\">";
                           requestMain += "        <a:Parameters xmlns:c=\"http://schemas.datacontract.org/2004/07/System.Collections.Generic\">";
                           requestMain += "          <a:KeyValuePairOfstringanyType>";
                           requestMain += "            <c:key>Moniker1</c:key>";
                           requestMain += "            <c:value i:type=\"a:EntityReference\">";
                           requestMain += "              <a:Id>e0d97648-a5f3-e011-8606-1cc1dee89aa8</a:Id>";
                           requestMain += "              <a:LogicalName>account</a:LogicalName>";
                           requestMain += "              <a:Name i:nil=\"true\" />";
                           requestMain += "            </c:value>";
                           requestMain += "          </a:KeyValuePairOfstringanyType>";
                           requestMain += "          <a:KeyValuePairOfstringanyType>";
                           requestMain += "            <c:key>Moniker2</c:key>";
                           requestMain += "            <c:value i:type=\"a:EntityReference\">";
                           requestMain += "              <a:Id>44da7648-a5f3-e011-8606-1cc1dee89aa8</a:Id>";
                           requestMain += "              <a:LogicalName>contact</a:LogicalName>";
                           requestMain += "              <a:Name i:nil=\"true\" />";
                           requestMain += "            </c:value>";
                           requestMain += "          </a:KeyValuePairOfstringanyType>";
                           requestMain += "          <a:KeyValuePairOfstringanyType>";
                           requestMain += "            <c:key>RelationshipName</c:key>";
                           requestMain += "            <c:value i:type=\"d:string\" xmlns:d=\"http://www.w3.org/2001/XMLSchema\">new_account_contact</c:value>";
                           requestMain += "          </a:KeyValuePairOfstringanyType>";
                           requestMain += "        </a:Parameters>";
                           requestMain += "        <a:RequestId i:nil=\"true\" />";
                           requestMain += "        <a:RequestName>DisassociateEntities</a:RequestName>";
                           requestMain += "      </request>";
                           requestMain += "    </Execute>";
                           requestMain += "  </s:Body>";
                           requestMain += "</s:Envelope>";
                           var req = new XMLHttpRequest();
                           req.open("POST", SDK.SAMPLES._getServerUrl(), true)
                           // Responses will return XML. It isn't possible to return JSON.
                           req.setRequestHeader("Accept", "application/xml, text/xml, */*");
                           req.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
                           req.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/xrm/2011/Contracts/Services/IOrganizationService/Execute");
                           var successCallback = null;
                           var errorCallback = null;
                           req.onreadystatechange = function () { SDK.SAMPLES.DissociateEntitiesResponse(req, successCallback, errorCallback); };
                           req.send(requestMain);
                       },
                   DissociateEntitiesResponse: function (req, successCallback, errorCallback) {
                           ///<summary>
                           /// Recieves the assign response
                           ///</summary>
                           ///<param name="req" Type="XMLHttpRequest">
                           /// The XMLHttpRequest response
                           ///</param>
                           ///<param name="successCallback" Type="Function">
                           /// The function to perform when an successfult response is returned.
                           /// For this message no data is returned so a success callback is not really necessary.
                           ///</param>
                           ///<param name="errorCallback" Type="Function">
                           /// The function to perform when an error is returned.
                           /// This function accepts a JScript error returned by the _getError function
                           ///</param>
                           if (req.readyState == 4) {
                           if (req.status == 200) {
                           if (successCallback != null)
                           { successCallback(); }
                           }
                           else {
                               errorCallback(SDK.SAMPLES._getError(req.responseXML));
                           }
                       }
                   },
                   _getError: function (faultXml) {
                       ///<summary>
                       /// Parses the WCF fault returned in the event of an error.
                       ///</summary>
                       ///<param name="faultXml" Type="XML">
                       /// The responseXML property of the XMLHttpRequest response.
                       ///</param>
                       var errorMessage = "Unknown Error (Unable to parse the fault)";
                       if (typeof faultXml == "object") {
                           try {
                               var bodyNode = faultXml.firstChild.firstChild;
                               //Retrieve the fault node
                               for (var i = 0; i < bodyNode.childNodes.length; i++) {
                                   var node = bodyNode.childNodes[i];
                                   //NOTE: This comparison does not handle the case where the XML namespace changes
                                   if ("s:Fault" == node.nodeName) {
                                   for (var j = 0; j < node.childNodes.length; j++) {
                                       var faultStringNode = node.childNodes[j];
                                       if ("faultstring" == faultStringNode.nodeName) {
                                           errorMessage = faultStringNode.text;
                                           break;
                                       }
                                   }
                                   break;
                               }
                           }
                       }
                       catch (e) { };
                    }
                    return new Error(errorMessage);
                 },
             __namespace: true
            };
            
            

            To understand how to parse the response please review my post on using the DOM parser.
            Now you can call the SDK.SAMPLES.DisassociateEntitiesRequest function from your form jscript handler.


            Thats all there is to it!
            -

            Monday, October 24, 2011

            Generate a Workflow From a Workflow Template (Process Template) in Microsoft Dynamics CRM 2011 Using .NET or Jscript

            This illustration shows how to generate a workflow from a workflow template / process template in Microsoft Dynamics CRM 2011 with CreateWorkflowFromTemplateRequest.   This example will be given in Jscript (SOAP) and in C# (.NET).
              Ok, here is what the code looks like!
              First in C#:

              CreateWorkflowFromTemplateRequest req = new CreateWorkflowFromTemplateRequest();
              //specify a process template id
              req.WorkflowTemplateId = new Guid("6E238693-63A6-4E8B-AAE8-263D5F8B54BA");
              //specify a name for your new workflow
              req.WorkflowName = "new test workflow";
              CreateWorkflowFromTemplateResponse resp = (CreateWorkflowFromTemplateResponse)service.Execute(req);
              
              

              If you need help instantiating a service object in .NET within a plugin check out this post:
              http://mileyja.blogspot.com/2011/04/instantiating-service-object-within.html

              Now here is the Jscript nicely formatted by the CRM 2011 SOAP formatter. Available at: http://crm2011soap.codeplex.com/

              Now in Jscript


              This example is asynchronous, if you want to learn how to make JScript SOAP calls synchronously please visit this posthttp://mileyja.blogspot.com/2011/07/using-jscript-to-access-soap-web.html

              
              if (typeof (SDK) == "undefined")
                 { SDK = { __namespace: true }; }
                     //This will establish a more unique namespace for functions in this library. This will reduce the 
                     // potential for functions to be overwritten due to a duplicate name when the library is loaded.
                     SDK.SAMPLES = {
                         _getServerUrl: function () {
                             ///<summary>
                             /// Returns the URL for the SOAP endpoint using the context information available in the form
                             /// or HTML Web resource.
                             ///</summary>
                             var OrgServicePath = "/XRMServices/2011/Organization.svc/web";
                             var serverUrl = "";
                             if (typeof GetGlobalContext == "function") {
                                 var context = GetGlobalContext();
                                 serverUrl = context.getServerUrl();
                             }
                             else {
                                 if (typeof Xrm.Page.context == "object") {
                                       serverUrl = Xrm.Page.context.getServerUrl();
                                 }
                                 else
                                 { throw new Error("Unable to access the server URL"); }
                                 }
                                if (serverUrl.match(/\/$/)) {
                                     serverUrl = serverUrl.substring(0, serverUrl.length - 1);
                                 } 
                                 return serverUrl + OrgServicePath;
                             }, 
                         CreateWorkflowFromTemplateRequest: function () {
                             var requestMain = ""
                             requestMain += "<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">";
                             requestMain += "  <s:Body>";
                             requestMain += "    <Execute xmlns=\"http://schemas.microsoft.com/xrm/2011/Contracts/Services\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\">";
                             requestMain += "      <request i:type=\"b:CreateWorkflowFromTemplateRequest\" xmlns:a=\"http://schemas.microsoft.com/xrm/2011/Contracts\" xmlns:b=\"http://schemas.microsoft.com/crm/2011/Contracts\">";
                             requestMain += "        <a:Parameters xmlns:c=\"http://schemas.datacontract.org/2004/07/System.Collections.Generic\">";
                             requestMain += "          <a:KeyValuePairOfstringanyType>";
                             requestMain += "            <c:key>WorkflowName</c:key>";
                             requestMain += "            <c:value i:type=\"d:string\" xmlns:d=\"http://www.w3.org/2001/XMLSchema\">new test workflow</c:value>";
                             requestMain += "          </a:KeyValuePairOfstringanyType>";
                             requestMain += "          <a:KeyValuePairOfstringanyType>";
                             requestMain += "            <c:key>WorkflowTemplateId</c:key>";
                             requestMain += "            <c:value i:type=\"d:guid\" xmlns:d=\"http://schemas.microsoft.com/2003/10/Serialization/\">6e238693-63a6-4e8b-aae8-263d5f8b54ba</c:value>";
                             requestMain += "          </a:KeyValuePairOfstringanyType>";
                             requestMain += "        </a:Parameters>";
                             requestMain += "        <a:RequestId i:nil=\"true\" />";
                             requestMain += "        <a:RequestName>CreateWorkflowFromTemplate</a:RequestName>";
                             requestMain += "      </request>";
                             requestMain += "    </Execute>";
                             requestMain += "  </s:Body>";
                             requestMain += "</s:Envelope>";
                             var req = new XMLHttpRequest();
                             req.open("POST", SDK.SAMPLES._getServerUrl(), true)
                             // Responses will return XML. It isn't possible to return JSON.
                             req.setRequestHeader("Accept", "application/xml, text/xml, */*");
                             req.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
                             req.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/xrm/2011/Contracts/Services/IOrganizationService/Execute");
                             var successCallback = null;
                             var errorCallback = null;
                             req.onreadystatechange = function () { SDK.SAMPLES.CreateWorkflowFromTemplateResponse(req, successCallback, errorCallback); };
                             req.send(requestMain);
                         },
                     CreateWorkflowFromTemplateResponse: function (req, successCallback, errorCallback) {
                             ///<summary>
                             /// Recieves the assign response
                             ///</summary>
                             ///<param name="req" Type="XMLHttpRequest">
                             /// The XMLHttpRequest response
                             ///</param>
                             ///<param name="successCallback" Type="Function">
                             /// The function to perform when an successfult response is returned.
                             /// For this message no data is returned so a success callback is not really necessary.
                             ///</param>
                             ///<param name="errorCallback" Type="Function">
                             /// The function to perform when an error is returned.
                             /// This function accepts a JScript error returned by the _getError function
                             ///</param>
                             if (req.readyState == 4) {
                             if (req.status == 200) {
                             if (successCallback != null)
                             { successCallback(); }
                             }
                             else {
                                 errorCallback(SDK.SAMPLES._getError(req.responseXML));
                             }
                         }
                     },
                     _getError: function (faultXml) {
                         ///<summary>
                         /// Parses the WCF fault returned in the event of an error.
                         ///</summary>
                         ///<param name="faultXml" Type="XML">
                         /// The responseXML property of the XMLHttpRequest response.
                         ///</param>
                         var errorMessage = "Unknown Error (Unable to parse the fault)";
                         if (typeof faultXml == "object") {
                             try {
                                 var bodyNode = faultXml.firstChild.firstChild;
                                 //Retrieve the fault node
                                 for (var i = 0; i < bodyNode.childNodes.length; i++) {
                                     var node = bodyNode.childNodes[i];
                                     //NOTE: This comparison does not handle the case where the XML namespace changes
                                     if ("s:Fault" == node.nodeName) {
                                     for (var j = 0; j < node.childNodes.length; j++) {
                                         var faultStringNode = node.childNodes[j];
                                         if ("faultstring" == faultStringNode.nodeName) {
                                             errorMessage = faultStringNode.text;
                                             break;
                                         }
                                     }
                                     break;
                                 }
                             }
                         }
                         catch (e) { };
                      }
                      return new Error(errorMessage);
                   },
               __namespace: true
              };
              
              


              To understand how to parse the response please review my post on using the DOM parser.
              Now you can call the SDK.SAMPLES.CreateWorkflowFromTemplateRequest function from your form jscript handler.


              Thats all there is to it!
              -

              Friday, October 21, 2011

              How to Copy a Campaign in Microsoft Dynamics CRM 2011 Using .NET or Jscript

              This illustration shows how to copy a campaign in Microsoft Dynamics CRM 2011 with CopyCampaignRequest.   This example will be given in Jscript (SOAP) and in C# (.NET).
                Ok, here is what the code looks like!
                First in C#:

                CopyCampaignRequest req = new CopyCampaignRequest();
                req.SaveAsTemplate = false;
                req.BaseCampaign = new Guid("0ADA7648-A5F3-E011-8606-1CC1DEE89AA8");
                CopyCampaignResponse resp = (CopyCampaignResponse)slos.Execute(req);
                
                

                If you need help instantiating a service object in .NET within a plugin check out this post:
                http://mileyja.blogspot.com/2011/04/instantiating-service-object-within.html

                Now here is the Jscript nicely formatted by the CRM 2011 SOAP formatter. Available at: http://crm2011soap.codeplex.com/

                Now in Jscript


                This example is asynchronous, if you want to learn how to make JScript SOAP calls synchronously please visit this posthttp://mileyja.blogspot.com/2011/07/using-jscript-to-access-soap-web.html

                
                if (typeof (SDK) == "undefined")
                   { SDK = { __namespace: true }; }
                       //This will establish a more unique namespace for functions in this library. This will reduce the 
                       // potential for functions to be overwritten due to a duplicate name when the library is loaded.
                       SDK.SAMPLES = {
                           _getServerUrl: function () {
                               ///<summary>
                               /// Returns the URL for the SOAP endpoint using the context information available in the form
                               /// or HTML Web resource.
                               ///</summary>
                               var OrgServicePath = "/XRMServices/2011/Organization.svc/web";
                               var serverUrl = "";
                               if (typeof GetGlobalContext == "function") {
                                   var context = GetGlobalContext();
                                   serverUrl = context.getServerUrl();
                               }
                               else {
                                   if (typeof Xrm.Page.context == "object") {
                                         serverUrl = Xrm.Page.context.getServerUrl();
                                   }
                                   else
                                   { throw new Error("Unable to access the server URL"); }
                                   }
                                  if (serverUrl.match(/\/$/)) {
                                       serverUrl = serverUrl.substring(0, serverUrl.length - 1);
                                   } 
                                   return serverUrl + OrgServicePath;
                               }, 
                           CopyCampaignRequest: function () {
                               var requestMain = ""
                               requestMain += "<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">";
                               requestMain += "  <s:Body>";
                               requestMain += "    <Execute xmlns=\"http://schemas.microsoft.com/xrm/2011/Contracts/Services\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\">";
                               requestMain += "      <request i:type=\"b:CopyCampaignRequest\" xmlns:a=\"http://schemas.microsoft.com/xrm/2011/Contracts\" xmlns:b=\"http://schemas.microsoft.com/crm/2011/Contracts\">";
                               requestMain += "        <a:Parameters xmlns:c=\"http://schemas.datacontract.org/2004/07/System.Collections.Generic\">";
                               requestMain += "          <a:KeyValuePairOfstringanyType>";
                               requestMain += "            <c:key>BaseCampaign</c:key>";
                               requestMain += "            <c:value i:type=\"d:guid\" xmlns:d=\"http://schemas.microsoft.com/2003/10/Serialization/\">0ada7648-a5f3-e011-8606-1cc1dee89aa8</c:value>";
                               requestMain += "          </a:KeyValuePairOfstringanyType>";
                               requestMain += "          <a:KeyValuePairOfstringanyType>";
                               requestMain += "            <c:key>SaveAsTemplate</c:key>";
                               requestMain += "            <c:value i:type=\"d:boolean\" xmlns:d=\"http://www.w3.org/2001/XMLSchema\">false</c:value>";
                               requestMain += "          </a:KeyValuePairOfstringanyType>";
                               requestMain += "        </a:Parameters>";
                               requestMain += "        <a:RequestId i:nil=\"true\" />";
                               requestMain += "        <a:RequestName>CopyCampaign</a:RequestName>";
                               requestMain += "      </request>";
                               requestMain += "    </Execute>";
                               requestMain += "  </s:Body>";
                               requestMain += "</s:Envelope>";
                               var req = new XMLHttpRequest();
                               req.open("POST", SDK.SAMPLES._getServerUrl(), true)
                               // Responses will return XML. It isn't possible to return JSON.
                               req.setRequestHeader("Accept", "application/xml, text/xml, */*");
                               req.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
                               req.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/xrm/2011/Contracts/Services/IOrganizationService/Execute");
                               var successCallback = null;
                               var errorCallback = null;
                               req.onreadystatechange = function () { SDK.SAMPLES.CopyCampaignResponse(req, successCallback, errorCallback); };
                               req.send(requestMain);
                           },
                       CopyCampaignResponse: function (req, successCallback, errorCallback) {
                               ///<summary>
                               /// Recieves the assign response
                               ///</summary>
                               ///<param name="req" Type="XMLHttpRequest">
                               /// The XMLHttpRequest response
                               ///</param>
                               ///<param name="successCallback" Type="Function">
                               /// The function to perform when an successfult response is returned.
                               /// For this message no data is returned so a success callback is not really necessary.
                               ///</param>
                               ///<param name="errorCallback" Type="Function">
                               /// The function to perform when an error is returned.
                               /// This function accepts a JScript error returned by the _getError function
                               ///</param>
                               if (req.readyState == 4) {
                               if (req.status == 200) {
                               if (successCallback != null)
                               { successCallback(); }
                               }
                               else {
                                   errorCallback(SDK.SAMPLES._getError(req.responseXML));
                               }
                           }
                       },
                       _getError: function (faultXml) {
                           ///<summary>
                           /// Parses the WCF fault returned in the event of an error.
                           ///</summary>
                           ///<param name="faultXml" Type="XML">
                           /// The responseXML property of the XMLHttpRequest response.
                           ///</param>
                           var errorMessage = "Unknown Error (Unable to parse the fault)";
                           if (typeof faultXml == "object") {
                               try {
                                   var bodyNode = faultXml.firstChild.firstChild;
                                   //Retrieve the fault node
                                   for (var i = 0; i < bodyNode.childNodes.length; i++) {
                                       var node = bodyNode.childNodes[i];
                                       //NOTE: This comparison does not handle the case where the XML namespace changes
                                       if ("s:Fault" == node.nodeName) {
                                       for (var j = 0; j < node.childNodes.length; j++) {
                                           var faultStringNode = node.childNodes[j];
                                           if ("faultstring" == faultStringNode.nodeName) {
                                               errorMessage = faultStringNode.text;
                                               break;
                                           }
                                       }
                                       break;
                                   }
                               }
                           }
                           catch (e) { };
                        }
                        return new Error(errorMessage);
                     },
                 __namespace: true
                };
                
                


                To understand how to parse the response please review my post on using the DOM parser.
                Now you can call the SDK.SAMPLES.CopyCampaignRequest function from your form jscript handler.


                Thats all there is to it!
                -

                Thursday, October 20, 2011

                Retrieve the Provisioned Multi-Language Pack (MUI) Version in Microsoft Dynamics CRM 2011 Using .NET or Jscript

                This illustration shows how to retrieve the provisioned multi-language pack (MUI) version in Microsoft Dynamics CRM 2011 with RetrieveProvisionedLanguagePackVersionRequest.   This example will be given in Jscript (SOAP) and in C# (.NET).
                  Ok, here is what the code looks like!
                  First in C#:

                  RetrieveProvisionedLanguagePackVersionRequest req = new RetrieveProvisionedLanguagePackVersionRequest();      
                  RetrieveProvisionedLanguagePackVersionResponse resp = (RetrieveProvisionedLanguagePackVersionResponse)slos.Execute(req);
                  
                  

                  If you need help instantiating a service object in .NET within a plugin check out this post:
                  http://mileyja.blogspot.com/2011/04/instantiating-service-object-within.html

                  Now here is the Jscript nicely formatted by the CRM 2011 SOAP formatter. Available at: http://crm2011soap.codeplex.com/

                  Now in Jscript


                  This example is asynchronous, if you want to learn how to make JScript SOAP calls synchronously please visit this posthttp://mileyja.blogspot.com/2011/07/using-jscript-to-access-soap-web.html

                  
                  if (typeof (SDK) == "undefined")
                     { SDK = { __namespace: true }; }
                         //This will establish a more unique namespace for functions in this library. This will reduce the 
                         // potential for functions to be overwritten due to a duplicate name when the library is loaded.
                         SDK.SAMPLES = {
                             _getServerUrl: function () {
                                 ///<summary>
                                 /// Returns the URL for the SOAP endpoint using the context information available in the form
                                 /// or HTML Web resource.
                                 ///</summary>
                                 var OrgServicePath = "/XRMServices/2011/Organization.svc/web";
                                 var serverUrl = "";
                                 if (typeof GetGlobalContext == "function") {
                                     var context = GetGlobalContext();
                                     serverUrl = context.getServerUrl();
                                 }
                                 else {
                                     if (typeof Xrm.Page.context == "object") {
                                           serverUrl = Xrm.Page.context.getServerUrl();
                                     }
                                     else
                                     { throw new Error("Unable to access the server URL"); }
                                     }
                                    if (serverUrl.match(/\/$/)) {
                                         serverUrl = serverUrl.substring(0, serverUrl.length - 1);
                                     } 
                                     return serverUrl + OrgServicePath;
                                 }, 
                             RetrieveProvisionedLanguagePackVersionRequest: function () {
                                 var requestMain = ""
                                 requestMain += "<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">";
                                 requestMain += "  <s:Body>";
                                 requestMain += "    <Execute xmlns=\"http://schemas.microsoft.com/xrm/2011/Contracts/Services\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\">";
                                 requestMain += "      <request i:type=\"b:RetrieveProvisionedLanguagePackVersionRequest\" xmlns:a=\"http://schemas.microsoft.com/xrm/2011/Contracts\" xmlns:b=\"http://schemas.microsoft.com/crm/2011/Contracts\">";
                                 requestMain += "        <a:Parameters xmlns:c=\"http://schemas.datacontract.org/2004/07/System.Collections.Generic\">";
                                 requestMain += "          <a:KeyValuePairOfstringanyType>";
                                 requestMain += "            <c:key>Language</c:key>";
                                 requestMain += "            <c:value i:type=\"d:int\" xmlns:d=\"http://www.w3.org/2001/XMLSchema\">0</c:value>";
                                 requestMain += "          </a:KeyValuePairOfstringanyType>";
                                 requestMain += "        </a:Parameters>";
                                 requestMain += "        <a:RequestId i:nil=\"true\" />";
                                 requestMain += "        <a:RequestName>RetrieveProvisionedLanguagePackVersion</a:RequestName>";
                                 requestMain += "      </request>";
                                 requestMain += "    </Execute>";
                                 requestMain += "  </s:Body>";
                                 requestMain += "</s:Envelope>";
                                 var req = new XMLHttpRequest();
                                 req.open("POST", SDK.SAMPLES._getServerUrl(), true)
                                 // Responses will return XML. It isn't possible to return JSON.
                                 req.setRequestHeader("Accept", "application/xml, text/xml, */*");
                                 req.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
                                 req.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/xrm/2011/Contracts/Services/IOrganizationService/Execute");
                                 var successCallback = null;
                                 var errorCallback = null;
                                 req.onreadystatechange = function () { SDK.SAMPLES.RetrieveProvisionedLanguagePackVersionResponse(req, successCallback, errorCallback); };
                                 req.send(requestMain);
                             },
                         RetrieveProvisionedLanguagePackVersionResponse: function (req, successCallback, errorCallback) {
                                 ///<summary>
                                 /// Recieves the assign response
                                 ///</summary>
                                 ///<param name="req" Type="XMLHttpRequest">
                                 /// The XMLHttpRequest response
                                 ///</param>
                                 ///<param name="successCallback" Type="Function">
                                 /// The function to perform when an successfult response is returned.
                                 /// For this message no data is returned so a success callback is not really necessary.
                                 ///</param>
                                 ///<param name="errorCallback" Type="Function">
                                 /// The function to perform when an error is returned.
                                 /// This function accepts a JScript error returned by the _getError function
                                 ///</param>
                                 if (req.readyState == 4) {
                                 if (req.status == 200) {
                                 if (successCallback != null)
                                 { successCallback(); }
                                 }
                                 else {
                                     errorCallback(SDK.SAMPLES._getError(req.responseXML));
                                 }
                             }
                         },
                         _getError: function (faultXml) {
                             ///<summary>
                             /// Parses the WCF fault returned in the event of an error.
                             ///</summary>
                             ///<param name="faultXml" Type="XML">
                             /// The responseXML property of the XMLHttpRequest response.
                             ///</param>
                             var errorMessage = "Unknown Error (Unable to parse the fault)";
                             if (typeof faultXml == "object") {
                                 try {
                                     var bodyNode = faultXml.firstChild.firstChild;
                                     //Retrieve the fault node
                                     for (var i = 0; i < bodyNode.childNodes.length; i++) {
                                         var node = bodyNode.childNodes[i];
                                         //NOTE: This comparison does not handle the case where the XML namespace changes
                                         if ("s:Fault" == node.nodeName) {
                                         for (var j = 0; j < node.childNodes.length; j++) {
                                             var faultStringNode = node.childNodes[j];
                                             if ("faultstring" == faultStringNode.nodeName) {
                                                 errorMessage = faultStringNode.text;
                                                 break;
                                             }
                                         }
                                         break;
                                     }
                                 }
                             }
                             catch (e) { };
                          }
                          return new Error(errorMessage);
                       },
                   __namespace: true
                  };
                  
                  


                  To understand how to parse the response please review my post on using the DOM parser.
                  Now you can call the SDK.SAMPLES.RetrieveProvisionedLanguagePackVersionRequest function from your form jscript handler.


                  Thats all there is to it!
                  -

                  Wow, I Just Hit 100,000 Page Views

                  Thanks to all my readers, I have hit a milestone of 100,000 page views.  I am currently getting around 25,000 hits a month now and I had my best day last week with 1501 hits in one day!  This blog has grown much faster than I thought it could and I  haven't had a month since I started doing it seriously where I haven't gained readers.



                  Thanks everyone!

                  Wednesday, October 19, 2011

                  Copy Products From an Opportunity to a Sales Order in Microsoft Dynamics CRM 2011 Using .NET or Jscript

                  This illustration shows how to copy products from an opportunity to a sales order (SalesOrder) in Microsoft Dynamics CRM 2011 with GetSalesOrderProductsFromOpportunityRequest.   This example will be given in Jscript (SOAP) and in C# (.NET).
                    Ok, here is what the code looks like!
                    First in C#:

                    GetSalesOrderProductsFromOpportunityRequest req = new GetSalesOrderProductsFromOpportunityRequest();
                    req.OpportunityId = new Guid("AE2A290D-53FA-E011-8E76-1CC1DEF1353B");
                    req.SalesOrderId = new Guid("39CA1CAB-53FA-E011-8E76-1CC1DEF1353B");
                    GetSalesOrderProductsFromOpportunityResponse resp = (GetSalesOrderProductsFromOpportunityResponse)slos.Execute(req);
                    

                    If you need help instantiating a service object in .NET within a plugin check out this post:
                    http://mileyja.blogspot.com/2011/04/instantiating-service-object-within.html

                    Now here is the Jscript nicely formatted by the CRM 2011 SOAP formatter. Available at: http://crm2011soap.codeplex.com/

                    Now in Jscript


                    This example is asynchronous, if you want to learn how to make JScript SOAP calls synchronously please visit this posthttp://mileyja.blogspot.com/2011/07/using-jscript-to-access-soap-web.html

                    
                    if (typeof (SDK) == "undefined")
                       { SDK = { __namespace: true }; }
                           //This will establish a more unique namespace for functions in this library. This will reduce the 
                           // potential for functions to be overwritten due to a duplicate name when the library is loaded.
                           SDK.SAMPLES = {
                               _getServerUrl: function () {
                                   ///<summary>
                                   /// Returns the URL for the SOAP endpoint using the context information available in the form
                                   /// or HTML Web resource.
                                   ///</summary>
                                   var OrgServicePath = "/XRMServices/2011/Organization.svc/web";
                                   var serverUrl = "";
                                   if (typeof GetGlobalContext == "function") {
                                       var context = GetGlobalContext();
                                       serverUrl = context.getServerUrl();
                                   }
                                   else {
                                       if (typeof Xrm.Page.context == "object") {
                                             serverUrl = Xrm.Page.context.getServerUrl();
                                       }
                                       else
                                       { throw new Error("Unable to access the server URL"); }
                                       }
                                      if (serverUrl.match(/\/$/)) {
                                           serverUrl = serverUrl.substring(0, serverUrl.length - 1);
                                       } 
                                       return serverUrl + OrgServicePath;
                                   }, 
                               GetSalesOrderProductsFromOpportunityRequest: function () {
                                   var requestMain = ""
                                   requestMain += "<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">";
                                   requestMain += "  <s:Body>";
                                   requestMain += "    <Execute xmlns=\"http://schemas.microsoft.com/xrm/2011/Contracts/Services\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\">";
                                   requestMain += "      <request i:type=\"b:GetSalesOrderProductsFromOpportunityRequest\" xmlns:a=\"http://schemas.microsoft.com/xrm/2011/Contracts\" xmlns:b=\"http://schemas.microsoft.com/crm/2011/Contracts\">";
                                   requestMain += "        <a:Parameters xmlns:c=\"http://schemas.datacontract.org/2004/07/System.Collections.Generic\">";
                                   requestMain += "          <a:KeyValuePairOfstringanyType>";
                                   requestMain += "            <c:key>OpportunityId</c:key>";
                                   requestMain += "            <c:value i:type=\"d:guid\" xmlns:d=\"http://schemas.microsoft.com/2003/10/Serialization/\">ae2a290d-53fa-e011-8e76-1cc1def1353b</c:value>";
                                   requestMain += "          </a:KeyValuePairOfstringanyType>";
                                   requestMain += "          <a:KeyValuePairOfstringanyType>";
                                   requestMain += "            <c:key>SalesOrderId</c:key>";
                                   requestMain += "            <c:value i:type=\"d:guid\" xmlns:d=\"http://schemas.microsoft.com/2003/10/Serialization/\">39ca1cab-53fa-e011-8e76-1cc1def1353b</c:value>";
                                   requestMain += "          </a:KeyValuePairOfstringanyType>";
                                   requestMain += "        </a:Parameters>";
                                   requestMain += "        <a:RequestId i:nil=\"true\" />";
                                   requestMain += "        <a:RequestName>GetSalesOrderProductsFromOpportunity</a:RequestName>";
                                   requestMain += "      </request>";
                                   requestMain += "    </Execute>";
                                   requestMain += "  </s:Body>";
                                   requestMain += "</s:Envelope>";
                                   var req = new XMLHttpRequest();
                                   req.open("POST", SDK.SAMPLES._getServerUrl(), true)
                                   // Responses will return XML. It isn't possible to return JSON.
                                   req.setRequestHeader("Accept", "application/xml, text/xml, */*");
                                   req.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
                                   req.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/xrm/2011/Contracts/Services/IOrganizationService/Execute");
                                   var successCallback = null;
                                   var errorCallback = null;
                                   req.onreadystatechange = function () { SDK.SAMPLES.GetSalesOrderProductsFromOpportunityResponse(req, successCallback, errorCallback); };
                                   req.send(requestMain);
                               },
                           GetSalesOrderProductsFromOpportunityResponse: function (req, successCallback, errorCallback) {
                                   ///<summary>
                                   /// Recieves the assign response
                                   ///</summary>
                                   ///<param name="req" Type="XMLHttpRequest">
                                   /// The XMLHttpRequest response
                                   ///</param>
                                   ///<param name="successCallback" Type="Function">
                                   /// The function to perform when an successfult response is returned.
                                   /// For this message no data is returned so a success callback is not really necessary.
                                   ///</param>
                                   ///<param name="errorCallback" Type="Function">
                                   /// The function to perform when an error is returned.
                                   /// This function accepts a JScript error returned by the _getError function
                                   ///</param>
                                   if (req.readyState == 4) {
                                   if (req.status == 200) {
                                   if (successCallback != null)
                                   { successCallback(); }
                                   }
                                   else {
                                       errorCallback(SDK.SAMPLES._getError(req.responseXML));
                                   }
                               }
                           },
                           _getError: function (faultXml) {
                               ///<summary>
                               /// Parses the WCF fault returned in the event of an error.
                               ///</summary>
                               ///<param name="faultXml" Type="XML">
                               /// The responseXML property of the XMLHttpRequest response.
                               ///</param>
                               var errorMessage = "Unknown Error (Unable to parse the fault)";
                               if (typeof faultXml == "object") {
                                   try {
                                       var bodyNode = faultXml.firstChild.firstChild;
                                       //Retrieve the fault node
                                       for (var i = 0; i < bodyNode.childNodes.length; i++) {
                                           var node = bodyNode.childNodes[i];
                                           //NOTE: This comparison does not handle the case where the XML namespace changes
                                           if ("s:Fault" == node.nodeName) {
                                           for (var j = 0; j < node.childNodes.length; j++) {
                                               var faultStringNode = node.childNodes[j];
                                               if ("faultstring" == faultStringNode.nodeName) {
                                                   errorMessage = faultStringNode.text;
                                                   break;
                                               }
                                           }
                                           break;
                                       }
                                   }
                               }
                               catch (e) { };
                            }
                            return new Error(errorMessage);
                         },
                     __namespace: true
                    };
                    
                    


                    To understand how to parse the response please review my post on using the DOM parser.
                    Now you can call the SDK.SAMPLES.GetSalesOrderProductsFromOpportunityRequest function from your form jscript handler.


                    Thats all there is to it!
                    -