Xrm.WebApi.online.execute (referencia de la API de cliente)
Ejecuta una única operación de acción, función o CRUD.
Nota
Este método solo es compatible para el modo con conexión (Xrm.WebApi.online).
Sintaxis
Xrm.WebApi.online.execute(request).then(successCallback, errorCallback);
Parámetros
Name | Type | Obligatorio | Description |
---|---|---|---|
request |
Objecto | Sí | Objeto que se pasará al extremo de la API web para ejecutar una acción, función o solicitud CRUD. El objeto muestra un método getMetadata a través de su prototipo que le permite definir los metadatos de la acción, la función o la solicitud CRUD que desea ejecutar. Ver método request.getMetadata |
successCallback |
Function | No | Función para llamar cuando la operación se ejecuta correctamente. Ver Valor de retorno |
errorCallback |
Function | No | Una función a la que se llama cuando la operación tiene error. |
método request.getMetadata
El método getMetadata
tiene los siguientes parámetros:
Name | Type | Obligatorio | Description |
---|---|---|---|
boundParameter |
String | No | Nombre de los parámetros asociados para que se ejecute la acción o función. - Especifique undefined si se está ejecutando una solicitud CRUD.- Especifique null si la acción o función que se va a ejecutar no depende de ninguna tabla.- Especifique entity si la acción o función que se va a ejecutar depende de una tabla. |
operationName |
String | No | Nombre de la acción, de la función o de uno de los valores siguientes si se está ejecutando una solicitud CRUD: Create , Retrieve , Update o Delete . |
operationType |
Number | No | Indica el tipo de operación que se está ejecutando. Especifique uno de los siguientes valores: - 0 : Acción- 1 : Función- 2 : CRUD |
parameterTypes |
Objecto | Sí | Metadatos de los tipos de parámetro. El objeto tiene los siguientes valores:enumProperties : (Opcional) Objeto. Metadatos de los tipos de enumeración. El objeto tiene dos valores de cadena: name y value structuralProperty : Número. Categoría del tipo de parámetro. Especifique uno de los siguientes valores:- 0 : Desconocido- 1 : PrimitiveType- 2 : ComplexType- 3 : EnumerationType- 4 : Colección- 5 : EntityTypetypeName : Cadena. Nombre completo del tipo de parámetro. |
Valor devuelto
Si tiene éxito, devuelve un objeto de promesa al successCallback
con las siguientes propiedades:
Name | Type | Description |
---|---|---|
body (en desuso) |
Objecto | Cuerpo de la respuesta. |
headers |
Objecto | Encabezados de la respuesta. |
ok |
Booleana | Indica si la solicitud se ha realizado correctamente. |
status |
Number | Valor numérico en el código de estado de la respuesta. Por ejemplo: 200 |
statusText |
String | Descripción del código del estado de la respuesta. Por ejemplo: OK |
type (en desuso) |
String | Tipo de respuesta. Los valores son: la cadena vacía (predeterminada), arraybuffer , blob , document , json y text . |
url |
String | Dirección URL de la solicitud de la acción, de la función o de la solicitud CRUD que se envió al extremo de la API web. |
json |
Promesa | El parámetro del delegado de devolución de llamada es de tipo cualquiera (objeto JSON). |
text |
Promesa | El parámetro para el delegado de devolución de llamada es una cadena. |
Ejemplos
Encuentre estos ejemplos a continuación:
- Ejecutar una acción
- Ejecutar una función
- Creación de un registro
- Recupera un registro
- Actualizar un registro
- Eliminar un registro
- Asociar un registro
- Desasociar un registro
Sugerencia
Puede utilizar el Dataverse REST Builder para generar código JavaScript que utilice el método Xrm.WebApi.online.execute
.
Ejecutar una acción
El siguiente ejemplo muestra cómo ejecutar la acción WinOpportunity
que se encuentra en la solución Dynamics 365 for Sales. El objeto de la solicitud se crea con la definición de la acción siguiente: Acciones sin enlazar
var Sdk = window.Sdk || {};
/**
* Request to win an opportunity
* @param {Object} opportunityClose - The opportunity close activity associated with this state change.
* @param {number} status - Status of the opportunity.
*/
Sdk.WinOpportunityRequest = function(opportunityClose, status) {
this.OpportunityClose = opportunityClose;
this.Status = status;
};
// NOTE: The getMetadata property should be attached to the function prototype instead of the
// function object itself.
Sdk.WinOpportunityRequest.prototype.getMetadata = function () {
return {
boundParameter: null,
parameterTypes: {
"OpportunityClose": {
"typeName": "mscrm.opportunityclose",
"structuralProperty": 5 // Entity Type
},
"Status": {
"typeName": "Edm.Int32",
"structuralProperty": 1 // Primitive Type
}
},
operationType: 0, // This is an action. Use '1' for functions and '2' for CRUD
operationName: "WinOpportunity",
};
};
var opportunityClose = {
"opportunityid@odata.bind": "/opportunities(c60e0283-5bf2-e311-945f-6c3be5a8dd64)",
"description": "Product and maintenance for 2018",
"subject": "Contract for 2018"
}
// Construct a request object from the metadata
var winOpportunityRequest = new Sdk.WinOpportunityRequest(opportunityClose, 3);
// Use the request object to execute the function
Xrm.WebApi.online.execute(winOpportunityRequest).then(function (response) {
if (response.ok) {
console.log("Status: %s %s", response.status, response.statusText);
// The WinOpportunityRequest does not return any response body content. So we
// need not access the response.json() property.
// Perform other operations as required.
}
})
.catch(function(error) {
console.log(error.message);
// handle error conditions
});
Ejecutar una función
El siguiente ejemplo muestra cómo ejecutar la función WhoAmI:
var Sdk = window.Sdk || {};
/**
* Request to execute WhoAmI function
*/
Sdk.WhoAmIRequest = function () { };
// NOTE: The getMetadata property should be attached to the function prototype instead of the
// function object itself.
Sdk.WhoAmIRequest.prototype.getMetadata = function () {
return {
boundParameter: null,
parameterTypes: {},
operationType: 1, // This is a function. Use '0' for actions and '2' for CRUD
operationName: "WhoAmI",
};
};
// Construct a request object from the metadata
var whoAmIRequest = new Sdk.WhoAmIRequest();
// Use the request object to execute the function
Xrm.WebApi.online.execute(whoAmIRequest)
.then(function (response) {
if (response.ok) {
console.log("Status: %s %s", response.status, response.statusText);
// Use response.json() to access the content of the response body.
return response.json();
}
}
)
.then(function (responseBody) {
console.log("User Id: %s", responseBody.UserId);
// perform other operations as required;
})
.catch(function (error) {
console.log(error.message);
// handle error conditions
});
El siguiente ejemplo muestra cómo ejecutar la función CalculateRollupField:
var Sdk = window.Sdk || {};
Sdk.CalculateRollupFieldRequest = function(target, fieldName) {
this.Target = target;
this.FieldName = fieldName;
};
// NOTE: The getMetadata property should be attached to the function prototype instead of the
// function object itself.
Sdk.CalculateRollupFieldRequest.prototype.getMetadata = function() {
return {
boundParameter: null,
parameterTypes: {
"Target": {
"typeName": "mscrm.crmbaseentity",
"structuralProperty": 5
},
"FieldName": {
"typeName": "Edm.String",
"structuralProperty": 1
}
},
operationType: 1, // This is a function. Use '0' for actions and '2' for CRUD
operationName: "CalculateRollupField"
};
};
// Create variables to point to a quote record and to a specific column
var quoteId = {
"@odata.type": "Microsoft.Dynamics.CRM.quote",
"quoteid": "7bb01e55-2394-ea11-a811-000d3ad97943"
};
// The roll-up column for which we want to force a re-calculation
var fieldName = "new_test_rollup";
// Create variable calculateRollupFieldRequest and pass those variables created above
var calculateRollupFieldRequest = new Sdk.CalculateRollupFieldRequest(quoteId, fieldName);
// Use the request object to execute the function
Xrm.WebApi.online.execute(calculateRollupFieldRequest)
.then(function(response) {
if (response.ok) { // If a response was received.
console.log("Status: %s %s", response.status, response.statusText);
// Use response.json() to access the content of the response body.
return response.json();
}
})
.then(function(responseBody) {
//Do something with the response
console.log("The response is: %s", responseBody);
})
.catch(function(error) {
console.log(error.message);
// handle error conditions
});
El siguiente ejemplo muestra cómo ejecutar la función RetrieveDuplicates:
var Sdk = window.Sdk || {};
Sdk.RetrieveDuplicatesRequest = function(businessEntity, matchingEntityName, pagingInfo) {
this.BusinessEntity = businessEntity;
this.MatchingEntityName = matchingEntityName;
this.PagingInfo = pagingInfo;
};
// NOTE: The getMetadata property should be attached to the function prototype instead of the
// function object itself.
Sdk.RetrieveDuplicatesRequest.prototype.getMetadata = function() {
return {
boundParameter: null,
parameterTypes: {
"BusinessEntity": {
"typeName": "mscrm.crmbaseentity",
"structuralProperty": 5 // Entity Type
},
"MatchingEntityName": {
"typeName": "Edm.String",
"structuralProperty": 1 // Primitive Type
},
"PagingInfo": {
"typeName:": "mscrm.PagingInfo", // Complex Type
"structuralProperty": 5
}
},
operationType: 1, // This is a function. Use '0' for actions and '2' for CRUD
operationName: "RetrieveDuplicates",
};
};
// Create a variable to point to a contact record and with specific data in the needed columns
var contactRecord = {
"@odata.type": "Microsoft.Dynamics.CRM.contact",
"firstname": "Test",
"lastname": "Account"
};
// Create a paging object to keep track of the current page and how many records we get per page
var pagingInfo = {
"PageNumber": 1,
"Count": 10
};
// Create the variable retrieveDuplicatesRequest to build the request
var retrieveDuplicatesRequest = new Sdk.RetrieveDuplicatesRequest(contactRecord, "contact", pagingInfo);
// Use the request object to execute the function
Xrm.WebApi.online.execute(retrieveDuplicatesRequest)
.then(function (response) {
if (response.ok) {
console.log("Status: %s %s", response.status, response.statusText);
// Use response.json() to access the content of the response body.
return response.json();
}
})
.then(function(responseBody) {
// Do something with the response
console.log("The response is: %s", responseBody);
})
.catch(function(error) {
console.log(error.message);
// handle error conditions
});
El siguiente ejemplo muestra cómo ejecutar la función InitializeFrom:
var Sdk = window.Sdk || {};
Sdk.InitializeFromRequest = function (
entityMoniker,
targetEntityName,
targetFieldType
) {
this.EntityMoniker = entityMoniker;
this.TargetEntityName = targetEntityName;
this.TargetFieldType = targetFieldType;
};
// NOTE: The getMetadata property should be attached to the function prototype instead of the
// function object itself.
Sdk.InitializeFromRequest.prototype.getMetadata = function () {
return {
boundParameter: null,
parameterTypes: {
EntityMoniker: {
typeName: "mscrm.crmbaseentity",
structuralProperty: 5, //Entity Type
},
TargetEntityName: {
typeName: "Edm.String",
structuralProperty: 1, // PrimitiveType
},
TargetFieldType: {
typeName: "Microsoft.Dynamics.CRM.TargetFieldType",
structuralProperty: 3, // Enum Type
enumProperties: [
{
name: "All",
value: 0,
},
{
name: "ValidForCreate",
value: 1,
},
{
name: "ValidForUpdate",
value: 2,
},
{
name: "ValidForRead",
value: 3,
},
],
},
},
operationType: 1, // This is a function. Use '0' for actions and '2' for CRUD
operationName: "InitializeFrom",
};
};
// Create a variable to point to tje parent account record
var parentAccountRecord = {
"@odata.type": "Microsoft.Dynamics.CRM.account",
accountid: "141da047-eaad-eb11-b1b4-000d3ac581a0",
};
// Create a variable for the target entity name
var targetEntityName = "account";
// Create a variable for the target field type
var targetFieldType = 0;
// Build the request
var initializeFromRequest = new Sdk.InitializeFromRequest(
parentAccountRecord,
targetEntityName,
targetFieldType
);
// Execute the request
Xrm.WebApi.online.execute(initializeFromRequest)
.then(function (response) {
if (response.ok) {
console.log("Status: %s %s", response.status, response.statusText);
// Use response.json() to access the content of the response body.
return response.json();
}
})
.then(function(responseBody) {
// Do something with the response
console.log("The response is: %s", responseBody);
})
.catch(function(error) {
console.log(error.message);
// handle error conditions
});
Realizar operaciones CRUD
Creación de un registro
El siguiente ejemplo demuestra cómo realizar una operación de creación.
var Sdk = window.Sdk || {};
/**
* Request to execute a create operation
*/
Sdk.CreateRequest = function(entityName, payload) {
this.etn = entityName;
this.payload = payload;
};
// NOTE: The getMetadata property should be attached to the function prototype instead of the
// function object itself.
Sdk.CreateRequest.prototype.getMetadata = function () {
return {
boundParameter: null,
parameterTypes: {},
operationType: 2, // This is a CRUD operation. Use '0' for actions and '1' for functions
operationName: "Create",
};
};
// Construct a request object from the metadata
var payload = {
name: "Fabrikam Inc."
};
var createRequest = new Sdk.CreateRequest("account", payload);
// Use the request object to execute the function
Xrm.WebApi.online.execute(createRequest)
.then(function (response) {
if (response.ok) {
console.log("Status: %s %s", response.status, response.statusText);
// The Create request does not return any response body content. So we
// need not access the response.json() property.
// Perform other operations as required.
}
})
.catch(function(error) {
console.log(error.message);
// handle error conditions
});
Recupera un registro
El siguiente ejemplo demuestra cómo realizar una operación de recuperación.
var Sdk = window.Sdk || {};
/**
* Request to execute a retrieve operation
*/
Sdk.RetrieveRequest = function(entityReference, columns) {
this.entityReference = entityReference;
this.columns = columns;
};
// NOTE: The getMetadata property should be attached to the function prototype instead of the
// function object itself.
Sdk.RetrieveRequest.prototype.getMetadata = function () {
return {
boundParameter: null,
parameterTypes: {},
operationType: 2, // This is a CRUD operation. Use '0' for actions and '1' for functions
operationName: "Retrieve",
};
};
// Construct request object from the metadata
var entityReference = {
entityType: "account",
id: "d2b6c3f8-b0fa-e911-a812-000d3a59fa22"
};
var retrieveRequest = new Sdk.RetrieveRequest(entityReference, ["name"]);
// Use the request object to execute the function
Xrm.WebApi.online.execute(retrieveRequest)
.then(function (response) {
if (response.ok) {
console.log("Status: %s %s", response.status, response.statusText);
// Use response.json() to access the content of the response body.
return response.json();
}
})
.then(function(responseBody) {
console.log("Name: %s", responseBody.name);
// perform other operations as required;
})
.catch(function(error) {
console.log(error.message);
// handle error conditions
});
Actualizar un registro
El siguiente ejemplo demuestra cómo realizar una operación de actualización.
var Sdk = window.Sdk || {};
/**
* Request to execute an update operation
*/
Sdk.UpdateRequest = function(entityName, entityId, payload) {
this.etn = entityName;
this.id = entityId;
this.payload = payload;
};
// NOTE: The getMetadata property should be attached to the function prototype instead of the
// function object itself.
Sdk.UpdateRequest.prototype.getMetadata = function () {
return {
boundParameter: null,
parameterTypes: {},
operationType: 2, // This is a CRUD operation. Use '0' for actions and '1' for functions
operationName: "Update",
};
};
// Construct a request object from the metadata
var payload = {
name: "Updated Sample Account"
};
var updateRequest = new Sdk.UpdateRequest("account", "d2b6c3f8-b0fa-e911-a812-000d3a59fa22", payload);
// Use the request object to execute the function
Xrm.WebApi.online.execute(updateRequest)
.then(function (response) {
if (response.ok) {
console.log("Status: %s %s", response.status, response.statusText);
// The Update request does not return any response body content. So we
// need not access the response.json() property.
// perform other operations as required;
}
})
.catch(function(error) {
console.log(error.message);
// handle error conditions
});
Eliminar registros
El siguiente ejemplo demuestra cómo realizar una operación de eliminación.
var Sdk = window.Sdk || {};
/**
* Request to execute a delete operation
*/
Sdk.DeleteRequest = function(entityReference) {
this.entityReference = entityReference;
};
// NOTE: The getMetadata property should be attached to the function prototype instead of the
// function object itself.
Sdk.DeleteRequest.prototype.getMetadata = function () {
return {
boundParameter: null,
parameterTypes: {},
operationType: 2, // This is a CRUD operation. Use '0' for actions and '1' for functions
operationName: "Delete",
};
};
};
};
// Construct request object from the metadata
var entityReference = {
entityType: "account",
id: "d2b6c3f8-b0fa-e911-a812-000d3a59fa22"
};
var deleteRequest = new Sdk.DeleteRequest(entityReference);
// Use the request object to execute the function
Xrm.WebApi.online.execute(deleteRequest)
.then(function(response) {
if (response.ok) {
console.log("Status: %s %s", response.status, response.statusText);
// The Delete request does not return any response body content. So we
// need not access the response.json() property.
// perform other operations as required;
}
})
.catch(function(error) {
console.log(error.message);
// handle error conditions
});
Asociar un registro
El siguiente ejemplo de código muestra cómo realizar una operación de asociación en propiedades de navegación con valores de colección (relaciones de uno a varios y de varios a varios). Para las propiedades de navegación de un solo valor (relaciones varios a uno, también conocidas como columnas de búsqueda), puede realizar una operación de actualización como se muestra arriba o usar Xrm.WebApi.updateRecord.
var Sdk = window.Sdk || {};
/*
* Request to execute an Associate operation.
*/
Sdk.AssociateRequest = function(target, relatedEntities, relationship) {
this.target = target;
this.relatedEntities = relatedEntities;
this.relationship = relationship;
};
// NOTE: The getMetadata property should be attached to the function prototype instead of the
// function object itself.
Sdk.AssociateRequest.prototype.getMetadata = function() {
return {
boundParameter: null,
parameterTypes: {},
operationType: 2, // Associate and Disassociate fall under the CRUD umbrella
operationName: "Associate"
}
};
// Construct the target EntityReference object
var target = {
entityType: "account",
id: "0b4abc7d-7619-eb11-8dff-000d3ac5c7f9"
};
// Construct the related EntityReferences that the Target will be associated with.
var relatedEntities = [
{
entityType: "contact",
id: "180a9aad-7619-eb11-8dff-000d3ac5c7f9"
},
{
entityType: "contact",
id: "753c58b4-7619-eb11-8dff-000d3ac5c7f9"
}
];
// The name of the existing relationship to associate on.
var relationship = "new_account_contact";
var manyToManyAssociateRequest = new Sdk.AssociateRequest(target, relatedEntities, relationship)
Xrm.WebApi.online.execute(manyToManyAssociateRequest)
.then(function(response) {
if (response.ok) {
console.log("Status: %s %s", response.status, response.statusText);
// The Associate request does not return any response body content. So we
// need not access the response.json() property.
// perform other operations as required;
}
})
.catch(function(error) {
console.log(error.message);
// handle error conditions
});
Desasociar un registro
El siguiente ejemplo de código muestra cómo realizar una operación de disociación en propiedades de navegación con valores de colección (relaciones de uno a varios y de varios a varios). Para las propiedades de navegación de un solo valor (relaciones varios a uno, también conocidas como columnas de búsqueda), puede realizar una operación de actualización como se muestra arriba o usar Xrm.WebApi.updateRecord.
Nota
A diferencia de la operación Asociar, que permite asociar el registro de la entidad objetivo con varios registros de la entidad relacionada en una sola operación, la operación Desasociar se limita a disociar solo un registro de la entidad del registro de la entidad objetivo por operación.
var Sdk = window.Sdk || {};
/*
* Request to execute a Disassociate operation.
*/
Sdk.DisassociateRequest = function(target, relatedEntityId, relationship) {
this.target = target;
this.relatedEntityId = relatedEntityId;
this.relationship = relationship;
};
// NOTE: The getMetadata property should be attached to the function prototype instead of the
// function object itself.
Sdk.DisassociateRequest.prototype.getMetadata = function() {
return {
boundParameter: null,
parameterTypes: {},
operationType: 2, // Associate and Disassociate fall under the CRUD umbrella
operationName: "Disassociate"
}
};
// Construct the target EntityReference object
var target = {
entityType: "account",
id: "0b4abc7d-7619-eb11-8dff-000d3ac5c7f9"
};
// The GUID of the related entity record to disassociate.
var relatedEntityId = "180a9aad-7619-eb11-8dff-000d3ac5c7f9";
// The name of the existing relationship to disassociate from.
var relationship = "new_account_contact";
var manyToManyDisassociateRequest = new Sdk.DisassociateRequest(target, relatedEntityId, relationship)
Xrm.WebApi.online.execute(manyToManyDisassociateRequest)
.then(function(response) {
if (response.ok) {
console.log("Status: %s %s", response.status, response.statusText);
// The Disassociate request does not return any response body content. So we
// need not access the response.json() property.
// perform other operations as required;
}
})
.catch(function(error) {
console.log(error.message);
// handle error conditions
});
Artículos relacionados
Nota
¿Puede indicarnos sus preferencias de idioma de documentación? Realice una breve encuesta. (tenga en cuenta que esta encuesta está en inglés)
La encuesta durará unos siete minutos. No se recopilan datos personales (declaración de privacidad).