init the DS only once in the model, so u always have a reference to it
 
so in GetAllProductsCommand:
ds.fill(model.products)
 
in LoadProductCommad:
product = Product(myDataGrid.selectedItem);
 
...
now the Ui edits the product object
....
 
so in SaveProductCommand:
ds.commit();
 
Dimitrios Gianninas
RIA Developer
Optimal Payments Inc.
 

________________________________

From: flexcoders@yahoogroups.com [mailto:[EMAIL PROTECTED] On Behalf Of [EMAIL 
PROTECTED]
Sent: Friday, February 23, 2007 1:43 PM
To: flexcoders@yahoogroups.com
Subject: [flexcoders] FDS and Cairngorm / Individual Item Updates



Hey All,

I'm having an issue finding a best-practice approach for CRUD operations with 
FDS.  Create/Read/Delete are easy, I'm having a problem with updates.

I can easily encapsulate CRD's in my Commands, but there doesn't seem to be an 
option to explicitly commit only a single record with FDS.

In a non-cairngorm application, this is pretty easy, I can create a record, 
then call ds.createItem(), update it and then ds.commit().  The DataService 
object is local to the interface that is managing the record.  No problem, one 
record committed (correct?).

However, with Cairngorm:

1.      Get a list of records 

        a.      dispatch ProductEvent.GET_ALL 
        b.      GetAllProductsCommand.execute() 
        c.      ds = new DataService("productHome"); 
        d.      ds.fill(model.products); 

2.      Edit a product 

        a.      myList.dataProvider = model.products 
        b.      dispatch ProductEvent.EDIT, event.product = myList.selectedItem 
        c.      interface changes to the product form 
        d.      make modifications via a form 
        e.      dispatch ProductEvent.SAVE, event.product = myform.product 
        f.      SaveProductCommand.execute() 
        g.      ds = new DataService("productHome"); 
        h.      ......  how do we commit just this one record? 

Even if I still had a reference to the original DataService from the fill 
operation, I may not want to commit all records that changed, only the one that 
I'm interested in.  This would be equivalent to keeping my DataService in my 
ServiceLocator.

The only other option I can think of is that SaveProductCommand works like 
this, which messes up conflict checks:

1.      product = (event as ProductEvent).product; 
2.      ds = new DataService("productHome"); 
3.      ds.getItem({product_id: product.product_id}); 
4.      locally synchronize the item retrieved from ds.getItem() with the 
product we received in the product event 
5.      ds.commit() 

When we do this though, we very likely have the most recent copy of the object 
from the database, so we're not sure that something hadn't changed before 
getting it.

Am I making this too complex?  Is there another way to simply commit one 
particular record?  I can think of all sorts of workarounds, but all of them 
violate the Cairngorm protocols.  I can definitely see the other developers on 
the team bypassing our Command logic making Cairngorm a little useless :-)

Jay Proulx

Application Developer

Internet Delivery Services - eVision Team

[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]> 

(613) 783-6711

 

-- 
WARNING
-------
This electronic message and its attachments may contain confidential, 
proprietary or legally privileged information, which is solely for the use of 
the intended recipient.  No privilege or other rights are waived by any 
unintended transmission or unauthorized retransmission of this message.  If you 
are not the intended recipient of this message, or if you have received it in 
error, you should immediately stop reading this message and delete it and all 
attachments from your system.  The reading, distribution, copying or other use 
of this message or its attachments by unintended recipients is unauthorized and 
may be unlawful.  If you have received this e-mail in error, please notify the 
sender.

AVIS IMPORTANT
--------------
Ce message électronique et ses pièces jointes peuvent contenir des 
renseignements confidentiels, exclusifs ou légalement privilégiés destinés au 
seul usage du destinataire visé.  L'expéditeur original ne renonce à aucun 
privilège ou à aucun autre droit si le présent message a été transmis 
involontairement ou s'il est retransmis sans son autorisation.  Si vous n'êtes 
pas le destinataire visé du présent message ou si vous l'avez reçu par erreur, 
veuillez cesser immédiatement de le lire et le supprimer, ainsi que toutes ses 
pièces jointes, de votre système.  La lecture, la distribution, la copie ou 
tout autre usage du présent message ou de ses pièces jointes par des personnes 
autres que le destinataire visé ne sont pas autorisés et pourraient être 
illégaux.  Si vous avez reçu ce courrier électronique par erreur, veuillez en 
aviser l'expéditeur.

Reply via email to