Thanks to all who replied on this, but I guess I didn't explain it well.  I
have no problem dispatching to one URL or the other, I can return any
response I want.  The problem is this:

     <request-map uri="findTransactions">
         <security https="true" auth="true"/>
    <!--     <event type="service" invoke="getBillingAccountCount"/> -->
         <event type="java"
path="org.ofbiz.accounting.ar.BillingAccountWorker"
invoke="getBillingAccountCount"/>
         <response name="fail" type="view" value="findTransactions"/>
         <response name="success" type="view" value="showTransactions"/>
     </request-map>

On pass one through this findTransactions, fail is returned because there
are no entries (no customer or billing account entered) and findTransactions
gets called.  This is correct.  On pass two, the user has entered either a
customerId or a billingAccountId.  If there is only one,
getBillingAccountCount returns success and showTransactions gets called.
This is correct.  The problem is that the billingAccountId I stuffed in
getBillingAccountCount is not available to the bash script associated with
showTransactions.  And yes, this is all based on plainolde widgets.   I
tried the following:

           request.setAttribute("billingAccountId", billingAccountId);

and for the service

           context.put("billingAccountId", billingAccountId);



Neither results in the bash script loaded by showTransactions having the
billingAccountId available.

To answer Scott, yes, I could take this cheating way out because I do have
the customerId, but this was an excercise as well as the solution to a
single problem.  I have other needs for a technique like this.  For example,
the customer could enter a partial customer name or billingAccountId and I
could still show the screen if only one result matched.

The question is, how to get the data I find in getBillingAccountCount into
the bash script in showTransactions.  I hate to stuff it in the session when
it really belongs in the request.  I don't want to clutter up the session
object like that.

However, I read this in the Javadocs "Attributes are reset between
requests".  So I guess that going from getBillingAccountCount to
showTransactions means that it is a new request even though nothing has been
emitted back to the browser?


Skip



-----Original Message-----
From: BJ Freeman [mailto:[EMAIL PROTECTED]
Sent: Friday, November 16, 2007 7:44 PM
To: [email protected]
Subject: Re: Difficult Question


are you using the controller and widgets.
you can call bsh files from the action and make this one operation.

have you looked at
    <request-map uri="orderentry">
        <security https="true" auth="true"/>
        <event type="java"
path="org.ofbiz.order.shoppingcart.ShoppingCartEvents"
invoke="routeOrderEntry"/>
        <response name="init" type="view" value="checkinits"/>
        <response name="agreements" type="view" value="orderagreements"/>
        <response name="cart" type="view" value="showcart"/>
        <response name="error" type="view" value="checkinits"/>
    </request-map>





[EMAIL PROTECTED] sent the following on 11/16/2007 7:06 PM:
> I have fooled with this all day now and I bet there is someone out there
who
> knows exactly how to do this.
>
> I have a URL, showTransactions that is normally called like this:
>
> .../showTransactions?billingAccountId=xyz
>
> I have another url;
>
> .../findTransactions
>
> The user gets dispatched to .../findTransactions and enters a partyId is
> present with a list of billingAccounts for a customer and they click on
the
> billing account and off they go they go to
> .../showTransactions?billingAccountId=xyz
>
> What I want to do is if there is only one billing account, I don't want
them
> to have to click the link.  I want to take them right there.  So, I tried
> writing both a service and a servlet like this:
>
>     public static Map getBillingAccountCount(DispatchContext dctx, Map
> context) {
>
> and
>
>     public static String getBillingAccountCount(HttpServletRequest
request,
> HttpServletResponse response) {
>
> In the first, I stuffed the billingAccountId in the context.  In the
second,
> I stuffed it in an attribute (there is, unfortunately, no setParameter
which
> is exactly what I wanted).
>
> Here is a sample of the dispatcher:
>
>     <request-map uri="findTransactions">
>         <security https="true" auth="true"/>
>    <!--     <event type="service" invoke="getBillingAccountCount"/> -->
>         <event type="java"
> path="org.ofbiz.accounting.ar.BillingAccountWorker"
> invoke="getBillingAccountCount"/>
>         <response name="fail" type="view" value="findTransactions"/>
>         <response name="success" type="view" value="showTransactions"/>
>     </request-map>
>
> When the bash script gets called for showTransactions using either method,
> billingAccountId is not there.
>
> Anyone have any ideas on how to do this redirection and add parameters to
> the request or context?  I can do this with a servlet and filters, but I
> don't understand how Ofbiz handles all that.
>
> Skip
>
>
>
>

Reply via email to