Wednesday, November 30, 2011

Determine the User ID GUID of a Calling User in Microsoft Dynamics CRM 2011 Using .NET or Jscript With WhoAmIRequest

This illustration shows how to determine the user id guid of a calling user in Microsoft Dynamics CRM 2011 with WhoAmIRequest.  This example will be given in Jscript (SOAP) and in C# (.NET).
    Ok, here is what the code looks like!
    First in C#:

     WhoAmIRequest req = new WhoAmIRequest();
     WhoAmIResponse resp = (WhoAmIResponse)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;
                   }, 
               WhoAmIRequest: 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:WhoAmIRequest\" 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>WhoAmI</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.WhoAmIResponse(req, successCallback, errorCallback); };
                   req.send(requestMain);
               },
           WhoAmIResponse: 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.WhoAmIRequest function from your form jscript handler.


    Thats all there is to it!
    -

    Tuesday, November 29, 2011

    Copy a Dynamic Marketing List to A Static Marketing List in Microsoft Dynamics CRM 2011 Using .NET or Jscript

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

      CopyDynamicListToStaticRequest req = new CopyDynamicListToStaticRequest();
      req.ListId = new Guid("ABBF7AC2-930F-E111-8DB2-1CC1DEF1B5FF");
      CopyDynamicListToStaticResponse resp = (CopyDynamicListToStaticResponse)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;
                     }, 
                 CopyDynamicListToStaticRequest: 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:CopyDynamicListToStaticRequest\" 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>ListId</c:key>";
                     requestMain += "            <c:value i:type=\"d:guid\" xmlns:d=\"http://schemas.microsoft.com/2003/10/Serialization/\">abbf7ac2-930f-e111-8db2-1cc1def1b5ff</c:value>";
                     requestMain += "          </a:KeyValuePairOfstringanyType>";
                     requestMain += "        </a:Parameters>";
                     requestMain += "        <a:RequestId i:nil=\"true\" />";
                     requestMain += "        <a:RequestName>CopyDynamicListToStatic</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.CopyDynamicListToStaticResponse(req, successCallback, errorCallback); };
                     req.send(requestMain);
                 },
             CopyDynamicListToStaticResponse: 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.CopyDynamicListToStaticRequest function from your form jscript handler.


      Thats all there is to it!
      -

      Monday, November 28, 2011

      Initialize a New Entity Instance From Another Entity Instance in Microsoft Dynamics CRM 2011 Using .NET or Jscript Using InitializeFromRequest

      This illustration shows how to initialize a new entity instance from another entity  in Microsoft Dynamics CRM 2011 with InitializeFromRequest.  This example will be given in Jscript (SOAP) and in C# (.NET).

      Interesting Notes:  This is a really cool request that I didn't even realize existed within the SDK until recently.  Regardless of type, this request allows you to initialize a new instance an entity based on another entity.  The request will just copy the values over for any fields where the names match.  In my example I will copy values from an Account to a new Contact entity instance.  You will also want to note that this request does not save the new entity, it just initializes it,  you will have to perform any save operation separately on the newly initialized entity instance.
        Ok, here is what the code looks like!
        First in C#:

        InitializeFromRequest req = new InitializeFromRequest();
        //set the source entity
        req.EntityMoniker = new EntityReference(Account.EntityLogicalName, new Guid("D2B265C9-5F0C-E111-BF0B-1CC1DEE89AA8"));
        req.TargetEntityName = Contact.EntityLogicalName;
        req.TargetFieldType = TargetFieldType.All;
        
        InitializeFromResponse resp = (InitializeFromResponse)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;
                       }, 
                   InitializeFromRequest: 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:InitializeFromRequest\" 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>EntityMoniker</c:key>";
                       requestMain += "            <c:value i:type=\"a:EntityReference\">";
                       requestMain += "              <a:Id>d2b265c9-5f0c-e111-bf0b-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>TargetEntityName</c:key>";
                       requestMain += "            <c:value i:type=\"d:string\" xmlns:d=\"http://www.w3.org/2001/XMLSchema\">contact</c:value>";
                       requestMain += "          </a:KeyValuePairOfstringanyType>";
                       requestMain += "          <a:KeyValuePairOfstringanyType>";
                       requestMain += "            <c:key>TargetFieldType</c:key>";
                       requestMain += "            <c:value i:type=\"b:TargetFieldType\">All</c:value>";
                       requestMain += "          </a:KeyValuePairOfstringanyType>";
                       requestMain += "        </a:Parameters>";
                       requestMain += "        <a:RequestId i:nil=\"true\" />";
                       requestMain += "        <a:RequestName>InitializeFrom</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.InitializeFromResponse(req, successCallback, errorCallback); };
                       req.send(requestMain);
                   },
               InitializeFromResponse: 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.InitializeFromRequest function from your form jscript handler.


        Thats all there is to it!
        -

        Friday, November 25, 2011

        Happy Thanksgiving Everyone!!!

        I am very thankful for all of you that find this blog useful.  I just wanted to wish you all a Happy ThanksGiving!!

        I have a lot to be thankful for. :)

        Wednesday, November 23, 2011

        Get a Time Zone Code Based on Time Zone Name in Microsoft Dynamics CRM 2011 Using .NET or Jscript

        This illustration shows how to get a time zone code based  in Microsoft Dynamics CRM 2011 with GetTimeZoneCodeByLocalizedNameRequest.  This example will be given in Jscript (SOAP) and in C# (.NET).

        Interesting Notes:  This request felt like sort of an odd duck.  I am not really sure about the actual utility of this request, but it works.  I provided the localized standard name for the time zone based on the locale ID which I also provided, and in return all it gave me a response that contained only an integer value of 20.  This value appears to correspond a Microsoft SQL Server proprietary time zone code for which I was able to find an old reference here: http://msdn.microsoft.com/en-us/library/aa226764(v=sql.80).aspx
        If you look at the table on the linked page you will see that 20 does correspond with Central Time, so if anyone has really found a use for this request, please comment below and let me know what it is.  Thanks!
          Ok, here is what the code looks like!
          First in C#:

          GetTimeZoneCodeByLocalizedNameRequest req = new GetTimeZoneCodeByLocalizedNameRequest();
          req.LocaleId = 1033;
          req.LocalizedStandardName = "Central Standard Time";
          GetTimeZoneCodeByLocalizedNameResponse resp = (GetTimeZoneCodeByLocalizedNameResponse)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;
                         }, 
                     GetTimeZoneCodeByLocalizedNameRequest: 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:GetTimeZoneCodeByLocalizedNameRequest\" 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>LocalizedStandardName</c:key>";
                         requestMain += "            <c:value i:type=\"d:string\" xmlns:d=\"http://www.w3.org/2001/XMLSchema\">Central Standard Time</c:value>";
                         requestMain += "          </a:KeyValuePairOfstringanyType>";
                         requestMain += "          <a:KeyValuePairOfstringanyType>";
                         requestMain += "            <c:key>LocaleId</c:key>";
                         requestMain += "            <c:value i:type=\"d:int\" xmlns:d=\"http://www.w3.org/2001/XMLSchema\">1033</c:value>";
                         requestMain += "          </a:KeyValuePairOfstringanyType>";
                         requestMain += "        </a:Parameters>";
                         requestMain += "        <a:RequestId i:nil=\"true\" />";
                         requestMain += "        <a:RequestName>GetTimeZoneCodeByLocalizedName</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.GetTimeZoneCodeByLocalizedNameResponse(req, successCallback, errorCallback); };
                         req.send(requestMain);
                     },
                 GetTimeZoneCodeByLocalizedNameResponse: 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.GetTimeZoneCodeByLocalizedNameRequest function from your form jscript handler.


          Thats all there is to it!
          -

          Tuesday, November 22, 2011

          Use ReviseQuoteRequest to Return a Closed Quote to Draft Status As a Copy in Microsoft Dynamics CRM 2011 Using .NET or Jscript

          This illustration shows how to return a closed quote to draft status as a new copy/revision in Microsoft Dynamics CRM 2011 with ReviseQuoteRequest.  This example will be given in Jscript (SOAP) and in C# (.NET).
            Ok, here is what the code looks like!
            First in C#:

            ReviseQuoteRequest req = new ReviseQuoteRequest();
            req.ColumnSet = new ColumnSet(true);
            req.QuoteId = new Guid("8059E120-1515-E111-8E08-1CC1DEF1353B");
            ReviseQuoteResponse resp = (ReviseQuoteResponse)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;
                           }, 
                       ReviseQuoteRequest: 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:ReviseQuoteRequest\" 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>QuoteId</c:key>";
                           requestMain += "            <c:value i:type=\"d:guid\" xmlns:d=\"http://schemas.microsoft.com/2003/10/Serialization/\">8059e120-1515-e111-8e08-1cc1def1353b</c:value>";
                           requestMain += "          </a:KeyValuePairOfstringanyType>";
                           requestMain += "          <a:KeyValuePairOfstringanyType>";
                           requestMain += "            <c:key>ColumnSet</c:key>";
                           requestMain += "            <c:value i:type=\"a:ColumnSet\">";
                           requestMain += "              <a:AllColumns>true</a:AllColumns>";
                           requestMain += "              <a:Columns xmlns:d=\"http://schemas.microsoft.com/2003/10/Serialization/Arrays\" />";
                           requestMain += "            </c:value>";
                           requestMain += "          </a:KeyValuePairOfstringanyType>";
                           requestMain += "        </a:Parameters>";
                           requestMain += "        <a:RequestId i:nil=\"true\" />";
                           requestMain += "        <a:RequestName>ReviseQuote</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.ReviseQuoteResponse(req, successCallback, errorCallback); };
                           req.send(requestMain);
                       },
                   ReviseQuoteResponse: 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.ReviseQuoteRequest function from your form jscript handler.


            Thats all there is to it!
            -

            Monday, November 21, 2011

            Add Multiple Entities (Members) to a Marketing List in Microsoft Dynamics CRM 2011 Using .NET or Jscript

            This illustration shows how to add a list of entities (members) to a marketing list in Microsoft Dynamics CRM 2011 with AddListMembersListRequest.  This example will be given in Jscript (SOAP) and in C# (.NET).

            Note: The entity type you add to your marketing list must be consistent with the entity type for the list and must be either an account, contact, or a lead.
              Ok, here is what the code looks like!
              First in C#:

              
              AddListMembersListRequest req = new AddListMembersListRequest();
              req.ListId = new Guid("6CAC04FC-930F-E111-8DB2-1CC1DEF1B5FF");
              //add the new list of marketing list memnbers
              req.MemberIds = new System.Guid[2];
              req.MemberIds[0] = new Guid("DCB265C9-5F0C-E111-BF0B-1CC1DEE89AA8");
              req.MemberIds[1] = new Guid("E4B265C9-5F0C-E111-BF0B-1CC1DEE89AA8");
              AddListMembersListResponse resp = (AddListMembersListResponse)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;
                             }, 
                         AddListMembersListRequest: 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:AddListMembersListRequest\" 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>ListId</c:key>";
                             requestMain += "            <c:value i:type=\"d:guid\" xmlns:d=\"http://schemas.microsoft.com/2003/10/Serialization/\">6cac04fc-930f-e111-8db2-1cc1def1b5ff</c:value>";
                             requestMain += "          </a:KeyValuePairOfstringanyType>";
                             requestMain += "          <a:KeyValuePairOfstringanyType>";
                             requestMain += "            <c:key>MemberIds</c:key>";
                             requestMain += "            <c:value i:type=\"d:ArrayOfguid\" xmlns:d=\"http://schemas.microsoft.com/2003/10/Serialization/Arrays\">";
                             requestMain += "              <d:guid>dcb265c9-5f0c-e111-bf0b-1cc1dee89aa8</d:guid>";
                             requestMain += "              <d:guid>e4b265c9-5f0c-e111-bf0b-1cc1dee89aa8</d:guid>";
                             requestMain += "            </c:value>";
                             requestMain += "          </a:KeyValuePairOfstringanyType>";
                             requestMain += "        </a:Parameters>";
                             requestMain += "        <a:RequestId i:nil=\"true\" />";
                             requestMain += "        <a:RequestName>AddListMembersList</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.AddListMembersListResponse(req, successCallback, errorCallback); };
                             req.send(requestMain);
                         },
                     AddListMembersListResponse: 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.AddListMembersListRequest function from your form jscript handler.


              Thats all there is to it!
              -

              Friday, November 18, 2011

              Copy Members of One Marketing List to Another Marketing List in Microsoft Dynamics CRM 2011 Using Jscript or .NET

              This illustration shows how to copy members of one marketing list to another marketing list in Microsoft Dynamics CRM 2011 with CopyMembersListRequest.  This example will be given in Jscript (SOAP) and in C# (.NET).
                Ok, here is what the code looks like!
                First in C#:

                CopyMembersListRequest req = new CopyMembersListRequest();
                //source marketing list
                req.SourceListId = new Guid("6CAC04FC-930F-E111-8DB2-1CC1DEF1B5FF");
                //target marketing list
                req.TargetListId = new Guid("0F981108-F011-E111-8E08-1CC1DEF1353B");
                CopyMembersListResponse resp = (CopyMembersListResponse)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;
                               }, 
                           CopyMembersListRequest: 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:CopyMembersListRequest\" 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>SourceListId</c:key>";
                               requestMain += "            <c:value i:type=\"d:guid\" xmlns:d=\"http://schemas.microsoft.com/2003/10/Serialization/\">6cac04fc-930f-e111-8db2-1cc1def1b5ff</c:value>";
                               requestMain += "          </a:KeyValuePairOfstringanyType>";
                               requestMain += "          <a:KeyValuePairOfstringanyType>";
                               requestMain += "            <c:key>TargetListId</c:key>";
                               requestMain += "            <c:value i:type=\"d:guid\" xmlns:d=\"http://schemas.microsoft.com/2003/10/Serialization/\">0f981108-f011-e111-8e08-1cc1def1353b</c:value>";
                               requestMain += "          </a:KeyValuePairOfstringanyType>";
                               requestMain += "        </a:Parameters>";
                               requestMain += "        <a:RequestId i:nil=\"true\" />";
                               requestMain += "        <a:RequestName>CopyMembersList</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.CopyMembersListResponse(req, successCallback, errorCallback); };
                               req.send(requestMain);
                           },
                       CopyMembersListResponse: 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.CopyMembersListRequest function from your form jscript handler.


                Thats all there is to it!
                -

                Thursday, November 17, 2011

                Reassign All Records Owned by a User in Microsoft Dynamics CRM 2011 Using ReassignObjectsSystemUserRequest

                This illustration shows how to remove reassign all records owned by a user in Microsoft Dynamics CRM 2011 with ReassignObjectsSystemUserRequest.  This example will be given in Jscript (SOAP) and in C# (.NET).

                NOTE: I am not totally sure why you would use this SDK message as opposed to ReassignObjectsOwnerRequest.  They are pretty close to the same request but the one previously linked works with both users and teams where this one can only reassign records from a user.  Maybe this one was created earlier and then they wanted to broaden it while leaving the other in place for some reason.
                  Ok, here is what the code looks like!
                  First in C#:

                  ReassignObjectsSystemUserRequest req = new ReassignObjectsSystemUserRequest();
                  //The user who's records will be reassigned
                  req.UserId = new Guid("6E219F51-0310-4C4D-8C60-1C524E2BA7B3");
                  //The new user to recieve the records
                  req.ReassignPrincipal = new EntityReference("systemuser", new Guid("32210640-2A11-E111-8D9C-1CC1DEF1B5FF"));
                  ReassignObjectsSystemUserResponse resp = (ReassignObjectsSystemUserResponse)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;
                                 }, 
                             ReassignObjectsSystemUserRequest: 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:ReassignObjectsSystemUserRequest\" 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>UserId</c:key>";
                                 requestMain += "            <c:value i:type=\"d:guid\" xmlns:d=\"http://schemas.microsoft.com/2003/10/Serialization/\">6e219f51-0310-4c4d-8c60-1c524e2ba7b3</c:value>";
                                 requestMain += "          </a:KeyValuePairOfstringanyType>";
                                 requestMain += "          <a:KeyValuePairOfstringanyType>";
                                 requestMain += "            <c:key>ReassignPrincipal</c:key>";
                                 requestMain += "            <c:value i:type=\"a:EntityReference\">";
                                 requestMain += "              <a:Id>32210640-2a11-e111-8d9c-1cc1def1b5ff</a:Id>";
                                 requestMain += "              <a:LogicalName>systemuser</a:LogicalName>";
                                 requestMain += "              <a:Name i:nil=\"true\" />";
                                 requestMain += "            </c:value>";
                                 requestMain += "          </a:KeyValuePairOfstringanyType>";
                                 requestMain += "        </a:Parameters>";
                                 requestMain += "        <a:RequestId i:nil=\"true\" />";
                                 requestMain += "        <a:RequestName>ReassignObjectsSystemUser</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.ReassignObjectsSystemUserResponse(req, successCallback, errorCallback); };
                                 req.send(requestMain);
                             },
                         ReassignObjectsSystemUserResponse: 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.ReassignObjectsSystemUserRequest function from your form jscript handler.


                  Thats all there is to it!
                  -

                  Wednesday, November 16, 2011

                  Remove an Entity (Member) From a Marketing List in Microsoft Dynamics CRM 2011 Using .NET or Jscript

                  This illustration shows how to remove an entity (member) from a marketing list in Microsoft Dynamics CRM 2011 with RemoveMemberListRequest.  This example will be given in Jscript (SOAP) and in C# (.NET).
                    Ok, here is what the code looks like!
                    First in C#:

                    RemoveMemberListRequest req = new RemoveMemberListRequest();
                    //we will remove an account from our marketing list
                    //entity type must be an account, contact, or lead
                    req.EntityId = new Guid("CCB265C9-5F0C-E111-BF0B-1CC1DEE89AA8");
                    //we will remove the account from this existing marketing list
                    req.ListId = new Guid("6CAC04FC-930F-E111-8DB2-1CC1DEF1B5FF");
                    RemoveMemberListResponse resp = (RemoveMemberListResponse)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;
                                   }, 
                               RemoveMemberListRequest: 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:RemoveMemberListRequest\" 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>ListId</c:key>";
                                   requestMain += "            <c:value i:type=\"d:guid\" xmlns:d=\"http://schemas.microsoft.com/2003/10/Serialization/\">6cac04fc-930f-e111-8db2-1cc1def1b5ff</c:value>";
                                   requestMain += "          </a:KeyValuePairOfstringanyType>";
                                   requestMain += "          <a:KeyValuePairOfstringanyType>";
                                   requestMain += "            <c:key>EntityId</c:key>";
                                   requestMain += "            <c:value i:type=\"d:guid\" xmlns:d=\"http://schemas.microsoft.com/2003/10/Serialization/\">ccb265c9-5f0c-e111-bf0b-1cc1dee89aa8</c:value>";
                                   requestMain += "          </a:KeyValuePairOfstringanyType>";
                                   requestMain += "        </a:Parameters>";
                                   requestMain += "        <a:RequestId i:nil=\"true\" />";
                                   requestMain += "        <a:RequestName>RemoveMemberList</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.RemoveMemberListResponse(req, successCallback, errorCallback); };
                                   req.send(requestMain);
                               },
                           RemoveMemberListResponse: 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.RemoveMemberListRequest function from your form jscript handler.


                    Thats all there is to it!
                    -