Ms CRM中的Javascript(带有odata查询)不起作用

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

本文关键字:odata 查询 不起作用 带有 CRM 中的 Javascript Ms      更新时间:2023-09-26

我创建了一个javaScript(顺便说一下,我昨天才学会的)

此脚本设置为在帐户实体的 OnSave 事件时触发。我使用我在互联网上找到的查询构建器工具构建一个 odata 查询,该工具应该检索所有任务($select=ActivityId,CreatedOn ),这些任务是在 2015-01-26T18:30:00.000Z 之前创建的($filter=CreatedOn ge datetime'2015-01-26T18:30:00.000Z')

这是来自查询生成器的实际查询:

$.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);
    }
});

在查询生成器中,它返回结果:

[
    {
        "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"
    }
]

在结果中,我发现在返回日期创建的值"CreatedOn": "/Date(1422343425000)/",.。

我想检索在帐户实体中创建新记录之前 7 天创建的所有任务..所以我写了逻辑在通用值方面得到了当前的 dat var current_date = Date().valueOf()并在 milisecs 中减去了 7 天(7*24*60*60*1000=604800000) var week_earlier = current_date - 604800000;

在下面的代码中,您可以看到我做了什么

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);
        }
    });

}

但它不起作用....它显示

"error Bad Request"

我还尝试使用浏览器的 URL 进行查询

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). 

但它也抛出了一个错误

<!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>

谁能告诉我我哪里出错了?(我假设我提到的日期值未被 crm odata 服务访问)或者如何将日期转换为这种格式"yyyy-mm-ddThh:mm:ss.uuuZ"

您可以使用 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();

您在上面的代码中遇到的一个问题是您没有构造新的 Date 对象。您的current_date实际上返回的日期字符串不是以毫秒为单位的日期表示形式。你需要新的日期();