Hi Isomorphic,
OK, got it. Now that you say it: There was no "clientOnly" in the Developer Console RPC Tab, which is there normally for clientOnly-DS. Sorry for the bogus report.
Best regards
Blama
Announcement
Collapse
No announcement yet.
X
-
The problem is that this isn't actually a clientOnly DataSource - you haven't set clientOnly. The DataSource is trying to contact the dataURL to perform an update, and the dataURL is just a static file that returns the original 3 records, unchanged.
Leave a comment:
-
Hi Isomorphic,
I got that. But the "name"-field is primaryKey (see the modified sample) and included in the data - so this should target only a single row.
Also a updateButton-ClickHandler of
does not change anything - three rows in the response, no row changed.Code:click : function () { boundForm.saveData(); }
Best regards
Blama
Leave a comment:
-
So again, clientOnly DataSources do not support multi-record update. Any attempted update that would target multiple records will not work.
Leave a comment:
-
Hi Isomorphic,
thanks, I saw it now - it's not in the docs of clientside smartgwt.*, only in the .ds.xml docs.
I nevertheless think there is an issue (v11.1p_2018-05-24) - because I explicitly set allowMultiUpdate: false, which is the default anyway.
See the sample response or the response for this testcase (without allowMultiUpdate), if you change something in the form (e.g. the email-field).
IMHO this is no correct - the response does include 3 records instead of 1 and also the data (email) is not updated at all.
Code:isc.DataSource.create({ ID:"contacts", dataFormat:"json", dataURL:"[ISOMORPHIC]/system/reference/inlineExamples/dataIntegration/json/contactsData.js", fields:[ {name:"name", primaryKey: true, required:true}, {name:"email"}, {name:"organization"}, {name:"phone"}, {name:"street", valueXPath:"address/street" }, {name:"city", valueXPath:"address/city" }, {name:"state", valueXPath:"address/state"}, {name:"zip", valueXPath:"address/zip" } ] }); isc.ListGrid.create({ ID: "boundGrid", dataSource: "contacts", height: "100%", width: "100%", autoFetchData: true }); isc.DynamicForm.create({ ID: "boundForm", autoFetchData: true, width: 250, dataSource: "contacts", fields:[ {name:"name", canEdit: false}, {name:"email"}, {name:"organization"}, ] }); isc.IButton.create({ ID:"updateButton", title:"Update Record", click : function () { var record = boundForm.getValues(); contacts.updateData(record); } }); isc.VLayout.create({ ID:"layout", height: "100%", width: "100%", members: [boundGrid, boundForm, updateButton] });
Best regards
Blama
Leave a comment:
-
allowMultiUpdate is not documented as a property that is valid on client-side DataSources. It appears only in the reference for server DataSources.
At the moment, a clientOnly DataSource does not enforce the security constraints which are documented for server DataSources, and simply does not the wrong thing if the request if an update request is invalid in this way.
Leave a comment:
-
Hi Isomorphic,
OK, thanks. I did not know this. Is this somewhere in the docs? These two don't mention it.
This does not explain the result, tough. The operationBinding has allowMultiUpdate:false, the default. So an update without PK should fail, shouldn't it?
Also, with and without PK, why are three records in the response?
Best regards
Blama
Leave a comment:
-
clientOnly DataSources do not currently support allowMultiUpdate.
Leave a comment:
-
6.1p clientOnly DataSource update works although it should not (missing primaryKey)
Hi Isomorphic,
I wanted to create a testcase for this one and thought I might be fast in JS - I was not.
Nevertheless I stumbled upon two problems doing so which I believe might be a bug:
Please see this modified sample (v11.1p_2018-04-20):
1) If you click the button it will issue an update<updateMultiple> request without PK. allowMultiUpdate: false is explicitly false in the DataSource declaration, so why does the request end in status SUCCESS anyway?Code:isc.DataSource.create({ ID:"contacts", dataFormat:"json", dataURL:"[ISOMORPHIC]/system/reference/inlineExamples/dataIntegration/json/contactsData.js", fields:[ {name:"name", primaryKey: true, required:true}, {name:"email"}, {name:"organization"}, {name:"phone"}, {name:"street", valueXPath:"address/street" }, {name:"city", valueXPath:"address/city" }, {name:"state", valueXPath:"address/state"}, {name:"zip", valueXPath:"address/zip" } ], operationBindings : [ { operationType:"update", operationId:"updateMultiple", allowMultiUpdate: false } ] }); isc.ListGrid.create({ ID: "boundGrid", dataSource: "contacts", height: "100%", width: "100%", autoFetchData: true }); isc.DynamicForm.create({ ID: "boundForm", autoFetchData: true, width: 250, dataSource: "contacts", fields:[ {name:"email"}, {name:"organization"}, ] }); isc.IButton.create({ ID:"updateButton", title:"Update Record", click : function () { var record = boundForm.getValues(); delete record['name']; delete record['email']; delete record['organization']; delete record['phone']; contacts.updateData(record, null, { operationId:"updateMultiple" }); } }); isc.VLayout.create({ ID:"layout", height: "100%", width: "100%", members: [boundGrid, boundForm, updateButton] });
2) If you comment out the delete record['name']; why does the Response in the RPC Tab includeall three records of the DataSource? (It does also with that line, but if it is commented out, we definitely have a primaryKey in the UPDATE, so why does the response include all records?)
Thank you & Best regards
BlamaTags: None
Leave a comment: