0

レコードを更新するには、次のものがあります。

var currentTimeBeingTracked = getCurrentTimeTracked();

if (currentTimeBeingTracked != null) {
    currentTimeBeingTracked.dagency_EndDateTime = new Date();

    var jsonTrackedTime = window.JSON.stringify(currentTimeBeingTracked);

    $.ajax({ type: "POST",
        contentType: "application/json; charset=utf-8",
        datatype: "json",
        url: ODataPath + "/dagency_trackedtimeSet",
        data: jsonTrackedTime,
        beforeSend: function (XMLHttpRequest) {
            XMLHttpRequest.setRequestHeader("Accept", "application/json");
        },
        success: function (data, textStatus, XmlHttpRequest) {
            var newTimeTracked = data.d;
            RetrieveTrackedTimes();
            alert("Stopped tracking your time successfully.");
            window.top.document.getElementById("contentIFrame").contentWindow.location.reload();
        },
        error: function (XmlHttpRequest, textStatus, errorThrown) {
            debugger;
            alert("Couldn't stop tracking your time. " + XmlHttpRequest.responseText);
        }
    });
}

しかし、私はこのメッセージを受け取り続けます:

リクエストストリームの処理中にエラーが発生しました。プロパティ「CreatedOn」のリクエストペイロードから、プロパティの予想されるタイプであるタイプ「DateTime」に値を変換中にエラーが発生しました。詳細については、内部例外を参照してください。

レコードを作成するには、完全に機能する次のコードを使用します。

var trackedTime = new Object();

var timeEntryName = prompt("Please enter a name for the tracked time:", "New time entry");
if (!timeEntryName) {
    return false;
}

var isBillable = confirm("Is this task billable? If Yes, press OK.");

trackedTime.dagency_name = timeEntryName;
trackedTime.dagency_StartDateTime = new Date();
trackedTime.dagency_Billable = isBillable;

var slot = new Object();
slot.Id = crmForm.ObjectId;
trackedTime.dagency_Slot = slot;

var jsonTrackedTime = window.JSON.stringify(trackedTime);

$.ajax({ type: "POST",
    contentType: "application/json; charset=utf-8",
    datatype: "json",
    url: ODataPath + "/dagency_trackedtimeSet",
    data: jsonTrackedTime,
    beforeSend: function (XMLHttpRequest) {
        XMLHttpRequest.setRequestHeader("Accept", "application/json");
    },
    success: function (data, textStatus, XmlHttpRequest) {
        var newTimeTracked = data.d;
        RetrieveTrackedTimes();
        alert("Started tracking your time successfully.");
        window.top.document.getElementById("contentIFrame").contentWindow.location.reload();
    },
    error: function (XmlHttpRequest, textStatus, errorThrown) {
        alert("Couldn't start tracking your time. " + XmlHttpRequest.responseText);
    }
});

何が問題ですか?メッセージが参照している内部例外はどこにありますか?

4

1 に答える 1

2

これに変更すると、正しく機能しました:

if (currentTimeBeingTracked != null) {
    var trackedTimeUpdated = new Object();
    trackedTimeUpdated.dagency_EndDateTime = new Date();

    var jsonTrackedTime = window.JSON.stringify(trackedTimeUpdated);

    $.ajax({ type: "POST",
        contentType: "application/json; charset=utf-8",
        datatype: "json",
        url: ODataPath + "/dagency_trackedtimeSet(guid'" + currentTimeBeingTracked.dagency_trackedtimeId + "')",
        data: jsonTrackedTime,
        beforeSend: function (XMLHttpRequest) {
            XMLHttpRequest.setRequestHeader("Accept", "application/json");
            XMLHttpRequest.setRequestHeader("X-HTTP-Method", "MERGE");
        },
        success: function (data, textStatus, XmlHttpRequest) {
            var newTimeTracked = data.d;
            RetrieveTrackedTimes();
            alert("Stopped tracking your time successfully.");
            window.top.document.getElementById("contentIFrame").contentWindow.location.reload();
        },
        error: function (XmlHttpRequest, textStatus, errorThrown) {
            debugger;
            alert("Couldn't stop tracking your time. " + XmlHttpRequest.responseText);
        }
    });
}

間違っていたのは、X-HTTP-Method を MERGE に設定し、URL で GUID を指定する必要があることです。

于 2012-12-03T11:59:41.323 に答える