Version: SmartGWT 2.2 with RPC extension
I'm trying to implement a SmartGWT-RPC solution, but doing it a little differently by returning JSON back to the executeFetch instead of Java objects. It seems to work pretty well and my grid gets populated.
Where it gets tricky, is when I need to navigate down the JSON using setValueXPath. Since I'm using GWT-RPC, I need to set DSProtocol.CLIENTCUSTOM in my datasource, and valueXPath doesn't seem to work.
Does setValueXPath get ignored because I'm using ClientCustom and it expects me to process all data myself ?
If so, is there a way I can still use GWT-RPC and valueXPath together ?
Datasource:
JSON:
I'm trying to implement a SmartGWT-RPC solution, but doing it a little differently by returning JSON back to the executeFetch instead of Java objects. It seems to work pretty well and my grid gets populated.
Where it gets tricky, is when I need to navigate down the JSON using setValueXPath. Since I'm using GWT-RPC, I need to set DSProtocol.CLIENTCUSTOM in my datasource, and valueXPath doesn't seem to work.
Does setValueXPath get ignored because I'm using ClientCustom and it expects me to process all data myself ?
If so, is there a way I can still use GWT-RPC and valueXPath together ?
Datasource:
Code:
public class LaborRateDS extends GwtRpcJsonDataSource {
public LaborRateDS() {
DataSourceField field;
field = new DataSourceTextField("id", "Id");
field.setPrimaryKey(true);
field.setHidden(true);
field.setRequired(false);
addField(field);
field = new DataSourceTextField("rateValue", "Rate Value");
field.setRequired(true);
addField(field);
field = new DataSourceTextField("year", "Year");
field.setRequired(true);
addField(field);
field = new DataSourceTextField("userId", "User Id");
field.setValueXPath("data/rateSheet/userId");
field.setRequired(true);
addField(field);
field = new DataSourceTextField("effectiveDate", "Effective Date");
field.setValueXPath("data/rateSheet/effectiveDate");
field.setRequired(true);
addField(field);
}
@Override
protected void executeFetch(final String requestId,
final DSRequest request, final DSResponse response) {
String rateSheetId = request.getCriteria().getAttribute("rateSheetId");
System.out.println("rateSheetId=" + rateSheetId);
System.out.println("startRow=" + request.getStartRow());
System.out.println("endRow=" + request.getEndRow());
RateSheetServiceAsync service = GWT.create(RateSheetService.class);
service.fetchLaborRates(rateSheetId, new AsyncCallback<String>() {
@Override
public void onFailure(Throwable caught) {
caught.printStackTrace();
response.setStatus(RPCResponse.STATUS_FAILURE);
processResponse(requestId, response);
}
@Override
public void onSuccess(String json) {
JavaScriptObject jsObj = JSON.decode(json);
response.setJsObj(jsObj);
processResponse(requestId, response);
}
});
}
}
Code:
{
"status":0,
"startRow":0,
"endRow":50,
"totalRows":1344,
"data":[
{
"id":"00BAB4AE-A48C-4288-AF40-BEA794370813",
"laborGuid":"E31E5566-3662-4A2F-8218-59D15F123803",
"rateIndexGuid":"4D5ECC96-8687-4000-9D22-8C33BD4D178C",
"rateValue":"36.8700000000",
"year":2010,
"rateSheet":{
"id":"4D5ECC96-8687-4000-9D22-8C33BD4D178C",
"name":"Ver 026 - 08/19/10",
"active":true,
"effectiveDate":"Sep 8, 2010 6:08:45 PM",
"userId":"BATCH",
"businessUnit":"SAS"
}
},
{
"id":"011025D4-7C12-4828-AFA4-490BABA98BD6",
"laborGuid":"CB3C58C0-3A1D-4366-872A-49669F28518C",
"rateIndexGuid":"4D5ECC96-8687-4000-9D22-8C33BD4D178C",
"rateValue":"46.8700000000",
"year":2010,
"rateSheet":{
"id":"4D5ECC96-8687-4000-9D22-8C33BD4D178C",
"name":"Ver 026 - 08/19/10",
"active":true,
"effectiveDate":"Sep 8, 2010 6:08:45 PM",
"userId":"BATCH",
"businessUnit":"SAS"
}
}
]
}