javascript - 使用 JavaScript 和 REST OData 查询 CRM 2011 AppointmentSet 时如何测试 d.data.results 中存在哪些数据

标签 javascript rest dynamics-crm-2011 odata appointment

我正在尝试填充我的帐户表单上的一个字段,该字段显示帐户已完成约会的最后实际结束日期。我的查询似乎完全按照我想要的方式工作。我用了Dynamics XRM Tools解决方案来创建我的查询,但我无法处理如果帐户没有完成的事件或我创建一个根本没有约会的新帐户会发生什么情况。

我正在尝试测试 JavaScript 的 ExecuteQuery 函数中返回到我的 success 方法的值 data.d.results。

当帐户是新创建的或帐户没有完成的约会事件时,Visual Studio 中即时窗口中的 data.d.results 定义如下:

[]

    [prototype]: []

我希望能够测试这种情况是否发生,然后阻止尝试将实际结束日期值设置到该字段。

我的代码如下:

/// <reference path="JQuery.js" />
/// <reference path="SDK.REST.js" />
/// <reference path="json2.js" />
// function to set read only fields on form load
function HarrionAB_AccountForm_OnLoad() {
    debugger;
    var accountId = Xrm.Page.data.entity.getId().replace("{", "").replace("}", "");
    if (accountId != "") {
        RetrieveRecords(accountId);
    }
}

function RetrieveRecords(id) {

    // create the odata query
    var query = "/AppointmentSet?$select=*&$top=1&$orderby=ActualEnd desc&$filter=RegardingObjectId/Id eq guid'" + id + "' and StateCode/Value eq 1 and ActivityTypeCode eq 'appointment'";
    ExecuteQuery(query);
}

//
// ExecuteQuery executes the specified OData Query asyncronously
//
// NOTE: Requires JSON and jQuery libraries. Review this Microsoft MSDN article before 
//       using this script http://msdn.microsoft.com/en-us/library/gg328025.aspx
//
function ExecuteQuery(ODataQuery) {

    var serverUrl = Xrm.Page.context.getServerUrl();

    // Adjust URL for differences between on premise and online 
    if (serverUrl.match(/\/$/)) {
        serverUrl = serverUrl.substring(0, serverUrl.length - 1);
    }

    var ODataURL = serverUrl + "/XRMServices/2011/OrganizationData.svc" + ODataQuery;

    $.ajax({
        type: "GET",
        contentType: "application/json; charset=utf-8",
        datatype: "json",
        url: ODataURL,
        beforeSend: function (XMLHttpRequest) {
            XMLHttpRequest.setRequestHeader("Accept", "application/json");
        },
        success: function (data, textStatus, XmlHttpRequest) {
            //
            // Handle result from successful execution
            //
            // e.g. data.d.results
            if (data.d.results != "[]") { // I NEED TO TEST HERE
                Xrm.Page.getAttribute("new_lastvisit").setValue(new Date(parseInt(data.d.results[0].ActualEnd.substr(6))));
            }
        },
        error: function (XmlHttpRequest, textStatus, errorObject) {
            //
            // Handle result from unsuccessful execution
            //
            alert("OData Execution Error Occurred");
        }
    });
}

//
// Error Handler
//
function ErrorHandler(XMLHttpRequest, textStatus, errorObject)
{ alert("Error Occurred : " + textStatus + ": " + JSON.parse(XMLHttpRequest.responseText).error.message.value); }

任何帮助将不胜感激

最佳答案

该值是一个数组,因此您可以检查它是否包含任何值,如下所示:

if (data.d.results.length > 0) {
    //Do whatever you need to in here
}

关于javascript - 使用 JavaScript 和 REST OData 查询 CRM 2011 AppointmentSet 时如何测试 d.data.results 中存在哪些数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19729936/

相关文章:

javascript - 当我使用 JS toggle() 显示它时,为什么在我的 div 元素下方形成一个大间隙?

javascript - jQuery/JavaScript 函数无法识别 "-webkit-clip-path"?

rest - 在 Go 语言中执行 POST 请求时出现 403 forbidden 错误

c# - Dynamics CRM 2011 - LINQ - 检索客户和联系人之间的连接

plugins - 客户关系管理 2011 : How to Update record in a Create Plugin?

javascript - 如何导入基于 promise 的变量以在另一个模块中使用(javascript)?

javascript - 将json数据放入canvas html5

java - Json 忽略类名而不是属性

rest - 通过 REST api (v2) 将文章发布到公司 LinkedIN 页面

multithreading - CRM 2011对每个线程使用组织服务代理对插入进行多线程处理