Your best bet really is looking at the existing code that uses the lower level 
objects.

Quick note: the "delegator" object will already in the bsh context, so no need 
to create or lookup that object (and it's better not to so that the per-application 
settings in web.xml don't get broken).

A good example of using the ProductSearch stuff is in the keywordsearch.bsh 
file (in the order component, also used in ecommerce, or the one in the catalog 
component). You'll see most stuff is handled in the underlying object, so the 
best thing to do is look at the forms and such to make sure parameters are 
named properly.

Some of this is redundant to the other email I sent in reply to your question 
about this. Did you get that one?

-David


Vince Clark wrote:
Thanks. That is so simple and clears up my confusion.

This thread should probably be in the dev forum at this point, but I'll
continue here.

Can you provide some clarity on how to get the information I want? For
example, if I want a screenlet with all "Brands" listed so I can click
on one and get all products of that brand?

I see two classes available under org.ofbiz.product.feature
ParametricSearch.java
ProductFeatureServices.java

ParametricSearch.java has a method called getAllFeaturesByType. Sure
sounds like what I need. It accepts a GenericDelegator. I haven't
explored this code yet but I assume it would be used in the following
fashion:
Use beanshell to instantiate a GenericDelegator, store the featureTypeId
in it somehow, then call the service.
Use context.put to store the results in the bsh context so the ftl can
access.


Adrian Crum wrote:
Vince Clark wrote:
That's the basics. Now to the next step, customizing the information in
the screenlets. This is where I am stuck. As far as I can tell the
process is basically to execute the bean shell (bsh file) defined in the
<action> tag of the screen definition. This interacts with the service
layer and puts information in the request object so it is accessible to
the ftl file for rendering.

I am struggling with understanding how beanshell puts the data in the
request. I see "context.put" and assume it happens here. I am also
struggling with what classes to use to get the information I need, and
how to pass these classes constraints to limit the result.
The beanshell context object is basically a HashMap that is passed to
Freemarker. So anything you "put" in the beanshell context is
available to "get" in Freemarker (or screen widgets).

In bsh:

context.put("MyMessage", "Hello World!");

In ftl:

<h1>${MyMessage}</h1>

Reply via email to