SmartClient: SNAPSHOT_v9.1d_2013-09-08
Firefox 23.0.1
Client side-data-integration
New to SmartClient, so far looks very very nice, just a little trouble getting started.
I am using OrientDB as backend db/rest server and can't modify the format to use the RestDataSource to I am trying to convert the data sent back to the server to the correct format.
After calling form.saveData() I am using the transformRequest to manipulate the data before I post the update back to the server, however I do not know how to extract the changed values from the dsRequest.data, the data object contains all of the unmodified fields as well as the modified ones and I need to just send back the record id with just the modified values
I know the form object has getChangedValues() which works like I want it to but after calling saveData() and once I am in the transformRequest the dsRequest does not have a ChangedValues method.
Here is the data that I receive from my server
This data is bound to a grid that upon row selection sets the form values to current selected row
The update record posted to the server should look like
I have no problems creating a new javascript object like the one above, but I don't know how to get the changed values from the dsRequest.data
Here is my test code
Also is this the correct approach for connecting to a Rest API versus overriding the built in RestDataSource, I think the docs said this was the correct approach, but just want to confirm. After I get this working then I should be able to extend the DataSource class to include the necessary modifications to communicate to my server, any examples of other users making a custom js DataSource class to a custom rest server?
Thanks for any help,
Dan
Firefox 23.0.1
Client side-data-integration
New to SmartClient, so far looks very very nice, just a little trouble getting started.
I am using OrientDB as backend db/rest server and can't modify the format to use the RestDataSource to I am trying to convert the data sent back to the server to the correct format.
After calling form.saveData() I am using the transformRequest to manipulate the data before I post the update back to the server, however I do not know how to extract the changed values from the dsRequest.data, the data object contains all of the unmodified fields as well as the modified ones and I need to just send back the record id with just the modified values
I know the form object has getChangedValues() which works like I want it to but after calling saveData() and once I am in the transformRequest the dsRequest does not have a ChangedValues method.
Here is the data that I receive from my server
Code:
{ "result" : [ { "@class" : "Contact",
"@fieldTypes" : "Addresses=e",
"@rid" : "#9:0",
"@type" : "d",
"@version" : 15,
"Addresses" : [ "#10:0" ],
"ContactType" : "#11:0",
"firstName" : "ttt",
"lastName" : "green"
} ] }
The update record posted to the server should look like
Code:
{ "transaction" : true,
"operations" : [
{ "type" : "u",
"record" : {
"@rid" : "#9:0",
"firstName" : "Joe",
"lastName" : "Smith"
}
}
]
}
Here is my test code
Code:
RPCManager.allowCrossDomainCalls=true
var dbcommand = 'select from #9:0'
var dbcommandUpdate = 'update #9:0 set firstName="ttt"'
isc.DataSource.create({
ID: "contactsDS",
dataFormat: "json",
recordXPath:"/result",
fields: [
{name: "@rid", title: "rid",primaryKey:"true",hidden:true},
{name: "firstName", title: "First Name"},
{name: "lastName", title: "Last Name"}
],
transformRequest : function (dsRequest) {
debugger;
var mydata = dsRequest.data
if (dsRequest.operationType == "update") {
//format data
}
else
if (dsRequest.operationType == "add"){
//format data
}
dsRequest.contentType = "application/json";
return JSON.stringify(mydata)
},
operationBindings:[
{operationType:"fetch",
dataURL:'http://localhost:2480/command/RestTester/sql/' + encodeURIComponent(dbcommand).replace(/'/g, "%27").replace(/"/g, "%22"),
requestProperties:{httpHeaders:{"Authorization": "Basic YWRtaW46YWRtaW4="}}
},
{operationType:"add",
dataURL:'http://localhost:2480/command/RestTester/sql/' + encodeURIComponent(dbcommand).replace(/'/g, "%27").replace(/"/g, "%22")
},
{operationType:"update",
dataURL:'http://localhost:2480/batch/RestTester',
dataProtocol:"postMessage"
},
{operationType:"remove",
dataURL:'http://localhost:2480/command/RestTester/sql/' + encodeURIComponent(dbcommand).replace(/'/g, "%27").replace(/"/g, "%22")
}
]
})
// recordClick: "contactsForm.editSelectedData(contactsList)",
isc.ListGrid.create({ ID: "contactsList",
left: 50, top: 50, width: 500,
recordClick:function (viewer, record, rowNum, field, fieldNum, value, rawValue) {
contactsForm.clearErrors();
contactsForm.editSelectedData(contactsList);
saveButton.enable();
},
dataSource: "contactsDS",
autoFetchData: true });
isc.DynamicForm.create({ ID: "contactsForm", left: 50, top: 200, width: 300, dataSource: "contactsDS" });
isc.IButton.create({
ID: "saveButton",
disabled:true,
left:175, top:280, width:150,
form:contactsForm,
title:"Save",
click:"contactsForm.saveData()"
})
function test(){
debugger;
var a = contactsForm.getChangedValues()
var b = contactsForm.getOldValues()
var c = contactsForm.valuesHaveChanged()
// var d = contactsForm.value
}
Thanks for any help,
Dan