Announcement

Collapse
No announcement yet.
X
  • Filter
  • Time
Clear All
new posts

    Anyone been able to add record to RESTDataSource ?

    Hi,

    Have any of you been able to add a Record to a RestDataSource with dataFormat JSON ?

    The following code give an error:
    Code:
                    final Record newRecord = new Record();
                    newRecord.setAttribute(XDataSource.FIELD_A, "a");
                    newRecord.setAttribute(XDataSource.FIELD_A, "b");
                    newRecord.setAttribute(XDataSource.FIELD_CREATED_AT, new Date());
                    
    
                    xDataSource.addData(newRecord, new DSCallback() {
                        @Override
                        public void execute(DSResponse dsResponse, Object o, DSRequest dsRequest) {
                            if (dsResponse != null && dsResponse.getData() != null && dsResponse.getData().length == 1) {
                                eventBus.fireEvent(new XWindowEvent(dsResponse.getData()[0], XWindowEvent.Kind.OPEN));
                            } else {
                                SC.say(messageConstants.errorCommunicatingWithServer());
                            }
                        }
                    });
    The stacktrace in the Developer Consoel is:

    14:40:36.883:MUP2:WARN:Log:Error:
    'Object doesn't support this property or method'
    in http://localhost/X/sc/modules/ISC_Core.js
    at line 3467
    JSONEncoder.$zo(_1=>com.smartgwt.client.data.Record@ada9d2, _2=>".dataSource.operationType.data.__ref", _3=>Obj, _4=>" ")
    JSONEncoder.$eu(_1=>com.smartgwt.client.data.Record@ada9d2, _2=>" ", _3=>".dataSource.operationType.data.__ref")
    ** recursed on JSONEncoder.$zo

    No data has been sent to the server.

    Code:
    public class XDataSource extends RestDataSource {
        public static String FIELD_A = "A";
        public static String FIELD_B = "B";
        public static String FIELD_CREATED_AT = "createdAt";
    	
    	public static String serviceUrl = "http://localhost/X/x";
    
        public XDataSource(String id) {
            setID(id);
    
            setDataFormat(DSDataFormat.JSON);
            setJsonRecordXPath("/");
    
            setDropExtraFields(true);
            setSendExtraFields(true);
    
            DataSourceIntegerField pkField = new DataSourceIntegerField("id"); // unitId
            pkField.setRequired(false);
            pkField.setHidden(true);
            pkField.setPrimaryKey(true);
    
            FieldValueExtractor valueExtractor = new FieldValueExtractor() {
                @Override
                public Object execute(Object record, Object value,
                                      DataSourceField field, String fieldName) {
    
                    if (value instanceof String) {
                        return isoDateFormat.format(isoDateFormat.parse((String) value));
                    } else return null;
                }
            };
    
            DataSourceDateField createdAtField = new DataSourceDateField(FIELD_CREATED_AT);
            createdAtField.setFieldValueExtractor(valueExtractor);
    
            DataSourceIntegerField aField = new DataSourceIntegerField(FIELD_A);
    		DataSourceIntegerField bField = new DataSourceIntegerField(FIELD_B);
    
            setFields(pkField,
                    aField,
                    bField,
                    createdAtField);
    
            setDataURL(serviceUrl);
    
            OperationBinding fetch = new OperationBinding(DSOperationType.FETCH, serviceUrl);
            fetch.setDataProtocol(DSProtocol.GETPARAMS);
    
            OperationBinding add = new OperationBinding(DSOperationType.ADD, serviceUrl);
            add.setDataProtocol(DSProtocol.POSTMESSAGE);
    
            OperationBinding update = new OperationBinding(DSOperationType.UPDATE, serviceUrl);
            update.setDataProtocol(DSProtocol.POSTMESSAGE);
    
            OperationBinding remove = new OperationBinding(DSOperationType.REMOVE, serviceUrl);
            remove.setDataProtocol(DSProtocol.POSTMESSAGE);
    
            setOperationBindings(fetch, update, remove, add);
        }
    
        @Override
        public Object transformRequest(DSRequest dsRequest) {
            dsRequest.setContentType("application/json; charset=utf-8");
            return super.transformRequest(dsRequest);
        }
    
        @Override
        public void transformResponse(DSResponse dsResponse, DSRequest dsRequest, Object object)
        {
            super.transformResponse(dsResponse, dsRequest, object);
        }
    }

    #2
    Could it be a GIN/EventBus problem ?

    I've isolated the RestDataSource and the addition of the Record to the datasource using samples/helloworld-2.0 and it works (using smartgwt trunk).

    Could it be that the usage of GIN/eventbus is the root to this problem ?

    Will try to compile smartgwt-trunk with smartclient-trunk now to see if that solves the problem first.

    Comment


      #3
      It works with smartclient-trunk

      Comment

      Working...
      X