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/