How to map and get Object ID when doing edit?
How to map and get Object ID when doing edit?
MikeLMC
Posts: 4Questions: 1Answers: 0
Hello,
I have the below use case:
const editor = new $.fn.dataTable.Editor({
ajax: {
create: {
type: 'POST',
url: 'http://localhost:8080/api/v1/myEndpoint',
contentType: 'application/json; charset=utf-8',
dataType: 'json'
},
edit: {
type: 'PUT',
url: 'http://localhost:8080/api/v1/myEndpoint',
contentType: 'application/json; charset=utf-8',
dataType: 'json'
},
remove: {
type: 'DELETE',
url: 'http://localhost:8080/api/v1/myEndpoint',
contentType: 'application/json; charset=utf-8',
dataType: 'json'
}
},
table: '#myTable',
idSrc: "rowId",
fields: [
{label: "Name", name: "name"},
{label: "Step", name: "step"},
{label: "Page Attribute", name: "pageAttribute"},
{label: "Page Object", name: "pageObject"},
{label: "Action", name: "action"},
{label: "Value", name: "value"}
]
});
// Activate an inline edit on click of a table cell
$('#myTable').on( 'click', 'tbody td:not(:first-child)', function (e) {
editor.inline( this, {
buttons: { label: '>', fn: function () { this.submit(); } }
} );
} );
$('#myTable').DataTable({
ajax: 'http://localhost:8080/api/v1/myEndpoint/3',
dom: 'Bfrtip',
order: [[ 2, 'asc' ]],
columns: [
// {
// data: null,
// defaultContent: '',
// className: 'select-checkbox',
// orderable: false
// },
{data: "name"},
{data: "step"},
{data: "pageAttribute"},
{data: "pageObject"},
{data: "action"},
{data: "value"}
],
select: {
style: 'os',
selector: 'td:first-child'
},
buttons: [
{extend: "create", editor: editor},
{extend: "edit", editor: editor},
{extend: "remove", editor: editor}
]
});
On the back-end, I have a simple entity:
public class MyEntity {
private String rowId;
private String objectId;
private String name;
private String step;
private String pageAttribute;
private String pageObject;
private String action;
private String value;
}
This is wrapped in another object, so when calling my endpoint, I get the below as an example:
{
"data": [
{
"rowId": "1",
"objectId": "3",
"name": "A",
"step": "1",
"pageAttribute": "B",
"pageObject": "C",
"action": "D",
"value": "E"
},
...
]
}
My table gets populated and data is shown as it's extracted from the above example.
If I edit a row and press submit, I get the request body in the back-end like so (example, when I edit a cell belonging to pageAttribute column):
data[4][pageAttribute]=Edited value&action=edit
Problem is, I need that ObjectID Attribute to be able to map it in the back-end. In the above example, my specific objectID is 3 as shown above.
How can I make DataTables to include this field per row when doing Edit so that I know which entity to change in the back-end?
Replies
The Editor Client Server exchange docs state this about the
dataobject:Try changing your
idSrctoobjectId. You might want to use the Datatables optionrowIdand set it toobjectIdso the match.Kevin
That does return it though both values are different.
Essentially, the rowId should be good to let me know which element from the above list has been edited. The objectId is the one telling me which entity does the whole list under "data" belong to.
If I change that property to objectId, then I lose the rowId. I'd then know which entity this belongs to, but not which element of the list.
Basically, I require both rowId and objectId.
In the past I've used
fields.typeas hidden to submit the field but not have it in the Editor form.Kevin