Here is the query I put in task.hbm.xml :

<query name="tasksProjects">From Task where idProject in (?)</query>

Here is the fill call :

for (i = 0; i < projectsArray.length; i++)
        {                       
mx.controls.Alert.show(projectsArray.getItemAt(i).id);
        }
        taskDataService.fill(tasksArray, "tasksProjects", [*]);

But what i have to put to replace *. I tried "project1, project2"...
It doesn't work.



--- In [email protected], "jason_williams_mm" <[EMAIL PROTECTED]>
wrote:
>
> Okay, well that is a bit more complex.  To simplify the client code 
> and the number of network round trips, I would suggest building up a 
> list of the project ids and pass that as an argument to the fill 
> request.  This way you only make one call to the remote destination 
> and remove the complexity you will require in the client code which 
> will be exacerbated if you decide to use paging later on.
> 
> Doing this on the client might look something like this:
> 
> // ...
> private var totalTasks:ArrayCollection = new ArrayCollection();
> // ...
> taskDataService.addEventListener(DataServiceResultEvent.RESULT, 
> resultHandler)
> var token:AsyncToken = taskDataService.fill(...);
> token.collection = tmpArray;
> token.isLastFill = i == projectsArray.length;
> 
> function resultHandler(event:DataServiceResultEvent):void
> {
>    var collection:ArrayCollection = ArrayCollection
> (event.token.collection);
>    if (collection != null)
>    {
>        var cursor:IViewCursor = collection.createCursor();
>        while (!cursor.afterLast)
>        {
>           totalTasks.addItem(cursor.current);
>           cursor.moveNext();
>        }
> 
>        if (event.token.isLastFill)
>        {
>            // do something with the final results
>        }
>    }
> }
> 
> Hope that helps.
> 
> 
> --- In [email protected], "jonathan_merey" <mereyj@> 
> wrote:
> >
> > Actually, I want to concat the tmpArray of each loop ant return it 
> then.
> > 
> > --- In [email protected], "jason_williams_mm" <jwilliams@>
> > wrote:
> > >
> > > Each fill operation is asynchronous and so are the calls to 
> Alert.show
> > > ().  This means that code doesn't stop when these lines of code 
> are 
> > > executed it continues to run the very next line.
> > > 
> > > With the fill operation you will not get a valid length until the 
> > > server responds to the request, however, during that time you 
> will 
> > > continue to execute more fill requests until all projects within 
> the 
> > > projectsArray have been iterated.
> > > 
> > > It is not clear what you are after here, if you want to display 
> the 
> > > length of the filled collection after the server has responded 
> then 
> > > you could do something like the following:
> > > 
> > > tmpArray.addEventListener(CollectionEvent.COLLECTION_CHANGE, 
> > > collectionChangeHandler);
> > > taskDataService.fill(...);
> > > 
> > > function collectionChangeHandler(event:CollectionEvent):void
> > > {
> > >    if (event.kind == CollectionEventKind.RESET)
> > >    {
> > >       // display the length using the event.target.length
> > >    }
> > > }
> > > 
> > > The RESET kind is only dispatched when the collection has been 
> > > initially filled when managed by DataService.
> > > 
> > > There are more sophisticated approaches to this problem as well 
> like 
> > > using a responder with the AsyncToken returned from the fill() 
> > > method, but, it is unclear if you are only after debugging 
> > > information or not.  If you really only want debugg information 
> then 
> > > use the <mx:TraceTarget /> in your application MXML and a debug 
> > > player then inspect the flashlog.txt or the console when using 
> > > FlexBuilder in debug mode.
> > > 
> > > --- In [email protected], "jonathan_merey" <mereyj@> 
> > > wrote:
> > > >
> > > > My problem is simple. I know each of my projects have tasks. If 
> I
> > > > delete the loop. The second Alert.show print the good length. 
> But 
> > > with
> > > > the loop, the second Alert.show print 0 except for the last 
> loop. 
> > > If i
> > > > delete the first Alert.show, the second print 0 even for the 
> last
> > > > loop.  I understood its due to a problem of exectution time but 
> how
> > > > can i do to do what i want. Thank you.
> > > > 
> > > > 
> > > > Here is the code :
> > > > 
> > > > private function getTasks():void
> > > > {
> > > >     currentState='';
> > > >     if (document.listProject.selectedIndex == -1)
> > > >     {
> > > >         var projectsArray:ArrayCollection =
> > > > ArrayCollection(document.listProject.dataProvider);
> > > >         var tmpArray:ArrayCollection = new ArrayCollection();
> > > >         var i:int;
> > > >         for (i = 0; i < projectsArray.length; i++)
> > > >         {
> > > >             mx.controls.Alert.show(projectsArray.getItemAt
> (i).id);
> > > >             taskDataService.fill(tmpArray, "tasksProject",
> > > > [projectsArray.getItemAt(i).id]);
> > > >             mx.controls.Alert.show(tmpArray.length.toString());
> > > >             
> > > >         }
> > > >     }
> > > >        else
> > > >         taskDataService.fill
> (document.tasksArray, "tasksProject",
> > > > [document.listProject.selectedItem.id]);
> > > >  }
> > > >
> > >
> >
>





--
Flexcoders Mailing List
FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt
Search Archives: http://www.mail-archive.com/flexcoders%40yahoogroups.com 
Yahoo! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/flexcoders/

<*> Your email settings:
    Individual Email | Traditional

<*> To change settings online go to:
    http://groups.yahoo.com/group/flexcoders/join
    (Yahoo! ID required)

<*> To change settings via email:
    mailto:[EMAIL PROTECTED] 
    mailto:[EMAIL PROTECTED]

<*> To unsubscribe from this group, send an email to:
    [EMAIL PROTECTED]

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/
 

Reply via email to