[fpc-devel] Re: [fpc-pascal] fcl-web webdata example(s) on Windows has some problems

Michael Van Canneyt michael at freepascal.org
Wed Aug 18 09:08:44 CEST 2010

On Tue, 17 Aug 2010, ABorka wrote:

> did some more testing:
> 1. minor note: We should not forget that field names are case sensitive in 
> ExtJS, so any database field names need to be entered exactly:
> ex:
>      fields: ["id","login","name","email", "lastlogin"]
> is not the same as
>      fields: ["ID","LOGIN","NAME","EMAIL", "LASTLOGIN"]
> or
>          {header: 'ID', dataIndex: "id", sortable: true, hidden: true},
> is not the same as
>          {header: 'ID', dataIndex: "ID", sortable: true, hidden: true},
> In the demo projects a DBF table is used with all capital letter field names. 
> When I tried to use MySQL, it took me some time to realize this problem. 
> Having zero errors displayed for this didn't help either :)

The case sensitivity of Javascript (and hence JSON) has given me grey
hairs prematurely :-)

> 2. major: It seems that the error/exception handling does not have the proper 
> server responses for ExtJS (when read/insert/update/delete happens on the 
> data), because with any exceptions there is nothing displayed but the empty 
> grid with "no data to display" note.
> Apparently, we need to append a '"rows" : ""' to our responses in order for 
> ExtJS to properly accept our reply with the error message (being "rows" is 
> our root element and ExtJS requires this):
> ex: instead of
> { "success" : false, "message" : "Blahblah exception occured CGI side" }
> it should be
> '{ "success" : false, "message" : "Blahblah exception occured CGI side", 
> "rows" : ""}
> (not sure how using XML instead of JSON needs this done differently)
> This needs to be done within our reply generation internally (fcl-web) when 
> there is an error/exception or the message will never be displayed client 
> side. Explanation:
> In our *.js we have
> data.addListener('exception', function(proxy, type, action, options, res) {
>    if (type === 'remote') {
>        Ext.Msg.show({
>            title: 'REMOTE EXCEPTION',
>            msg: res.message,
>            icon: Ext.MessageBox.ERROR,
>            buttons: Ext.Msg.OK
>        });
>    }
>  });

This is ExtJS boilerplate code, with nothing FPC specific about it.

> ExtJS however, will only have 'remote' type if the server response is proper 
> for it (having a root /which is "rows"/ in our case), all other cases instead 
> of 'remote' it has the type 'response', regardless of our "success" property 
> being true or false.

Unfortunately, the ExtJS documentation is rather terse where this is

So, if "rows" is not supplied, type='response' and the 'success' property must 
simply be checked ? Or do you suggest adding "rows" to the error response ?

I'm not sure if this is also the case if you are using a DirectStore ?


More information about the fpc-devel mailing list