Hi All,
I am trying to perform a Web API batch update operation using Javascript. I am getting the error as "Incorrect attribute value type System.Decimal". Please find the below code which I am using for update.
function UpdateTimeCardEntries(selectedItemIds) { debugger; var data = []; data.push('--batch_123456'); data.push('Content-Type: multipart/mixed;boundary=changeset_BBB456'); data.push(''); if ($('#lunchentryoptionset').val() == "961360000") { var end = new Date($('#enddatetime').val()); end.setMinutes(end.getMinutes() - end.getTimezoneOffset()); var lunchStart = new Date($('#lunchstartdateandtime').val()); lunchStart.setMinutes(lunchStart.getMinutes() - lunchStart.getTimezoneOffset()); var lunchEnd = new Date($('#lunchenddateandtime').val()); lunchEnd.setMinutes(lunchEnd.getMinutes() - lunchEnd.getTimezoneOffset()); for (var i = 0; i < selectedItemIds.length; i++) { var id = (i + 1); data.push('--changeset_BBB456'); data.push('Content-Type:application/http'); data.push('Content-Transfer-Encoding:binary'); data.push('Content-ID:' + id); data.push(''); data.push('PATCH ' + parent.Xrm.Page.context.getClientUrl() + '/api/data/v9.1/nth_timecardentries(' + selectedItemIds[i].replace('{', '').replace('}', '') + ') HTTP/1.1'); data.push('Content-Type:application/json;type=entry'); data.push(''); var timeCard = {}; timeCard.nth_end = end.toISOString(); timeCard.nth_lunchentry = parseInt($('#lunchentryoptionset').val()); timeCard.nth_lunchstart = lunchStart.toISOString(); timeCard.nth_lunchend = lunchEnd.toISOString(); data.push(JSON.stringify(timeCard)); } } else { var end = new Date($('#enddatetime').val()); end.setMinutes(end.getMinutes() - end.getTimezoneOffset()); for (var i = 0; i < selectedItemIds.length; i++) { var id = (i + 1); data.push('--changeset_BBB456'); data.push('Content-Type:application/http'); data.push('Content-Transfer-Encoding:binary'); data.push('Content-ID:' + id); data.push(''); data.push('PATCH ' + parent.Xrm.Page.context.getClientUrl() + '/api/data/v9.1/nth_timecardentries(' + selectedItemIds[i].replace('{', '').replace('}', '') + ') HTTP/1.1'); data.push('Content-Type:application/json;type=entry'); data.push(''); var timeCard = {}; timeCard.nth_end = end.toISOString(); timeCard.nth_lunchentry = parseInt($('#lunchentryoptionset').val()); data.push(JSON.stringify(timeCard)); } } data.push('--changeset_BBB456--'); data.push('--batch_123456--'); var payload = data.join('\r\n'); var req = new XMLHttpRequest(); req.open("POST", window.parent.Xrm.Page.context.getClientUrl() + "/api/data/v9.1/$batch", false); req.setRequestHeader("OData-MaxVersion", "4.0"); req.setRequestHeader("OData-Version", "4.0"); req.setRequestHeader("Accept", "application/json"); req.setRequestHeader("Content-Type", "multipart/mixed;boundary=batch_123456"); req.setRequestHeader("Prefer", "odata.maxpagesize=1"); req.onreadystatechange = function () { if (this.readyState === 4) { req.onreadystatechange = null; if (this.status === 200) { debugger; alert("The selected time card entries are successfully signed out."); window.top.opener.Xrm.Page.getControl("crmGrid").refresh(); window.close(); } else { alert(this.responseText.match('message":"(.*)","innererror"')[1]); } } }; req.send(payload); }
Any help is appreciated.
*This post is locked for comments