I was having trouble finding a dataSource example for CRUD against a REST based xml service. I found pieces of the following solution in various posts. Some of this is obvious, but some is not, especially to someone new to kendo and/or jquery. In case anyone else is looking for something similar, I thought I would post the following example. This configures a datasource to create/read from an xml REST service using GET for read and PUT for create with an xml document as the payload. If anyone else has a better solution than the parameterMap to send an xml doc in the payload, please let me know. Hope this saves someone a headache :)
ds = new kendo.data.dataSource({
transport:{
read: {
url: "/apis/items"
},
create: {
url: "/apis/items/create",
// in another thread, a kendo admin posted that these transport
// apis map to $.ajax, so we can directly add most jquery.ajax options here
type: "PUT",
dataType: "xml",
contentType: "text/xml",
// Must set processData to false if you want to send
// raw data in the request body, see the jquery documentation for more info
processData: false,
},
parameterMap: function (data, type){
// You can pre-process data by mapping a function
// with these parameters to this property. The first param is in
// the kendo online documentation, the second is not.
if(type === "create"){
return '<item><name>' + data.name + '</name></item>';
}
}
},
schema: {
type: "xml",
data: "/items/item",
model: {
id: "id",
fields: {
id: "@id",
name: "name/text()"
}
}
},
pageSize:10
});
// Now you can add by passing a model w/o the id property to dataSource.add()
ds.add({name: "test"});
// Calling ds.sync() will issue the server request we defined in transport.create to the server.
// the payload will contain <item><name>test</name></item>
ds.sync();
// Hope this helps.
ds = new kendo.data.dataSource({
transport:{
read: {
url: "/apis/items"
},
create: {
url: "/apis/items/create",
// in another thread, a kendo admin posted that these transport
// apis map to $.ajax, so we can directly add most jquery.ajax options here
type: "PUT",
dataType: "xml",
contentType: "text/xml",
// Must set processData to false if you want to send
// raw data in the request body, see the jquery documentation for more info
processData: false,
},
parameterMap: function (data, type){
// You can pre-process data by mapping a function
// with these parameters to this property. The first param is in
// the kendo online documentation, the second is not.
if(type === "create"){
return '<item><name>' + data.name + '</name></item>';
}
}
},
schema: {
type: "xml",
data: "/items/item",
model: {
id: "id",
fields: {
id: "@id",
name: "name/text()"
}
}
},
pageSize:10
});
// Now you can add by passing a model w/o the id property to dataSource.add()
ds.add({name: "test"});
// Calling ds.sync() will issue the server request we defined in transport.create to the server.
// the payload will contain <item><name>test</name></item>
ds.sync();
// Hope this helps.