Jeff - Sorry, there’s a bug in getQuery right now.  I keep forgetting to fix it.  You’re not crazy! 

 

Doug

 


From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Jeff Lester
Sent: Saturday, April 29, 2006 8:19 AM
To: [email protected]
Subject: Re: [Reactor For CF] Re: Iterator getWhere() and getOrder()

 

Okay, by changing it to the following I get the results I want however pagination no longer seems to work. Sorry if these are noob like questions, bit sick and can't seem to see what I'm missing.

    <cffunction name="getVideoPage" access="Public" returntype="void" output="false" hint="I get a Page of Videos.">
        <cfargument name="event" type="ModelGlue.Core.Event" required="true" />
        <cfset var OrderBy = arguments.event.getValue("OrderBy","Video") />
        <cfset var OrderDir = arguments.event.getValue("OrderDir","ASC") />
        <cfset var startRow = arguments.event.getValue("startRow","1") />
        <cfset var numRecords = arguments.event.getValue("numRecords","10") />
        <cfset var searchBy = arguments.event.getValue("searchBy") />
        <cfset var searchFor = arguments.event.getValue("searchFor") />
        <cfset var VideoIterator = Reactor.createIterator("Video") />
        <cfset var VideoPage = 0 />
            <cfset VideoIterator.reset() />
            <cfif searchBy NEQ "">
                <cfset VideoIterator.getWhere().isLike("Video",searchBy,searchFor) />
            </cfif>
            <cfset arguments.event.setValue("TotalRecords",VideoIterator.getRecordCount ()) />
            <cfset VideoIterator.reset() />
            <cfif searchBy NEQ "">
                <cfset VideoIterator.getWhere().isLike("Video",searchBy,searchFor) />
            </cfif>
            <cfif OrderDir EQ "DESC">
                <cfset VideoIterator.getOrder().setDesc("Video",OrderBy) />
            <cfelse>
                <cfset VideoIterator.getOrder().setAsc("Video",OrderBy) />
            </cfif>
            <cfset VideoPage = VideoIterator.getQuery(val(startRow),val(numRecords)) />
            <cfset arguments.event.setValue ("VideoPage",VideoPage) />
    </cffunction>

It returns all records even though it should only return 10...

On 4/29/06, Jeff Lester <[EMAIL PROTECTED]> wrote:

But if you look at my function above you'll see that I don't call getQuery until after I set the getWhere() and getOrder()...

So if this is incorrect then can anyone give me an example of how to create an Iterator object, filter, sort, then run getQuery, or is there another way to get filtered sorted pagination results?

 

On 4/29/06, Doug Hughes < [EMAIL PROTECTED]> wrote:

Jeff – The errors says it all.  After you call getQuery or getArray you can't change its order or where clause. This allows for the addition of features such as adding elements into the iterator and saving them.

 

You'll most likely run into this issue if you have a cached iterator that you try to sort each time you use it.

 

There's a method on the iterator, reset(), which resets the iterator and will allow you to re-sort it.

 

Doug

 


From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]] On Behalf Of Jeff Lester
Sent: Saturday, April 29, 2006 4:21 AM
To: [email protected]
Subject: [Reactor For CF] Re: Iterator getWhere() and getOrder()

 

No ideas? I searched the archives...

On 4/29/06, Jeff Lester <[EMAIL PROTECTED]> wrote:

Hi all,

I've updated to Doug's Reactor BC and I remember reading something about changes being made to the way iterators handle getOrder(). Below is the function I am using to get a page of results and return then into a MG value:

    <cffunction name="getVideoPage" access="Public" returntype="void" output="false" hint="I get a Page of Videos.">
        <cfargument name="event" type=" ModelGlue.Core.Event" required="true" />
        <cfset var OrderBy = arguments.event.getValue("OrderBy","Video") />
        <cfset var OrderDir = arguments.event.getValue ("OrderDir","ASC") />
        <cfset var startRow = arguments.event.getValue("startRow","1") />
        <cfset var numRecords = arguments.event.getValue("numRecords","10") />
        <cfset var searchBy = arguments.event.getValue("searchBy") />
        <cfset var searchFor = arguments.event.getValue("searchFor") />
        <cfset var VideoIterator = Reactor.createIterator("Video") />
        <cfset var VideoPage = 0 />
            <cfif searchBy NEQ "">
                <cfset VideoIterator.getWhere().isLike("Video",searchBy,searchFor) />
            </cfif>
            <cfset arguments.event.setValue("TotalRecords",VideoIterator.getRecordCount()) />
            <cfif OrderDir EQ "DESC">
                <cfset VideoIterator.getOrder().setDesc("Video",OrderBy) />
            <cfelse>
                <cfset VideoIterator.getOrder().setAsc("Video",OrderBy) />
            </cfif>
            <cfset VideoPage = VideoIterator.getQuery(val(startRow),val(numRecords)) />
            <cfset arguments.event.setValue("VideoPage",VideoPage) />
    </cffunction>

but I'm getting the following error:

Oops!

Message

Can Not Get Order

Detail

Calls to getOrder are not allowed after getting an iterators query or array data. You must call reset first, which reset any changes you have made to objects in the iterator.

Extended Info

 

Tag Context

D:\Inetpub\wwwroot\Reactor\iterator\iterator.cfc (780)
D:\Inetpub\wwwroot\jjVideos\controller\VideoController.cfc (38)
D:\Inetpub\wwwroot\ModelGlue\ModelGlue.cfc (482)
D:\Inetpub\wwwroot\ModelGlue\ModelGlue.cfc (379)
D:\Inetpub\wwwroot\ModelGlue\ModelGlue.cfc (336)
D:\Inetpub\wwwroot\ModelGlue\ModelGlue.cfc (296)
D:\Inetpub\wwwroot\ModelGlue\ModelGlue.cfm (64)
D:\Inetpub\wwwroot\jjVideos\index.cfm (27)


So the question is, what do I need to change to make this still work?


-- Reactor for ColdFusion Mailing List -- [email protected] -- Archives at http://www.mail-archive.com/reactor%40doughughes.net/

-- Reactor for ColdFusion Mailing List -- [email protected] -- Archives at http://www.mail-archive.com/reactor%40doughughes.net/




-- Reactor for ColdFusion Mailing List -- [email protected] -- Archives at http://www.mail-archive.com/reactor%40doughughes.net/

-- Reactor for ColdFusion Mailing List -- [email protected] -- Archives at http://www.mail-archive.com/reactor%40doughughes.net/

Reply via email to