From: Anjo K. <kr...@lo...> - 2007-05-10 19:22:43
|
One other example is the ERD2WProgressPage/ERD2WProgressPageTemplate. Again: the core idea behind the ERXLongResponsePage is that you only ever need *one* of these, not one for every task like with the standard one. public class SendNewsletterDelegate extends ERDBranchDelegate { protected NewsletterRecord _newsletter; protected NSArray _customers; protected ERXLongResponseTask task = new ERXLongResponseTask.DefaultImplementation() { public int current = 0; public List errors; public Object performAction() { // send stuff, takes a long time } public Object status() { return new Integer(current); } public WOComponent refreshPageForStatus(Object status) { WOComponent nextPage = super.refreshPageForStatus (status); log.info("-+Refresh " + status); ERD2WProgressPage page = (ERD2WProgressPage)nextPage; page.setPercentCompleted(_customers.count() > 0 ? (current * 100)/_customers.count() : 0); String message = ERXLocalizer.currentLocalizer ().localizedStringForKey("SendNewsletter.statusMessage"); page.setMessage(message + errors.size()); longResponse().setRefreshInterval(2); return nextPage; } public WOComponent pageForResult(Object status) { ERDMessagePageInterface lpi = (ERDMessagePageInterface)D2W.factory().pageForConfigurationNamed ("MessageSentNewsletter", _longResponse.session()); // NOTE: it's ok to use the localizer here, because this method is called form a valid main thread String message = (String)status; lpi.setMessage(message); if(errors.size() > 0) { lpi.setObject(_newsletter); NSArray array = new NSArray(errors.toArray()); EODataSource dataSource = ERXEOControlUtilities.dataSourceForArray(array); lpi.setDataSource(dataSource); } return (WOComponent)lpi; } }; public WOComponent sendAction(WOComponent sender) { WOComponent nextPage = D2W.factory ().pageForConfigurationNamed("SendNewsletter", sender.session()); ERD2WProgressPage lpi = (ERD2WProgressPage)nextPage; lpi.setLongResponseTask(task); lpi.setNextPageDelegate(this); nextPage = (WOComponent)lpi; return nextPage; } Cheers, Anjo Am 10.05.2007 um 21:09 schrieb Dev Wonder: > OK Guido, > I'm not too far I think thanks to your help. > > I only need to finish my custom task class... > > Do I have to overwrite pageForResult if I want to "stay" in my > "normal" component or overwriting performAction is enough? > > Thanks again > > Xavier > > > >> On 10.05.2007, at 10:07, Dev Wonder wrote: >> >>> Hum, your ERXLongResponse is a WOComponent you created which >>> extends ERXLongResponse am I right? >> >> Nope. I have a "normal" page. Nothing fancy. No long response >> stuff. I create HTML like that: >> >> <webobject name="PageWrapper"> >> <webobject name="TaskIsNotDoneConditional"> >> <webobject name="LongRunningTask"></webobject> >> Importing file: <webobject name="CurrentFileName"></ >> webobject><br><br> >> This page will refresh itself. Please don't leave this page!<br> >> Wait, until the import is done, this will take a couple of minutes. >> </webobject> >> <webobject name="TaskIsDoneConditional"> >> Done ... >> </webobject> >> </webobject> >> >> and the wod: >> >> PageWrapper : PageWrapper { >> >> } >> >> LongRunningTask : ERXLongResponse { >> task = task; >> refreshInterval = 10; >> } >> >> TaskIsDoneConditional : WOConditional { >> condition = task.isDone; >> } >> >> TaskIsNotDoneConditional : WOConditional { >> condition = task.isDone; >> negate = true; >> } >> >> CurrentFileName : WOString { >> value = task.currentFilename; >> } >> >> In the Java file: >> >> public class MyPage extends EVPage { >> >> private MyTask task; >> >> public MyPage(WOContext context) { >> super(context); >> >> this.task = new MyTask(); >> } >> >> public void setFiles(NSArray files) { >> this.task.setFiles(files); >> } >> >> public MyTask task() { >> return this.task; >> } >> >> public void setTask(MyTask task) { >> this.task = task; >> } >> >> } >> >> And that's it. The main implementation is in the task. >> >>> And MyCustomTask class extends >>> ERXLongResponseTask.DefaultImplementation, is that correct? >> >> Yep. >> >>> That would be awesome thanks Guido:) >> >> I'll try. >> >> cug >> > > > ---------------------------------------------------------------------- > --- > This SF.net email is sponsored by DB2 Express > Download DB2 Express C - the FREE version of DB2 express and take > control of your XML. No limits. Just data. Click to get it now. > http://sourceforge.net/powerbar/db2/ > _______________________________________________ > Wonder-disc mailing list > Won...@li... > https://lists.sourceforge.net/lists/listinfo/wonder-disc |