简体   繁体   中英

Javascript in Ms CRM (with odata query) is not working?

I created a javaScript(by the way i learned it yesterday only )

this script is set to fire upon OnSave event of Accounts entity . I build a odata query using query builder tool that i found on Internet which is supposed to retrive all the tasks ($select=ActivityId,CreatedOn ) and whcih are created before 2015-01-26T18:30:00.000Z ($filter=CreatedOn ge datetime'2015-01-26T18:30:00.000Z')

here is the actual query from query builder :

$.ajax({
    type: "GET",
    contentType: "application/json; charset=utf-8",
    datatype: "json",
    url: Xrm.Page.context.getClientUrl() + "/XRMServices/2011/OrganizationData.svc/TaskSet?$select=ActivityId,CreatedOn&$filter=CreatedOn ge datetime'2015-01-26T18:30:00.000Z'",
    beforeSend: function (XMLHttpRequest) {
        XMLHttpRequest.setRequestHeader("Accept", "application/json");
    },
    async: true,
    success: function (data, textStatus, xhr) {
        var results = data.d.results;
   for (var i = 0; i < results.length; i++) {
        var ActivityId = results[i].ActivityId;
        var CreatedOn = results[i].CreatedOn;
   }
    },
    error: function (xhr, textStatus, errorThrown) {
        alert(textStatus + " " + errorThrown);
    }
});

in the query builder it returns result :

[
    {
        "CreatedOn": "/Date(1422342587000)/",
        "ActivityId": "c23ba479-f3a5-e411-80dc-c4346bada6a4"
    },
    {
        "CreatedOn": "/Date(1422342783000)/",
        "ActivityId": "ba7754ee-f3a5-e411-80dc-c4346bada6a4"
    },
    {
        "CreatedOn": "/Date(1422343425000)/",
        "ActivityId": "12d40a6d-f5a5-e411-80dc-c4346bada6a4"
    }
]

in the result i found that created on returns date as value "CreatedOn": "/Date(1422343425000)/", ..

I wanted to retrive all the tasks created 7 days prior to creating an new record in Accounts entity ..So i wrote logic got the current dat in terms of generic value var current_date = Date().valueOf() and subtracted 7 days in milisecs (7*24*60*60*1000=604800000) var week_earlier = current_date - 604800000;

in the code below you can see what i did

function retrive()
{
    //var date =2015-01-26T18:30:00.000Z;
    var current_date = Date().valueOf();
    var week_earlier = current_date - 604800000;



    $.ajax({
        type: "GET",
        contentType: "application/json; charset=utf-8",
        datatype: "json",
        url: Xrm.Page.context.getClientUrl() + "/XRMServices/2011/OrganizationData.svc/TaskSet?$select=ActivityId,CreatedOn&$filter=CreatedOn ge datetime'"+week_earlier+"'",
        beforeSend: function (XMLHttpRequest) {
            XMLHttpRequest.setRequestHeader("Accept", "application/json");
        },
        async: true,
        success: function (data, textStatus, xhr) {
            var results = data.d.results;
            for (var i = 0; i < results.length; i++) {
                var ActivityId = results[i].ActivityId;
                var CreatedOn = results[i].CreatedOn;
            }

            alert("number of records found  :"+results.length);

        },
        error: function (xhr, textStatus, errorThrown) {
            alert(textStatus + " " + errorThrown);
        }
    });

}

but its not working....it shows

"error Bad Request"

and i also tried quering with the in the url of browser with

https://avikcompany.crm5.dynamics.com/XRMServices/2011/OrganizationData.svc/TaskSet?$select=CreatedOn,ActivityId&$filter=CreatedOn ge datetime'1422342587000'(this '1422342587000' is present in result  of the previously fired query). 

