The following code shows how to fetch the request using synchronous calls, because sometimes you need (or want) to block the user :)
function getODataRecords(ODataUrl) {
// we return an object with a similar structure as the OData endpoint
var allRecords = new Object();
allRecords.results = new Array();
// we loop until we have an url to query
var queryUrl = ODataUrl;
while(queryUrl != null) {
// we build the request
var ODataRequest = new XMLHttpRequest();
ODataRequest.open("GET", queryUrl, false); // false = synchronous request
ODataRequest.setRequestHeader("Accept", "application/json");
ODataRequest.setRequestHeader("Content-Type", "application/json; charset=utf-8");
ODataRequest.send();
if (ODataRequest.status === 200) {
var parsedResults = JSON.parse(ODataRequest.responseText).d;
if (parsedResults != null && parsedResults.results != null) {
// we add the results to our object
for (var i = 0; i < parsedResults.results.length; i++) {
allRecords.results.push(parsedResults.results[i]);
}
// check if there are more records and set the new url, otherwise we set to null the url
if (parsedResults.__next != null) {
queryUrl = parsedResults.__next;
} else {
queryUrl = null;
}
}
} else {
// if the request has errors we stop and return a null result
queryUrl = null;
allRecords = null;
}
}
return allRecords;
}
// sample function to return all the accounts
function GetAllAccounts() {
var serverUrl;
if (Xrm.Page.context.getClientUrl !== undefined) {
serverUrl = Xrm.Page.context.getClientUrl();
} else {
serverUrl = Xrm.Page.context.getServerUrl();
}
var ODataPath = serverUrl + "/XRMServices/2011/OrganizationData.svc";
var accountQueryUrl = ODataPath + "/AcccountSet?$select=AccountNumber,Name";
// call our new method
var retrievedAccounts = getODataRecords(accountQueryUrl);
// alert each result
if (retrievedAccounts != null) {
for (var i = 0; i < retrievedAccounts.results.length; i++) {
alert(retrievedAccounts.results[i].Name + " - " + retrievedAccounts.results[i].AccountNumber);
}
}
}
0 comments:
Post a Comment