Note that there are some explanatory texts on larger screens.

plurals
  1. POChange data sent to server for related data on update using kendo.datasource?
    primarykey
    data
    text
    <p>I am using the $expand to get related data which works fine but I need to change the data that is sent back to the server when the data is updated</p> <p>Example if my Server Side Data Model contains two entities Contact ID: number firstName: string middleName: string lastname: string ContactType: ContactType n-1</p> <p>ContactType ID: nubmer name: string ContactCollection: ContactType 1-n</p> <p>Here is my datasource code</p> <pre><code>function GetContactDS(){ var MyModel = kendo.data.Model.define({ id: "ID", fields: { __KEY: { type: "string" }, __STAMP: { type: "number" }, ID: { editable: false, nullable: true }, firstName: { type: "string" }, middleName: { type: "string" }, lastName: { type: "string" } }, }); var crudServiceBaseUrl = "http://127.0.0.1:8081/cors/Contact"; var MyDataSource = new kendo.data.DataSource({ transport: { read: function(options) { $.ajax( { url: crudServiceBaseUrl + '/?$expand=ContactType', dataType: "json", data: options.data, success: function(result) { options.success(result); } }); }, update: function(options) { $.ajax( { url: crudServiceBaseUrl + "/?$method=update", type: "POST", dataType: "json", data: kendo.stringify(options.data.models), success: function(result) { // notify the DataSource that the operation is complete options.success(result); } }); }, destroy: { url: crudServiceBaseUrl + "/?$method=delete", type: "GET" }, create: { url: crudServiceBaseUrl + "/?$method=update", dataType: "json", type: "POST" }, parameterMap: function(options, operation) { if (operation !== "read" &amp;&amp; options.models) { return JSON.stringify({"__ENTITIES": options.models}); } } }, batch: true, pageSize: 30, schema: { model: MyModel, data: "__ENTITIES" } }); return MyDataSource; } </code></pre> <p>The read request returns this data</p> <pre><code>{"__entityModel":"Contact","__COUNT":1,"__SENT":1,"__FIRST":0,"__ENTITIES":[{"__KEY":"7","__STAMP":9,"ID":7,"firstName":"jay","middleName":"a","lastName":"blue","ContactType":{"__KEY":"2","__STAMP":4,"ID":2,"name":"Home","contactCollection":{"__deferred":{"uri":"/rest/ContactType(2)/contactCollection?$expand=contactCollection"}}}}]} </code></pre> <p>Here is the code calling read and binding to grid</p> <pre><code>var ContactDS = GetContactDS(); $("#grid").kendoGrid({ selectable: "row", filterable: true, pageable: true, sortable: true, change: function(){ datamodel = this.dataItem(this.select()); ID = datamodel.ID }, dataSource: ContactDS, columns: [ { field: "ID" }, { field: "firstName" }, { field: "middleName" }, { field: "lastName" }, {field: "ContactType.name"} ] }); </code></pre> <p>Which works fine I am getting the expanded info for ContactType in my datasource and it binds to a grid fine. Now I want to update the after it the selected data row is read into a form, reading the data into the form works fine.</p> <p>The problem is sending the update back to the server which expects a slightly different format for the related entity ContactType It only needs the changed value of "__Key" to update Here is my update function:</p> <pre><code>$("#update").click(function () { datamodel.set("firstName", $("#firstName").val()); datamodel.set("lastName", $("#lastName").val()); datamodel.set("middleName", $("#middleName").val()); // datamodel.set("ContactType.__KEY",3); ContactDS.sync(); </code></pre> <p>Here is the data that the server expects</p> <pre><code>{ "__ENTITIES": [{"__KEY":"7","__STAMP":14,"firstName":"jay","middleName":"a","lastName":"red","ContactType":{"__KEY":"2"}}]} </code></pre> <p>Here is what kendo.datasource is sending</p> <pre><code>[{"__KEY":"7","__STAMP":12,"ID":7,"firstName":"jay","middleName":"a","lastName":"blue","ContactType":{"__KEY":"3","__STAMP":2,"ID":3,"name":"Work","contactCollection":{"__deferred":{"uri":"/rest/ContactType(3)/contactCollection?$expand=contactCollection"}}}}] </code></pre> <p>So how do I either reformat the data or define my model or datasource options to make sure that the extra ContactType fields are removed just leaving the updated "_<em>KEY:" as well as wrapping the whole request in { "</em>_ENTITIES":}</p> <p>Thanks for any help!</p> <p>Dan</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload