You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cocoon.apache.org by "Arsen A. Gutsal" <ar...@softsky.com.ua> on 2005/07/05 16:13:33 UTC

sitemap conditions handling

What's the best way to handle conditions in sitemap?
I'd prefer sitemap, not flowscipt.

So, I've the script, which store user to database.
After user is successfully stored, email should be sent to him with his
login/password and operation status. Everything works fine except I
can't catch session attribute set to ERROR and do not send email in that
case.

Sitemap looks like:

<map:match pattern="*-success">
        <!-- flow-attribute:customer should be set! -->
        <map:generate type="xquery" src="xq/update_customer.xq">
                <map:parameter name="id"
value="{flow-attribute:customer/*/@id}"/>
                <map:parameter name="email"
value="{flow-attribute:customer/*/email}"/>
                <map:parameter name="pin"
value="{flow-attribute:customer/@pin}"/>
        </map:generate>
        
        <!-- some condition should be here -->
        <map:call resource="sendMail">
                <map:parameter name="from"
value="{global:registrator-email}"/>
                <map:parameter name="to" value="{global:admin-email}"/>
                <map:parameter name="subject" value="New user has been
registered"/>
                <map:parameter name="src"
value="cocoon:/registration_email.jx"/>
        </map:call>
</map:match>

So, email should *not* be sent if record was not added to DB in xquery
generator (some session attribute was set to ERROR). I tried to put
map:select with parameter-selector-test and check "ERROR" value, but it
does not work.
Of course I can move sendmail action to another pipeline and then call
it from XSLT (when generating the page). So, if error was set I'll not
call this pipeline. But this is an incorrect way I guess (to mix
visualizing with actioning).  

-- 
--
Arsen A. Gutsal 
http://www.softsky.biz


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@cocoon.apache.org
For additional commands, e-mail: users-help@cocoon.apache.org


Re: sitemap conditions handling

Posted by "Arsen A. Gutsal" <ar...@softsky.com.ua>.
thanks.
It should help! ;)

On Tue, 2005-07-05 at 16:57 +0200, Leszek Gawron wrote:
> Arsen A. Gutsal wrote:
> > What's the best way to handle conditions in sitemap?
> > I'd prefer sitemap, not flowscipt.
> > 
> > So, I've the script, which store user to database.
> > After user is successfully stored, email should be sent to him with his
> > login/password and operation status. Everything works fine except I
> > can't catch session attribute set to ERROR and do not send email in that
> > case.
> > 
> > Sitemap looks like:
> > 
> > <map:match pattern="*-success">
> >         <!-- flow-attribute:customer should be set! -->
> >         <map:generate type="xquery" src="xq/update_customer.xq">
> >                 <map:parameter name="id"
> > value="{flow-attribute:customer/*/@id}"/>
> >                 <map:parameter name="email"
> > value="{flow-attribute:customer/*/email}"/>
> >                 <map:parameter name="pin"
> > value="{flow-attribute:customer/@pin}"/>
> >         </map:generate>
> >         
> >         <!-- some condition should be here -->
> >         <map:call resource="sendMail">
> >                 <map:parameter name="from"
> > value="{global:registrator-email}"/>
> >                 <map:parameter name="to" value="{global:admin-email}"/>
> >                 <map:parameter name="subject" value="New user has been
> > registered"/>
> >                 <map:parameter name="src"
> > value="cocoon:/registration_email.jx"/>
> >         </map:call>
> > </map:match>
> > 
> > So, email should *not* be sent if record was not added to DB in xquery
> > generator (some session attribute was set to ERROR). I tried to put
> > map:select with parameter-selector-test and check "ERROR" value, but it
> > does not work.
> > Of course I can move sendmail action to another pipeline and then call
> > it from XSLT (when generating the page). So, if error was set I'll not
> > call this pipeline. But this is an incorrect way I guess (to mix
> > visualizing with actioning).  
> > 
> The best way is to use flow (apples, flowscript anything).
> 
> if not you have to implement an action that will check for your 
> condition and fail if it detects an error. You can use ServerPagesAction 
> if you do not want to code in java.
> 
> Here is a sample:
> 
> <map:match pattern="login">
> 	<map:act type="serverpages" src="system/login.xsp">
> 		<!-- this is run when action succeeds -->
> 		<map:generate src="xml/login-ok.xml"/>
> 		<map:serialize/>
> 	</map:act>
> 	<!-- here is the 'failed' path -->
> 	<map:generate src="xml/login-error.xml"/>
> 	<map:serialize/>
> </map:match>
> 
> the action source:
> 
> > <?xml version="1.0" encoding="UTF-8"?>
> > <xsp:page	language="java"
> > 			xmlns:xsp="http://apache.org/xsp"
> > 			xmlns:xsp-request="http://apache.org/xsp/request/2.0"
> > 			xmlns:xsp-session="http://apache.org/xsp/session/2.0"
> > 			xmlns:action="http://apache.org/cocoon/action/1.0"
> > 			xmlns:esql="http://apache.org/cocoon/SQL/v2"
> > 			xmlns:log="http://apache.org/xsp/log/2.0"
> >        		>
> > <page>
> > 	<action:set-failure/>
> > 	<xsp:logic>
> > 		String username = <xsp-request:get-parameter name="username"/>;
> > 		if ( username == null ) {
> > 			<xsp-session:invalidate/>
> > 			return;
> > 		}
> > 	</xsp:logic>
> > 	<action:set-success/>
> > </page>
> > </xsp:page>
> 
> 
> the most important hwre is to declare a action namespace: 
> xmlns:action="http://apache.org/cocoon/action/1.0"
> and use action:set-failure or action:set-success tags.
> 
-- 
Sincerely,
Arsen A. Gutsal
SOFTSKY Ltd CEO/Executive
SOFTSKY - Cost effective Software Development


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@cocoon.apache.org
For additional commands, e-mail: users-help@cocoon.apache.org


