Hi

never thought that discussing solutions and voicing opinions would be 
called 'disservice': I always thought that this is the point in having 
mailing lists.

But you setting me straight I humbly apologize for having voiced my 
clearly not counting opinion on this list.

Werner

Greg Beaver wrote:
>> Thank you both for your input. Let me take a sec to try and iterate what I'm
>> looking for more clearly.
>>
>> The only thing I'm focusing on is user interaction with the form. Greg,
>> you're correct in that I'm looking for the form to lack a save button. When
>> the user changes data in the form, that change is made asynchronously in the
>> record in the database that the form represents. It doesn't matter how that
>> change gets initiated (maybe form widgets triggering an "onblur" event,
>> whatever). I don't necessarily need a persistent connection or socket or
>> anything fancy like that; just a simple way to truck data from the form to
>> the database, initiated by user interaction with individual form widgets.
>> I'm not sure if anyone's had this requirement yet.
>>   
> Hi Nick,
> 
> This is a relatively common need, and I think qooxdoo is well-designed
> for this, in my limited experience with qooxdoo.  In my app, I have a
> checkbox as part of a tree item that toggles a setting on the server
> through exactly what you describe:
> 
> 1) listen to the "changeValue" event
> 2) in the event handler, contact the rpc server asynchronously with the
> new value
> 2a) the server runs a database update and returns a result
> 3) with the rpc callback, check for an exception, and alert the user if
> any, including timeout for network problems.
> 
> For security reasons, either use a whitelist of database tables, or
> define a different callback method for each database table on the
> server, i.e.
> 
> class whatever {
> protected $fields = array(
>    'id' => true,
>    'something' => true,
>    // ...
> );
> // set up db object here
> function saveThing($field, $value, $id)
> {
>     if (!isset($this->fields[$field])) {
>         throw new Exception("Invalid field: " . $field . ", not in table
> 'thing'");
>     }
>     // update the database here
> }
> // ...
> }
> 
> If you're using PHP 5.3 or newer on the server, I can send you the RPC
> server I wrote that makes use of the native json extension as well as
> slimmer structure for better speed and native conversion of all PHP
> errors and exceptions into a qooxdoo exception format.  The only thing
> it doesn't do is the weird qooxdoo Date object, it expects you to
> serialize it prior to transmission into a string, and to process them in
> your code.  This results in MUCH smaller code, and so is worth the
> tradeoff in my opinion, but won't fit everyone's needs.
> 
> In your qooxdoo code, I would probably define a mixin that contains
> generic code for calling the RPC server so you can re-use the logic for
> any kind of form element.
> 
> There are a lot of ways to do this on the frontend (you might instead
> use a table, for instance) using the standard qooxdoo stuff.  I'd start
> with a snippet from the demo browser that looks similar to what you want
> and add the rpc portion to it.
> 
> One important note regarding the server-side.  If there really is a
> chance of a concurrency issue, then you'd do well to add a field to each
> table that defines the record version.  Thus, if Joe and Mary both grab
> record version 1000, and Joe edits it, resulting in record version 1001,
> and then Mary tries to edit it, you can detect this problem.  Simply add
> the record version to the WHERE clause of your update statement and
> monitor the affected row count.  Your update would look something like:
> 
> UPDATE thing SET field=value, recordversion=1001 WHERE id=123 AND
> recordversion=1000;
> 
> If affected rows is 0, then you should alert the user to refresh their
> work.  You might also want to save who edited what in the record as
> well, so you can ask something like "Joe has saved a newer version of
> this record, refresh or overwrite?"
> 
> This is assuming you're using a sql database.  The rules change for
> nosql databases as they have this kind of concurrency check built into
> the design.
> 
> Greg
> 
> ------------------------------------------------------------------------------
> 
> _______________________________________________
> qooxdoo-devel mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/qooxdoo-devel


------------------------------------------------------------------------------

_______________________________________________
qooxdoo-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/qooxdoo-devel

Reply via email to