Anyone have any experience with Data Services?

--- In [email protected], "Steven Toth" <[EMAIL PROTECTED]> wrote:
>
> 
> I have a DataService that uses the Assembler interface approach (I
> subclassed AbstractAssembler).  When I update one item in the 
managed
> Collection and commit it (autoCommit is false) I'm getting a
> PropertyChangeEvent of kind UPDATE for each item in the Collection 
from
> the DataService.  In addition I get a CollectionEvent of kind 
REMOVE for
> each item in the Collection, then a CollectionEvent of kind ADD for 
each
> item in the Collection from the Collection itself.
> 
> I'm assuming this is because the fill() is being called after the 
update
> is completed.  How do I commit/update the individual item so that I 
only
> get an event (or set of events) for the item that was modified?  Is 
that
> possible when using a managed Collection or do I need to operate at 
the
> individual item level.  Am I doing something wrong (or not doing
> something at all) in the Assembler?
> 
> I'm very experienced with Remoting and Messaging but this is my 
first
> time dealing with DataServices.  Any help, samples,etc.  are greatly
> appreciated.  Thanks.
> 
> Here's the Assembler code...
> 
> public class MyAssembler extends AbstractAssembler {
> 
> 
> 
> private MyService svc = MyService.getInstance();
> 
> 
> 
> public Collection fill(List fillParameters) {
> 
> if (fillParameters.size() >= 2) {
> 
> 
> 
> int fillType = FlexDataHelper.getIntPrimitive( fillParameters.get
(0) );
> 
> Long companyId = FlexDataHelper.getLong( fillParameters.get(1) );
> 
> 
> 
> switch(fillType) {
> 
> case QueryType.ALL_WIDGETS_FOR_COMPANY:
> 
> return svc.getAllWidgets(companyId);
> 
> case QueryType.ACTIVE_WIDGETS_FOR_COMPANY_:
> 
> return svc.getActiveWidgets(companyId);
> 
> case QueryType.WIDGETS_BY_COMPANY_AND_CATEGORY:
> 
> if (fillParameters.size() == 3) {
> 
> Integer categoryId = FlexDataHelper.getInteger( fillParameters.get
(2) );
> 
> return svc.getWidgets(companyId, categoryId);
> 
> }
> 
> }
> 
> 
> 
> }
> 
> // Throws a nice error
> 
> return super.fill(fillParameters);
> 
> }
> 
> 
> 
> public Object getItem(Map uid) {
> 
> return svc.getWidget( FlexDataHelper.getLong(uid.get("companyId")),
> FlexDataHelper.getInteger(uid.get("widgetId")) );
> 
> }
> 
> 
> 
> public void createItem(Object newVersion) {
> 
> svc.saveWidget((WidgetValue)newVersion);
> 
> }
> 
> 
> 
> public void updateItem(Object newVersion, Object prevVersion, List
> changes) {
> 
> try {
> 
> svc.saveWidget((WidgetValue)newVersion);
> 
> } catch (Exception e) {
> 
> Long companyId = ((WidgetValue)prevVersion).getCompanyId();
> 
> Integer widgetId = ((WidgetValue)prevVersion).getWidgetId();
> 
> System.err.println("*** Throwing DataSyncException when trying to 
save
> widget = " + widgetId);
> 
> throw new DataSyncException(svc.getWidget(companyId, widgetId), 
null);
> 
> }
> 
> }
> 
> 
> 
> public void deleteItem(Object prevVersion) {
> 
> try {
> 
> svc.deleteWidget( (WidgetValue)prevVersion );
> 
> } catch (Exception e) {
> 
> Long companyId = ((WidgetValue)prevVersion).getCompanyId();
> 
> Integer widgetId = ((WidgetValue)prevVersion).getWidgetId();
> 
> System.err.println("*** Throwing DataSyncException when trying to 
delete
> widget = " + widgetId);
> 
> throw new DataSyncException(svc.getWidget(companyId, widgetId), 
null);
> 
> }
> 
> }
> 
> 
> 
> Here's the Flex UI code...
> 
> public function getWidgetsForCompany( company:CompanyValue ):void {
> 
> var widgets:ArrayCollection = new ArrayCollection();
> 
> var call:AsyncToken = widgetService.fill(widgets,
> QueryType.ALL_WIDGETS_FOR_COMPANY, company.companyId);
> 
> // Add a reference to the collection that will be filled for access 
by
> the responder
> 
> call.useLocalData = true;
> 
> call.localData = widgets;
> 
> call.addResponder( responder );
> 
> }
> 
> public function saveWidget( widget:WidgetValue ):void {
> 
> var call:AsyncToken;
> 
> if (isNaN(widget.widgetId)) {
> 
> call = widgetService.createItem(widget);
> 
> } else {
> 
> //Update
> 
> call = widgetService.commit(new Array(widget), false);
> 
> }
> 
> call.addResponder( responder );
> 
> }
>


Reply via email to