Re: sitemap conditions handling

Posted by Leszek Gawron <lg...@mobilebox.pl>.
Arsen A. Gutsal wrote:
> What's the best way to handle conditions in sitemap?
> I'd prefer sitemap, not flowscipt.
> 
> So, I've the script, which store user to database.
> After user is successfully stored, email should be sent to him with his
> login/password and operation status. Everything works fine except I
> can't catch session attribute set to ERROR and do not send email in that
> case.
> 
> Sitemap looks like:
> 
> <map:match pattern="*-success">
>         <!-- flow-attribute:customer should be set! -->
>         <map:generate type="xquery" src="xq/update_customer.xq">
>                 <map:parameter name="id"
> value="{flow-attribute:customer/*/@id}"/>
>                 <map:parameter name="email"
> value="{flow-attribute:customer/*/email}"/>
>                 <map:parameter name="pin"
> value="{flow-attribute:customer/@pin}"/>
>         </map:generate>
>         
>         <!-- some condition should be here -->
>         <map:call resource="sendMail">
>                 <map:parameter name="from"
> value="{global:registrator-email}"/>
>                 <map:parameter name="to" value="{global:admin-email}"/>
>                 <map:parameter name="subject" value="New user has been
> registered"/>
>                 <map:parameter name="src"
> value="cocoon:/registration_email.jx"/>
>         </map:call>
> </map:match>
> 
> So, email should *not* be sent if record was not added to DB in xquery
> generator (some session attribute was set to ERROR). I tried to put
> map:select with parameter-selector-test and check "ERROR" value, but it
> does not work.
> Of course I can move sendmail action to another pipeline and then call
> it from XSLT (when generating the page). So, if error was set I'll not
> call this pipeline. But this is an incorrect way I guess (to mix
> visualizing with actioning).  
> 
The best way is to use flow (apples, flowscript anything).

if not you have to implement an action that will check for your 
condition and fail if it detects an error. You can use ServerPagesAction 
if you do not want to code in java.

Here is a sample:

<map:match pattern="login">
	<map:act type="serverpages" src="system/login.xsp">
		<!-- this is run when action succeeds -->
		<map:generate src="xml/login-ok.xml"/>
		<map:serialize/>
	</map:act>
	<!-- here is the 'failed' path -->
	<map:generate src="xml/login-error.xml"/>
	<map:serialize/>
</map:match>

the action source:

> <?xml version="1.0" encoding="UTF-8"?>
> <xsp:page	language="java"
> 			xmlns:xsp="http://apache.org/xsp"
> 			xmlns:xsp-request="http://apache.org/xsp/request/2.0"
> 			xmlns:xsp-session="http://apache.org/xsp/session/2.0"
> 			xmlns:action="http://apache.org/cocoon/action/1.0"
> 			xmlns:esql="http://apache.org/cocoon/SQL/v2"
> 			xmlns:log="http://apache.org/xsp/log/2.0"
>        		>
> <page>
> 	<action:set-failure/>
> 	<xsp:logic>
> 		String username = <xsp-request:get-parameter name="username"/>;
> 		if ( username == null ) {
> 			<xsp-session:invalidate/>
> 			return;
> 		}
> 	</xsp:logic>
> 	<action:set-success/>
> </page>
> </xsp:page>


the most important hwre is to declare a action namespace: 
xmlns:action="http://apache.org/cocoon/action/1.0"
and use action:set-failure or action:set-success tags.

-- 
Leszek Gawron                                      lgawron@mobilebox.pl
IT Manager                                         MobileBox sp. z o.o.
+48 (61) 855 06 67                              http://www.mobilebox.pl
mobile: +48 (501) 720 812                       fax: +48 (61) 853 29 65

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@cocoon.apache.org
For additional commands, e-mail: users-help@cocoon.apache.org