but it also threw an error

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

    <head>
        <link rel="stylesheet" type="text/css" href="ErrorPageTemplate.css" >

        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

        <title>HTTP 400 Bad Request</title>

        <script src="errorPageStrings.js" language="javascript" type="text/javascript">
        </script>
        <script src="httpErrorPagesScripts.js" language="javascript" type="text/javascript">
        </script>
    </head>

    <body onLoad="javascript:initHomepage(); expandCollapse('infoBlockID', true); initGoBack(); initMoreInfo('infoBlockID');">

        <table width="730" cellpadding="0" cellspacing="0" border="0">

        <!-- Error title -->
            <tr>
                <td id="infoIconAlign" width="60" align="left" valign="top" rowspan="2">
                    <img src="info_48.png" id="infoIcon" alt="Info icon">
                </td>
                <td id="mainTitleAlign" valign="middle" align="left" width="*">
                    <h1 id="mainTitle">The webpage cannot be found</h1>
                </td>
            </tr>



            <tr>
                <!-- This row is for HTTP status code, as well as the divider-->
                <td id="http400Align" class="errorCodeAndDivider" align="right"><ID id="http400">&nbsp;HTTP 400</ID>
                    <div class="divider"></div>
                </td>
            </tr>


        <!-- Error Body -->

        <!-- What you can do -->
            <tr>
                <td>
                    &nbsp;
                </td>
                <td id="likelyCausesAlign" valign="top" align="left">
                    <h3 id="likelyCauses">Most likely causes:</h3>
                    <ul>
                        <li id="causeErrorInAddress">There might be a typing error in the address.</li>
                        <li id="causeLinkOutOfDate">If you clicked on a link, it may be out of date.</li>
                    </ul>
                </td>
            </tr>

            <tr>
                <td>
                    &nbsp;
                </td>
                <td id="whatToTryAlign" valign="top" align="left">
                    <h2 id="whatToTry">What you can try:</h2>
                </td>
            </tr>

        <!-- retype address -->
            <tr>
                <td >
                    &nbsp;
                </td>
                <td id="retypeAddressAlign" align="left" valign="middle">
                    <h4>
                        <table>
                          <tr>
                              <td valign="top">
                                  <img src="bullet.png" border="0" alt="" class="actionIcon">
                              </td>
                              <td valign="top">
                                  <ID id="retypeAddress">Retype the address.</ID>
                              </td>
                          <tr>
                        </table>
                    </h4>
                </td>
            </tr>

        <!-- back to previous page -->
            <tr>
                <td >
                    &nbsp;
                </td>
                <td id="goBackAlign" align="left" valign="middle">
                    <h4>
                        <table>
                          <tr>
                              <td valign="top">
                                  <img src="bullet.png" border="0" alt="" class="actionIcon">
                              </td>
                              <td valign="top">
                                  <span id="goBackContainer"></span><noscript id="goBack">Go back to the previous page.</noscript>
                              </td>
                          </tr>
                        </table>
                    </h4>
                </td>
            </tr>


        <!-- top level domain-->
            <tr>
                <td >
                    &nbsp;
                </td>
                <td id="mainSiteAlign" align="left" valign="middle">
                    <h4>
                        <table>
                          <tr>
                              <td valign="top">
                                  <img src="bullet.png" border="0" alt="" class="actionIcon">
                              </td>
                              <td valign="top">
                                  <ID id="mainSite1">Go to </ID><span id="homepageContainer"><noscript id="mainSite2">the main site</noscript></span><ID id="mainSite3">&nbsp;and look for the information you want.</ID>
                              </td>
                          </tr>
                        </table>
                    </h4>
                </td>
            </tr>

        <!-- InfoBlock -->
            <tr>
                <td id="infoBlockAlign" align="right" valign="top">
                    &nbsp;
                </td>
                <td id="moreInfoAlign" align="left" valign="middle">
                    <h4>
                        <table>
                          <tr>
                              <td valign="top">
                                  <a href="#" onclick="javascript:expandCollapse('infoBlockID', true); return false;"><img src="down.png" id="infoBlockIDImage" border="0" class="actionIcon" alt="More information"></a>
                              </td>
                              <td valign="top">
                                  <span id="moreInfoContainer"></span>
                                  <noscript><ID id="moreInformation">More information</ID></noscript>
                              </td>
                          </tr>
                        </table>
                    </h4>
                    <div id="infoBlockID" class="infoBlock">
                        <p id="errorExplanation">This error (HTTP 400 Bad Request) means that Internet Explorer was able to connect to the web server, but the webpage could not be found because of a problem with the address.</p>
                        <p id="moreInfoSeeHelp">For more information about HTTP errors, see Help.</p>
                    </div>
                </td>
            </tr>
        </table>

    </body>
</html>

Can any body tell me where i went wrong ? (I am asuming the date value i mentioned is not accepeted by the crm odata service ) Or how to convert date to this format "yyyy-mm-ddThh:mm:ss.uuuZ"

You can easily get the date in that format by using toISOString();

http://jsfiddle.net/j5m97nfv/3/

var current_date = new Date().valueOf();
var week_earlier = new Date(current_date - 604800000);
var n = week_earlier.toISOString();

One problem you have in your code above is you are not constructing a new Date object. Your current_date is actually returning a date string that is not the date's representation in milliseconds. You need new Date();

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM