Xrm.WebApi.online.execute (kliento API nuoroda)

Vykdyti vieną veiksmą, funkciją arba CRUD operaciją.

Pastaba.

Šis metodas palaikomas tik prisijungus (Xrm.WebApi.online).

Sintaksė

Xrm.WebApi.online.execute(request).then(successCallback, errorCallback);

Parametrai

Vardas, pavadinimas Tipas Privalomas Aprašą
request Objektas Taip Objektas, kurį perduodate žiniatinklio API galiniam punktui vykdyti veiksmą, funkciją arba CRUD užklausą. Objektas atskleidžia metodą naudodamas prototipągetMetadata, kurį naudojate apibrėžti metaduomenis veiksmui, funkcijai arba CRUD užklausai, kurią norite vykdyti. Žr . request.getMetadata metodą
successCallback Funkcija No Funkcija, kurią reikia iškviesti, kai operacija sėkminga. Žr. grąžinamą reikšmę
errorCallback Funkcija No Funkcija, kurią reikia iškviesti, kai operacija nepavyksta. Perduotas objektas su šiomis ypatybėmis:
- errorCode:Numeris. Klaidos kodas kaip teigiamas dešimtainis skaičius. Pavyzdžiui, klaidos kodas, dokumentuotas kaip 0x80040333 bus grąžintas kaip 2147746611.
- message:Eilutės. Klaidos pranešimas, apibūdinantis problemą.

request.getMetadata metodas

Metodas getMetadata turi šiuos parametrus:

Vardas, pavadinimas Tipas Privalomas Aprašą
boundParameter String No Atliekamo veiksmo arba funkcijos susietojo parametro pavadinimas.
- Nurodykite undefined , ar vykdote CRUD užklausą.
- Nurodykite null , ar vykdomas veiksmas ar funkcija nėra susieta su jokia lentele.
- Nurodykite entity , ar vykdomas veiksmas ar funkcija yra susieta su lentele.
operationName String No Veiksmo, funkcijos pavadinimas arba viena iš šių reikšmių, jei vykdote CRUD užklausą: Create, Retrieve, Updatearba Delete.
operationType Skaičius No Nurodo operacijos, kurią vykdote, tipą. Nurodykite vieną iš šių reikšmių:
- 0:Veiksmas
- 1:Funkcija
- 2: CRUD
parameterTypes Objektas Taip Parametrų tipų metaduomenys. Objektas turi šias reikšmes:
enumProperties : (pasirinktinai) objektas. Išvardijimas tipų metaduomenys. Objekte yra dvi eilutės reikšmės: name ir value.
structuralProperty :Numeris. Parametro tipo kategorija. Nurodykite vieną iš šių reikšmių:
- 0:Nežinomas
- 1: PrimitiveType
- 2: Kompleksinis tipas
- 3: Išvardijimo tipas
- 4:Rinkinys
- 5: EntityType
typeName :Eilutės. Visiškai apibrėžtas parametro tipo pavadinimas.

Grąžinama reikšmė

Sėkmingai grąžins pažado objektą successCallback su šiomis ypatybėmis:

Vardas, pavadinimas Tipas Aprašą
body(Uždrausta) Objektas Atsakymo tekstas.
headers Objektas Atsakymo antraštės.
ok Bulio logikos Nurodo, ar užklausa buvo sėkminga.
status Skaičius Skaitinė reikšmė atsakymo būsenos kode. Pavyzdžiui: 200.
statusText String Atsakymo būsenos kodo aprašas. Pavyzdžiui: OK.
type(Uždrausta) String Atsakymo tipas. Reikšmės yra: tuščia eilutė (numatytoji), arraybuffer, blob, document, ir jsontext.
url String Užklausos URL veiksmo, funkcijos arba CRUD užklausos, kurią išsiuntėte į žiniatinklio API galinį punktą.
json Žadėti Perskambinimo atstovo parametras yra bet kokio tipo (JSON objektas).
text Žadėti Perskambinimo atstovo parametras yra eilutė.

Pavyzdžiai

Šiuos pavyzdžius rasite tolesniuose skyriuose:

Pavyzdys Rodo
Vykdyti veiksmą Kaip vykdyti WinOpportunity veiksmą, kad pažymėtumėte galimybę kaip laimėtą.
Funkcijos vykdymas Kaip vykdyti WhoAmI, CalculateRollupField, RetrieveDuplicatesir funkcijas bei InitializeFrom perskaityti jų atsakymus.
Įrašo kūrimas Kaip sukurti paskyros įrašą naudojant užklausos objektą.
Gauti įrašą Kaip gauti kliento įrašo pavadinimą nurodant jo ID ir stulpelius, kuriuos reikia grąžinti.
Įrašo naujinimas Kaip atnaujinti abonemento įrašo pavadinimą naudojant užklausos objektą.
Įrašo naikinimas Kaip panaikinti paskyros įrašą nurodant jo lentelę ir ID.
Įrašo susiejimas Kaip susieti paskyrą su keliais kontaktais naudojant rinkinio reikšmių naršymo ypatybę.
Atsieti įrašą Kaip pašalinti susiejimą tarp paskyros ir vieno kontakto naudojant rinkinio reikšmių naršymo ypatybę.

Arbatpinigiai

Naudokite "Dataverse REST Builder" , kad sugeneruotumėte "JavaScript" kodą, kuris naudoja Xrm.WebApi.online.execute metodą.

Veiksmo pavyzdžio vykdymas

Toliau pateiktame pavyzdyje parodyta, kaip vykdyti WinOpportunity veiksmą, rastą "Dynamics 365 for Sales" sprendime. Užklausos objektas sukuriamas pagal nesusietų veiksmų veiksmo apibrėžimą.

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
});

Funkcijos vykdymo pavyzdys

Toliau pateiktame pavyzdyje parodyta, kaip vykdyti funkciją "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
});

Toliau pateiktame pavyzdyje parodyta, kaip vykdyti CalculateRollupField funkciją:

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
});

Toliau pateiktame pavyzdyje parodyta, kaip vykdyti RetrieveDuplicates funkciją:

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
});

Toliau pateiktame pavyzdyje parodyta, kaip vykdyti InitializeFrom funkciją:

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
});

Atlikti CRUD operacijas

Įrašo pavyzdžio kūrimas

Toliau pateiktame pavyzdyje parodyta, kaip atlikti kūrimo operaciją.

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
});

Gauti įrašo pavyzdį

Toliau pateiktame pavyzdyje parodyta, kaip atlikti nuskaitymą.

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
});

Įrašo pavyzdžio naujinimas

Toliau pateiktame pavyzdyje parodyta, kaip atlikti naujinimo operaciją.

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
});

Įrašo pavyzdžio naikinimas

Toliau pateiktame pavyzdyje parodyta, kaip atlikti naikinimo operaciją.

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
});

Įrašo pavyzdžio susiejimas

Toliau pateiktame kodo pavyzdyje parodoma, kaip atlikti susiejimo operaciją su rinkinio reikšmių naršymo ypatybėmis (ryšiais "vienas su daugeliu" ir "daugelis su daugeliu"). Vienos reikšmės naršymo ypatybėms (ryšiai "daugelis su vienu", dar vadinami peržvalgos stulpeliais), galite atlikti naujinimo operaciją, kaip parodyta anksčiau, arba naudoti 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
});

Atsieti įrašo pavyzdį

Toliau pateiktame kodo pavyzdyje parodoma, kaip atlikti atsieti operaciją su rinkinio reikšmių naršymo ypatybėmis (ryšiais "vienas su daugeliu" ir "daugelis su daugeliu"). Vienos reikšmės naršymo ypatybėms (ryšiai "daugelis su vienu", dar vadinami peržvalgos stulpeliais), galite atlikti naujinimo operaciją, kaip parodyta anksčiau, arba naudoti Xrm.WebApi.updateRecord.

Pastaba.

Skirtingai nei susiejimo operacija, kurią galite naudoti norėdami susieti tikslinio objekto įrašą su keliais susijusiais objekto įrašais vienoje operacijoje, atsiejant operaciją galima atsieti tik vieną objekto įrašą nuo tikslinio objekto įrašo kiekvienoje operacijoje.

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
});

Xrm.WebApi