We've been wanting to add a "prefetchAndExecute" type of utility which would 
make this a little easier.   I think what you are doing is good though it would 
be a bit more efficient to just call:

               arrayCollection.getItemAt(0, arrayCollection.length)

That second parameter is the "prefetch" parameter which specifies the number of 
items to fetch.  That one call with thrown an IPE if all items are not resident.

The advantage of doing this all at once is that we can make one big request to 
the server instead of fetching each page independently.

Jeff

From: flexcoders@yahoogroups.com [mailto:[EMAIL PROTECTED] On Behalf Of 
zdenekmikan
Sent: Monday, August 11, 2008 2:08 AM
To: flexcoders@yahoogroups.com
Subject: [flexcoders] Re: LCDS: how to fetch the items from lazy collection


In fact I do not have any backend code in my project - I use the
Hibernate Assembler from LCDS to supply data (DTOs) into my flex
client. My lazy ArrayCollection is partly fetched from the server -
just the items needed for display. Now when I want to export all items
into file, I need to fetch all the remaining items into this
collection. So I am looking for some simpler solution to do this.

Zdenek M

--- In flexcoders@yahoogroups.com<mailto:flexcoders%40yahoogroups.com>, 
"marcel.panse" <[EMAIL PROTECTED]>
wrote:
>
> This is a backend problem not a flex problem. Your java backend
> application fetches the data lazily from the database, which means he
> doesn't fetch it at all until you need it at runtime. When you send
> this lazily loaded object through LCDS over the line to your flex
> application it loses the ability to runtime fetch the lazy collection
> from the database (because you are already on the client machine, not
> on the server anymore, not in session).
>
> Just make sure whatever you send through LCDS over the wire is not
> lazily loaded. So load all collection explicitly with hibernate before
> you send them. Or better yet don't send hibernate objects of the wire
> at all, create DTO (Data Transfer Objects; search for DTO design
> pattern) objects instead. Load everything you need in your flex
> application into the DTO and send that over to your flex app.
>
> gr
> marcel
>
>
>
> --- In flexcoders@yahoogroups.com<mailto:flexcoders%40yahoogroups.com>, 
> "zdenekmikan" <zdenek@> wrote:
> >
> > I was able to solve my problem with following async loop, but I
> wonder if there is some
> > simpler solution.
> >
> > private var itemArray:ArrayCollection
> > private var index:int;
> > private var count:int;
> > private var noIPE:Boolean;
> >
> > public function execute(cgEvent:CairngormEvent):void
> > {
> > count = itemArray.length;
> > index = 0;
> > noIPE = true;
> >
> > start();
> > }
> >
> > private function start():void
> > {
> > try
> > {
> > trace("start: " + index);
> > while((noIPE == true) && (index < count))
> > {
> > processItem(null, itemArray.getItemAt(index) as ItemDTO);
> > }
> > }
> > catch(ipe:ItemPendingError)
> > {
> > noIPE = false;
> > trace("item pending error: " + index);
> > ipe.addResponder(new ItemResponder(processItem, fetchError));
> > }
> > }
> >
> > private function fetchError(message:ErrorMessage):void
> > {
> > trace("error fetching item: " + message.faultString);
> > }
> >
> > private function processItem(data:Object, item:ItemDTO = null):void
> > {
> > trace("processItem: " + index);
> > if(item == null)
> > item = itemArray.getItemAt(index) as ItemDTO;
> >
> > .....
> >
> > index++;
> > if(index < count)
> > {
> > if(noIPE == false)
> > {
> > noIPE = true;
> > start();
> > }
> > }
> > else
> > {
> > finish();
> > }
> > }
> >
> >
> > --- In flexcoders@yahoogroups.com<mailto:flexcoders%40yahoogroups.com>, 
> > Zdenek Mikan <zdenek@> wrote:
> > >
> > > I have an ArrayCollection which is filled from the LCDS/Hibernate
> > > destination with lazy=true. For display it is OK, but for export I
> need
> > > to go through all items to send them to output. Is there any way
> how to
> > > force fetch all items from the server?
> > >
> > > BTW the sample in LCDS ES 2.6 Developer Guide on page 242-243 is
> wrong -
> > > you will get the ipe exception on line with ipe.addResponder in
catch
> > > clause.
> > >
> > > Zdenek M
> > >
> >
>

<<inline: image001.jpg>>

<<inline: image002.jpg>>

Reply via email to