Ejemplo: crear, recuperan, actualizar y eliminar el uso del extremo de OData con JavaScript y jQuery
Publicado: noviembre de 2016
Se aplica a: Dynamics CRM 2015
Este código de muestra es para Microsoft Dynamics CRM 2015 y actualización de Microsoft Dynamics CRM Online 2015.Descargue el paquete de SDK de Microsoft Dynamics CRM. Se puede encontrar en la siguiente ubicación en el paquete de descarga:
SampleCode\JS\RESTEndpoint\JQueryRESTDataOperations
Importante
No se recomienda el uso de jQuery en scripts de formularios o comandos de cinta. Consulte Ejemplo: crear, recuperar, actualizar y eliminar el uso del extremo de OData con JavaScript para ver una biblioteca de ejemplo que tenga las mismas funcionalidades sin una dependencia en jQuery.
Más información:Uso de jQuery.
Nota
Si solo desea ver cómo funciona este ejemplo, puede instalar (importar) la solución administrada JQueryRESTDataOperations_1_0_1_2_managed.zip que se incluye con los archivos de descarga. Así, se instala la solución Operaciones de datos de REST de JQuery . Si instala esta solución administrada y desea crear los recursos web usando los nombres siguientes, el prefijo de personalización del editor de soluciones no puede ser "ejemplo" a menos que desinstale (elimine) la solución administrada.
Requisitos
Este ejemplo usa los siguientes recursos web:
sample_/JQueryRESTDataOperations.htm
Use esta página HTML para iniciar el ejemplo y ver el progreso de las acciones. Esta página es la página de configuración de la solución Operaciones de datos de REST de JQuery .sample_/Scripts/jquery1.9.1.min.js
La versión minimizada de jQuery incluida con proyectos de aplicación web de Microsoft Visual Studio . El contenido de esta biblioteca no se incluye a continuación.sample_/Scripts/JQueryRESTDataOperationsSample.js
Un recurso web de JScript que realiza las operaciones. Esta biblioteca depende de la biblioteca SDK.JQuery.js.sample_/Scripts/SDK.JQuery.js
Un recurso web de JScript que contiene una biblioteca reutilizable para realizar acciones con el extremo de REST mediante JQuery.
Nota
Una biblioteca similar sin la dependencia en JQuery está disponible en Ejemplo: crear, recuperar, actualizar y eliminar el uso del extremo de OData con JavaScript.
Nota
El prefijo de personalización “sample_” no se usa en el código. Estos ejemplos funcionarán con el prefijo de personalización de cualquier editor. Sin embargo, la ruta de acceso relativa de la carpeta Scripts simulada debe estar incluida en el nombre de los recursos web.
Muestra
Este ejemplo:
Realiza operaciones de creación, recuperación, actualización y eliminación mediante el extremo REST con JScript y jQuery.
Usa jQuery, una biblioteca popular que incluye funciones para realizar operaciones de datos mediante el método $.ajax .
Ejecuta de forma secuencial las operaciones en un nuevo registro de cuenta.
Cuando ejecute el ejemplo podrá elegir si desea eliminar el registro que ha creado.
Muestra resultados similares a los siguientes cuando se obtiene una vista previa del recurso web: sample_/JQueryRESTDataOperations.htm
Establecer el contacto principal a: <el nombre completo del primer registro de Contacto del sistema>.
Configuración del Método de contacto preferido como Correo electrónico.
Configuración de ingresos anuales en dos millones.
Configuración del método de contacto telefónico como "No permitir".
La cuenta denominada "Nombre de cuenta de prueba" se creó con el AccountId: "7780cef2-fdf4-e011-9d26-00155dba3819".
Recuperar cuenta con el AccountId: "7780cef2-fdf4-e011-9d26-00155dba3819".
Recuperó la cuenta denominada "Nombre de cuenta de prueba". Esta cuenta se creó el: "Miércoles 12 de octubre 11: 13:56 PDT 2011".
Cambiar el nombre de cuenta a "Nombre de cuenta actualizado".
Agregando información de la cuenta.
Configurando dirección de correo electrónico.
Se guardaron los cambios del registro de cuenta
Ha elegido eliminar el registro de cuenta.
La cuenta se ha eliminado.
Si elige no eliminar la cuenta, verá un vínculo para abrir el registro que ha creado.
sample_/JQueryRESTDataOperations.htm
Esta página ofrece explicaciones y los botones para iniciar y restablecer el ejemplo.
<html lang="en-us">
<head>
<title>JQuery REST Data Operations</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<script src="Scripts/jquery_1.9.1.min.js"></script>
<script src="Scripts/SDK.JQuery.js" type="text/javascript"></script>
<script src="Scripts/JQueryRESTDataOperationsSample.js" type="text/javascript"></script>
<!-- /WebResources/ClientGlobalContext.js.aspx is accessed using a relative path
because the name of the Web Resource created from this file is "sample_/JQueryRESTDataOperationsSample.htm".
The use of the backslash within the name creates a virtual folder that must be considered
in relative links between Web Resources.
-->
<script type="text/javascript" src="../ClientGlobalContext.js.aspx"></script>
</head>
<body style="background-color: White; font-family:Segoe UI;">
<h1>JavaScript jQuery REST Data Operations Sample</h1>
<p>This page uses the <b>sample_/Scripts/JQueryRESTDataOperationsSample.js</b> JScript library to create, retrieve, and update an
account record. It also provides the option to delete or view the record.</p>
<p>The <b>sample_/Scripts/JQueryRESTDataOperationsSample.js</b> JScript library uses the <b>sample_/Scripts/SDK.JQuery.js</b> JScript library to perform the data operations.</p>
<p>Use the buttons below to verify the functionality of this sample.</p>
<button id="start" title="Click this button to start the sample.">
Start</button>
<button id="reset" title="Click this button to reset the sample." disabled="disabled">
Reset</button>
<ol id="output">
</ol>
</body>
</html>
sample_/Scripts/JQueryRESTDataOperationsSample.js
Esta biblioteca contiene las funciones para administrar los elementos de la interfaz de usuario en la página e incluye las acciones realizadas por el ejemplo. Las funciones en esta biblioteca dependen de los métodos que pueden reutilizables, genéricos encontrados en sample_/Scripts/SDK.JQuery.js.
/// <reference path="SDK.JQuery.js" />
/// <reference path="jquery-1.9.1.js" />
var primaryContact = null;
var startButton;
var resetButton;
var output; //The <ol> element used by the writeMessage function to display text showing the progress of this sample.
$(function () {
getFirstContactToBePrimaryContact();
startButton = $("#start");
startButton.click(createAccount);
resetButton = $("#reset");
resetButton.click(resetSample);
output = $("#output");
});
function createAccount() {
startButton.attr("disabled", "disabled");
var account = {};
account.Name = "Test Account Name";
account.Description = "This account was created by the JQueryRESTDataOperations sample.";
if (primaryContact != null) {
//Set a lookup value
writeMessage("Setting the primary contact to: " + primaryContact.FullName + ".");
account.PrimaryContactId = { Id: primaryContact.ContactId, LogicalName: "contact", Name: primaryContact.FullName };
}
//Set a picklist value
writeMessage("Setting Preferred Contact Method to E-mail.");
account.PreferredContactMethodCode = { Value: 2 }; //E-mail
//Set a money value
writeMessage("Setting Annual Revenue to Two Million .");
account.Revenue = { Value: "2000000.00" }; //Set Annual Revenue
//Set a Boolean value
writeMessage("Setting Contact Method Phone to \"Do Not Allow\".");
account.DoNotPhone = true; //Do Not Allow
//Add Two Tasks
var today = new Date();
var startDate = new Date(today.getFullYear(), today.getMonth(), today.getDate() + 3); //Set a date three days in the future.
var LowPriTask = { Subject: "Low Priority Task", ScheduledStart: startDate, PriorityCode: { Value: 0} }; //Low Priority Task
var HighPriTask = { Subject: "High Priority Task", ScheduledStart: startDate, PriorityCode: { Value: 2} }; //High Priority Task
account.Account_Tasks = [LowPriTask, HighPriTask]
//Create the Account
SDK.JQuery.createRecord(
account,
"Account",
function (account) {
writeMessage("The account named \"" + account.Name + "\" was created with the AccountId : \"" + account.AccountId + "\".");
writeMessage("Retrieving account with the AccountId: \"" + account.AccountId + "\".");
retrieveAccount(account.AccountId)
},
errorHandler
);
}
function retrieveAccount(AccountId) {
SDK.JQuery.retrieveRecord(
AccountId,
"Account",
null, null,
function (account) {
writeMessage("Retrieved the account named \"" + account.Name + "\". This account was created on : \"" + account.CreatedOn + "\".");
updateAccount(AccountId);
},
errorHandler
);
}
function updateAccount(AccountId) {
var account = {};
writeMessage("Changing the account Name to \"Updated Account Name\".");
account.Name = "Updated Account Name";
writeMessage("Adding Address information");
account.Address1_AddressTypeCode = { Value: 3 }; //Address 1: Address Type = Primary
account.Address1_City = "Sammamish";
account.Address1_Line1 = "123 Maple St.";
account.Address1_PostalCode = "98074";
account.Address1_StateOrProvince = "WA";
writeMessage("Setting E-Mail address");
account.EMailAddress1 = "someone@microsoft.com";
SDK.JQuery.updateRecord(
AccountId,
account,
"Account",
function () {
writeMessage("The account record changes were saved");
deleteAccount(AccountId);
},
errorHandler
);
}
function deleteAccount(AccountId) {
if (confirm("Do you want to delete this account record?")) {
writeMessage("You chose to delete the account record.");
SDK.JQuery.deleteRecord(
AccountId,
"Account",
function () {
writeMessage("The account was deleted.");
enableResetButton();
},
errorHandler
);
}
else {
var urlToAccountRecord = SDK.JQuery._getClientUrl() + "/main.aspx?etc=1&id=%7b" + AccountId + "%7d&pagetype=entityrecord";
$("<li><span>You chose not to delete the record. You can view the record </span><a href='" +
urlToAccountRecord +
"' target='_blank'>here</a></li>").appendTo(output);
enableResetButton();
}
}
function getFirstContactToBePrimaryContact() {
SDK.JQuery.retrieveMultipleRecords(
"Contact",
"$select=ContactId,FullName&$top=1",
function (results) {
var firstResult = results[0];
if (firstResult != null) {
primaryContact = results[0];
}
else {
writeMessage("No Contact records are available to set as the primary contact for the account.");
}
},
errorHandler,
function () {
//OnComplete handler
}
);
}
function errorHandler(error) {
writeMessage(error.message);
}
function enableResetButton() {
resetButton.removeAttr("disabled");
}
function resetSample() {
output.empty();
startButton.removeAttr("disabled");
resetButton.attr("disabled", "disabled");
}
//Helper function to write data to this page:
function writeMessage(message) {
$("<li>" + message + "</li>").appendTo(output);
}
sample_/Scripts/SDK.JQuery.js
Esta biblioteca contiene métodos públicos para las operaciones siguientes:
createRecord
retrieveRecord
updateRecord
deleteRecord
retrieveMultipleRecords
Cada uno de estos métodos incluye un parámetro successCallback y errorCallback. Estos parámetros aceptan una referencia a una función a la que se llama cuando la operación de datos es satisfactoria o presenta un error.
/// <reference path="jquery1.4.1vsdoc.js" />
if (typeof (SDK) == "undefined")
{ SDK = { __namespace: true }; }
SDK.JQuery = {
_context: function () {
///<summary>
/// Private function to the context object.
///</summary>
///<returns>Context</returns>
if (typeof GetGlobalContext != "undefined")
{ return GetGlobalContext(); }
else {
if (typeof Xrm != "undefined") {
return Xrm.Page.context;
}
else
{ throw new Error("Context is not available."); }
}
},
_getClientUrl: function () {
///<summary>
/// Private function to return the server URL from the context
///</summary>
///<returns>String</returns>
var serverUrl = this._context().getClientUrl()
return serverUrl;
},
_ODataPath: function () {
///<summary>
/// Private function to return the path to the REST endpoint.
///</summary>
///<returns>String</returns>
return this._getClientUrl() + "/XRMServices/2011/OrganizationData.svc/";
},
_errorHandler: function (req) {
///<summary>
/// Private function return an Error object to the errorCallback
///</summary>
///<param name="req" type="XMLHttpRequest">
/// The XMLHttpRequest response that returned an error.
///</param>
///<returns>Error</returns>
return new Error("Error : " +
req.status + ": " +
req.statusText + ": " +
JSON.parse(req.responseText).error.message.value);
},
_dateReviver: function (key, value) {
///<summary>
/// Private function to convert matching string values to Date objects.
///</summary>
///<param name="key" type="String">
/// The key used to identify the object property
///</param>
///<param name="value" type="String">
/// The string value representing a date
///</param>
var a;
if (typeof value === 'string') {
a = /Date\(([-+]?\d+)\)/.exec(value);
if (a) {
return new Date(parseInt(value.replace("/Date(", "").replace(")/", ""), 10));
}
}
return value;
},
_parameterCheck: function (parameter, message) {
///<summary>
/// Private function used to check whether required parameters are null or undefined
///</summary>
///<param name="parameter" type="Object">
/// The parameter to check;
///</param>
///<param name="message" type="String">
/// The error message text to include when the error is thrown.
///</param>
if ((typeof parameter === "undefined") || parameter === null) {
throw new Error(message);
}
},
_stringParameterCheck: function (parameter, message) {
///<summary>
/// Private function used to check whether required parameters are null or undefined
///</summary>
///<param name="parameter" type="String">
/// The string parameter to check;
///</param>
///<param name="message" type="String">
/// The error message text to include when the error is thrown.
///</param>
if (typeof parameter != "string") {
throw new Error(message);
}
},
_callbackParameterCheck: function (callbackParameter, message) {
///<summary>
/// Private function used to check whether required callback parameters are functions
///</summary>
///<param name="callbackParameter" type="Function">
/// The callback parameter to check;
///</param>
///<param name="message" type="String">
/// The error message text to include when the error is thrown.
///</param>
if (typeof callbackParameter != "function") {
throw new Error(message);
}
},
createRecord: function (object, type, successCallback, errorCallback) {
///<summary>
/// Sends an asynchronous request to create a new record.
///</summary>
///<param name="object" type="Object">
/// A JavaScript object with properties corresponding to the Schema name of
/// entity attributes that are valid for create operations.
///</param>
this._parameterCheck(object, "SDK.JQuery.createRecord requires the object parameter.");
///<param name="type" type="String">
/// The Schema Name of the Entity type record to create.
/// For an Account record, use "Account"
///</param>
this._stringParameterCheck(type, "SDK.JQuery.createRecord requires the type parameter is a string.");
///<param name="successCallback" type="Function">
/// The function that will be passed through and be called by a successful response.
/// This function can accept the returned record as a parameter.
/// </param>
this._callbackParameterCheck(successCallback, "SDK.JQuery.createRecord requires the successCallback is a function.");
///<param name="errorCallback" type="Function">
/// The function that will be passed through and be called by a failed response.
/// This function must accept an Error object as a parameter.
/// </param>
this._callbackParameterCheck(errorCallback, "SDK.JQuery.createRecord requires the errorCallback is a function.");
var jsonEntity = window.JSON.stringify(object);
$.ajax({ type: "POST",
contentType: "application/json; charset=utf-8",
datatype: "json",
url: this._ODataPath() + type + "Set",
data: jsonEntity,
beforeSend: function (xhr) {
//Specifying this header ensures that the results will be returned as JSON.
xhr.setRequestHeader("Accept", "application/json");
},
success: function (data, textStatus, xhr) {
successCallback(data.d);
},
error: function (xhr, textStatus, errorThrown) {
errorCallback(SDK.JQuery._errorHandler(xhr));
}
});
},
retrieveRecord: function (id, type, select, expand, successCallback, errorCallback) {
///<summary>
/// Sends an asynchronous request to retrieve a record.
///</summary>
///<param name="id" type="String">
/// A String representing the GUID value for the record to retrieve.
///</param>
this._stringParameterCheck(id, "SDK.JQuery.retrieveRecord requires the id parameter is a string.");
///<param name="type" type="String">
/// The Schema Name of the Entity type record to retrieve.
/// For an Account record, use "Account"
///</param>
this._stringParameterCheck(type, "SDK.JQuery.retrieveRecord requires the type parameter is a string.");
///<param name="select" type="String">
/// A String representing the $select OData System Query Option to control which
/// attributes will be returned. This is a comma separated list of Attribute names that are valid for retrieve.
/// If null all properties for the record will be returned
///</param>
if (select != null)
this._stringParameterCheck(select, "SDK.JQuery.retrieveRecord requires the select parameter is a string.");
///<param name="expand" type="String">
/// A String representing the $expand OData System Query Option value to control which
/// related records are also returned. This is a comma separated list of of up to 6 entity relationship names
/// If null no expanded related records will be returned.
///</param>
if (expand != null)
this._stringParameterCheck(expand, "SDK.JQuery.retrieveRecord requires the expand parameter is a string.");
///<param name="successCallback" type="Function">
/// The function that will be passed through and be called by a successful response.
/// This function must accept the returned record as a parameter.
/// </param>
this._callbackParameterCheck(successCallback, "SDK.JQuery.retrieveRecord requires the successCallback parameter is a function.");
///<param name="errorCallback" type="Function">
/// The function that will be passed through and be called by a failed response.
/// This function must accept an Error object as a parameter.
/// </param>
this._callbackParameterCheck(errorCallback, "SDK.JQuery.retrieveRecord requires the errorCallback parameter is a function.");
var systemQueryOptions = "";
if (select != null || expand != null) {
systemQueryOptions = "?";
if (select != null) {
var selectString = "$select=" + select;
if (expand != null) {
selectString = selectString + "," + expand;
}
systemQueryOptions = systemQueryOptions + selectString;
}
if (expand != null) {
systemQueryOptions = systemQueryOptions + "&$expand=" + expand;
}
}
$.ajax({
type: "GET",
contentType: "application/json; charset=utf-8",
datatype: "json",
url: this._ODataPath() + type + "Set" + "(guid'" + id + "')" + systemQueryOptions,
beforeSend: function (xhr) {
//Specifying this header ensures that the results will be returned as JSON.
xhr.setRequestHeader("Accept", "application/json");
},
success: function (data, textStatus, xhr) {
//JQuery does not provide an opportunity to specify a date reviver so this code
// parses the xhr.responseText rather than use the data parameter passed by JQuery.
successCallback(JSON.parse(xhr.responseText, SDK.JQuery._dateReviver).d);
},
error: function (xhr, textStatus, errorThrown) {
errorCallback(SDK.JQuery._errorHandler(xhr));
}
});
},
updateRecord: function (id, object, type, successCallback, errorCallback) {
///<summary>
/// Sends an asynchronous request to update a record.
///</summary>
///<param name="id" type="String">
/// A String representing the GUID value for the record to retrieve.
///</param>
this._stringParameterCheck(id, "SDK.JQuery.updateRecord requires the id parameter.");
///<param name="object" type="Object">
/// A JavaScript object with properties corresponding to the Schema Names for
/// entity attributes that are valid for update operations.
///</param>
this._parameterCheck(object, "SDK.JQuery.updateRecord requires the object parameter.");
///<param name="type" type="String">
/// The Schema Name of the Entity type record to retrieve.
/// For an Account record, use "Account"
///</param>
this._stringParameterCheck(type, "SDK.JQuery.updateRecord requires the type parameter.");
///<param name="successCallback" type="Function">
/// The function that will be passed through and be called by a successful response.
/// Nothing will be returned to this function.
/// </param>
this._callbackParameterCheck(successCallback, "SDK.JQuery.updateRecord requires the successCallback is a function.");
///<param name="errorCallback" type="Function">
/// The function that will be passed through and be called by a failed response.
/// This function must accept an Error object as a parameter.
/// </param>
this._callbackParameterCheck(errorCallback, "SDK.JQuery.updateRecord requires the errorCallback is a function.");
var jsonEntity = window.JSON.stringify(object);
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
datatype: "json",
data: jsonEntity,
url: this._ODataPath() + type + "Set" + "(guid'" + id + "')",
beforeSend: function (xhr) {
//Specifying this header ensures that the results will be returned as JSON.
xhr.setRequestHeader("Accept", "application/json");
//Specify the HTTP method MERGE to update just the changes you are submitting.
xhr.setRequestHeader("X-HTTP-Method", "MERGE");
},
success: function (data, textStatus, xhr) {
//Nothing is returned to the success function
successCallback();
},
error: function (xhr, textStatus, errorThrown) {
errorCallback(SDK.JQuery._errorHandler(xhr));
}
});
},
deleteRecord: function (id, type, successCallback, errorCallback) {
///<summary>
/// Sends an asynchronous request to delete a record.
///</summary>
///<param name="id" type="String">
/// A String representing the GUID value for the record to delete.
///</param>
this._stringParameterCheck(id, "SDK.JQuery.deleteRecord requires the id parameter.");
///<param name="type" type="String">
/// The Schema Name of the Entity type record to delete.
/// For an Account record, use "Account"
///</param>
this._stringParameterCheck(type, "SDK.JQuery.deleteRecord requires the type parameter.");
///<param name="successCallback" type="Function">
/// The function that will be passed through and be called by a successful response.
/// Nothing will be returned to this function.
/// </param>
this._callbackParameterCheck(successCallback, "SDK.JQuery.deleteRecord requires the successCallback is a function.");
///<param name="errorCallback" type="Function">
/// The function that will be passed through and be called by a failed response.
/// This function must accept an Error object as a parameter.
/// </param>
this._callbackParameterCheck(errorCallback, "SDK.JQuery.deleteRecord requires the errorCallback is a function.");
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
datatype: "json",
url: this._ODataPath() + type + "Set(guid'" + id + "')",
beforeSend: function (XMLHttpRequest) {
//Specifying this header ensures that the results will be returned as JSON.
XMLHttpRequest.setRequestHeader("Accept", "application/json");
//Specify the HTTP method DELETE to perform a delete operation.
XMLHttpRequest.setRequestHeader("X-HTTP-Method", "DELETE");
},
success: function (data, textStatus, xhr) {
// Nothing is returned to the success function.
successCallback();
},
error: function (xhr, textStatus, errorThrown) {
errorCallback(SDK.JQuery._errorHandler(xhr));
}
});
},
retrieveMultipleRecords: function (type, options, successCallback, errorCallback, OnComplete) {
///<summary>
/// Sends an asynchronous request to retrieve records.
///</summary>
///<param name="type" type="String">
/// The Schema Name of the Entity type records to retrieve
/// For an Account record, use "Account"
///</param>
this._stringParameterCheck(type, "SDK.JQuery.retrieveMultipleRecords requires the type parameter is a string.");
///<param name="options" type="String">
/// A String representing the OData System Query Options to control the data returned
/// Do not include the $top option, use the top parameters to set the maximum number of records to return.
///</param>
if (options != null)
this._stringParameterCheck(options, "SDK.JQuery.retrieveMultipleRecords requires the options parameter is a string.");
///<param name="successCallback" type="Function">
/// The function that will be passed through and be called for each page of records returned.
/// This function should loop through the results and push the records into an array.
/// </param>
this._callbackParameterCheck(successCallback, "SDK.JQuery.retrieveMultipleRecords requires the successCallback parameter is a function.");
///<param name="errorCallback" type="Function">
/// The function that will be passed through and be called by a failed response.
/// This function must accept an Error object as a parameter.
/// </param>
this._callbackParameterCheck(errorCallback, "SDK.JQuery.retrieveMultipleRecords requires the errorCallback parameter is a function.");
///<param name="OnComplete" type="Function">
/// The function that will be called when all the requested records have been returned.
/// No parameters are passed to this function.
/// </param>
this._callbackParameterCheck(OnComplete, "SDK.JQuery.retrieveMultipleRecords requires the OnComplete parameter is a function.");
var optionsString;
if (options != null) {
if (options.charAt(0) != "?") {
optionsString = "?" + options;
}
else
{ optionsString = options; }
}
$.ajax({
type: "GET",
contentType: "application/json; charset=utf-8",
datatype: "json",
url: this._ODataPath() + type + "Set" + optionsString,
beforeSend: function (XMLHttpRequest) {
//Specifying this header ensures that the results will be returned as JSON.
XMLHttpRequest.setRequestHeader("Accept", "application/json");
},
success: function (data, textStatus, xhr) {
if (data && data.d && data.d.results) {
successCallback(JSON.parse(xhr.responseText, SDK.JQuery._dateReviver).d.results);
if (data.d.__next != null) {
var queryOptions = data.d.__next.substring((SDK.JQuery._ODataPath() + type + "Set").length);
SDK.JQuery.retrieveMultipleRecords(type, queryOptions, successCallback, errorCallback, OnComplete);
}
else
{ OnComplete(); }
}
},
error: function (xhr, textStatus, errorThrown) {
errorCallback(SDK.JQuery._errorHandler(xhr));
}
});
},
__namespace: true
};
Ver también
JQuery
Usar el extremo de OData con recursos web
Ejemplo: crear, recuperar, actualizar y eliminar el uso del extremo de OData con JavaScript
Ejemplo: recuperar varios registros mediante el extremo de OData con JavaScript
Artículo técnico: Uso del conjunto de opciones con el extremo de REST - JScript
© 2017 Microsoft. Todos los derechos reservados. Copyright