0

アカウントが完了した予定の最後の実際の終了日を示すアカウント フォームのフィールドにデータを入力しようとしています。私のクエリは、私が望むとおりに機能しているようです。Dynamics XRM ツールソリューションを使用してクエリを作成しましたが、たとえば、アカウントに完了したアクティビティがない場合や、予定がまったくない新しいアカウントを作成した場合にどうなるかを処理できません。

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

どんな助けでも大歓迎です

4

1 に答える 1

2

値は配列であるため、次のように値が含まれているかどうかを確認できます。

if (data.d.results.length > 0) {
    //Do whatever you need to in here
}
于 2013-11-02T00:33:15.780 に答える