Beanshell

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
8 messages Options
Reply | Threaded
Open this post in threaded view
|

Beanshell

G.Ben
Hello everyone,

Please, can anyone tell me what is wrong with this script ?

import org.ofbiz.base.location.FlexibleLocation;
import freemarker.ext.beans.BeansWrapper;
String scriptName = request.getParameter("scriptName");
if (scriptName == null || scriptName.length() == 0) {
return "success";
}
String lookInLocation = "component://learning/webapp/learning/WEB-INF/actions/entityaccess/";
URL location = FlexibleLocation.resolveLocation(lookInLocation + scriptName);
if (location == null) {
context.put("errorMsg", "Script name \"" + scriptName + "\" not found at " + lookInLocation);
return "success";
}
source(location);
bw = BeansWrapper.getDefaultInstance();
bw.setSimpleMapWrapper(true);
Object massaged;
if (data instanceof List) {
massaged = new ArrayList();
dataItr = data.iterator();
while (dataItr.hasNext()) {
record = (Map) dataItr.next();
massaged.add(bw.wrap(record));
}
}
else if (data instanceof Map) {
massaged = bw.wrap(data);
}
if (massaged != null) {
context.put("data", massaged);
}
return "success";



Thank you so much for your help,

Regards.
Reply | Threaded
Open this post in threaded view
|

Re: Beanshell

Robert Gan
please specify your problem, that we know for what to look.

thanks
G.Ben wrote
Hello everyone,

Please, can anyone tell me what is wrong with this script ?

import org.ofbiz.base.location.FlexibleLocation;
import freemarker.ext.beans.BeansWrapper;
String scriptName = request.getParameter("scriptName");
if (scriptName == null || scriptName.length() == 0) {
return "success";
}
String lookInLocation = "component://learning/webapp/learning/WEB-INF/actions/entityaccess/";
URL location = FlexibleLocation.resolveLocation(lookInLocation + scriptName);
if (location == null) {
context.put("errorMsg", "Script name \"" + scriptName + "\" not found at " + lookInLocation);
return "success";
}
source(location);
bw = BeansWrapper.getDefaultInstance();
bw.setSimpleMapWrapper(true);
Object massaged;
if (data instanceof List) {
massaged = new ArrayList();
dataItr = data.iterator();
while (dataItr.hasNext()) {
record = (Map) dataItr.next();
massaged.add(bw.wrap(record));
}
}
else if (data instanceof Map) {
massaged = bw.wrap(data);
}
if (massaged != null) {
context.put("data", massaged);
}
return "success";



Thank you so much for your help,

Regards.
Reply | Threaded
Open this post in threaded view
|

Re: Beanshell

G.Ben
When trying to see the URL, I get the following error message :


org.ofbiz.widget.screen.ScreenRenderException: Error rendering screen [component://learning/widget/learning/LearningScreens.xml#ProcessEntityAccessBSF]: java.lang.IllegalArgumentException: Error running script at location [component://learning/webapp/learning/WEB-INF/actions/entityaccess/processEntityAccessBSF.bsh]: javax.script.ScriptException: Sourced file: eval stream : Attempt to resolve method: length() on undefined variable or class name: scriptName : at Line: 4 : in file: eval stream : scriptName .length ( )
in eval stream at line number 4 (Error running script at location [component://learning/webapp/learning/WEB-INF/actions/entityaccess/processEntityAccessBSF.bsh]: javax.script.ScriptException: Sourced file: eval stream : Attempt to resolve method: length() on undefined variable or class name: scriptName : at Line: 4 : in file: eval stream : scriptName .length ( )
in eval stream at line number 4)

Thanks  for replying
Reply | Threaded
Open this post in threaded view
|

Re: Beanshell

Robert Gan
The error message tells you the problem exactly:

Attempt to resolve method: length() on undefined variable or class name: scriptName : at Line: 4 : in file: eval stream : scriptName .length ( )

This means, that you cannot call this method (length()) on a "null" value.

In Groovy, a null or empty string evaluates to a boolean false value, so you can just write:


if (scriptName) {
return "success";
}




G.Ben wrote
When trying to see the URL, I get the following error message :


org.ofbiz.widget.screen.ScreenRenderException: Error rendering screen [component://learning/widget/learning/LearningScreens.xml#ProcessEntityAccessBSF]: java.lang.IllegalArgumentException: Error running script at location [component://learning/webapp/learning/WEB-INF/actions/entityaccess/processEntityAccessBSF.bsh]: javax.script.ScriptException: Sourced file: eval stream : Attempt to resolve method: length() on undefined variable or class name: scriptName : at Line: 4 : in file: eval stream : scriptName .length ( )
in eval stream at line number 4 (Error running script at location [component://learning/webapp/learning/WEB-INF/actions/entityaccess/processEntityAccessBSF.bsh]: javax.script.ScriptException: Sourced file: eval stream : Attempt to resolve method: length() on undefined variable or class name: scriptName : at Line: 4 : in file: eval stream : scriptName .length ( )
in eval stream at line number 4)

Thanks  for replying
Reply | Threaded
Open this post in threaded view
|

Re: Beanshell

Robert Gan
Sorry, I meant

if (!scriptName) {
return "success";
}

cause you wanted the success return when it is null or empty.
Reply | Threaded
Open this post in threaded view
|

Re: Beanshell

G.Ben
Thank you so much Robert G.

I couldn't understand the error message.

Thank you again.

Regards.
Reply | Threaded
Open this post in threaded view
|

Re: Beanshell

<#list keys as key>
</#list>
<#-- Data -->
<#if data?is_sequence>
<#list data as record>
<#list keys as key>
</#list>
</#list>
<#else>
<#list keys as key>
</#list>
</#if>
</#macro>



"controller.xml"

<request-map uri="ProcessEntityAccessBSF">
    <response name="success" type="view" value="ProcessEntityAccessBSF"/>
</request-map>


<view-map name="ProcessEntityAccessBSF" type="screen" page="component://learning/widget/learning/LearningScreens.xml#ProcessEntityAccessBSF"/>


Anyhelp please,
I appreciate


Thank you.


Regards.


G.Ben
Helloo, I found another Error,

Actually I'm trying to run a beanshell script that allows me to run another script to access entities (according to a tutorial), I did all what they said however when trying to visualize the URL I get the following error : (The URL first show a field when I enter the script that I would run, trying to click on submit I get an error)

"org.ofbiz.webapp.control.RequestHandlerException: Unknown request [processEntityAccessBSF]; this request does not exist or cannot be called directly."



here are the files that are involved in this operation :

"processEntityAccessBSF.bsh" it's described above,

"test.bsh"
data = delegator.findAll("PostalAddress");

"Learning Screens.xml"
<screen name="ProcessEntityAccessBSF">
                        <section>
                                <actions>
                                        <script location="component://learning/webapp/learning/WEB-INF/actions/entityaccess/processEntityAccessBSF.bsh"/>
                                </actions>
                                <widgets>
                                        <decorator-screen name="main-decorator" location="${parameters.mainDecoratorLocation}">
                                                <decorator-section name="title">
                                                        <label text="Generic Screen for Displaying Data Retrieved"/>
                                                </decorator-section>
                                                <decorator-section name="body">
                                                        <include-form name="ScriptNameForm" location="component://learning/widget/learning/LearningForms.xml"/>
                                                        <section>
                                                                <condition>
                                                                        <not>
                                                                                <if-empty field-name="parameters.scriptName"/>
                                                                        </not>
                                                        </condition>
                                                                <widgets>
                                                                        <platform-specific>
                                                                                <html>
                                                                                        <html-template location="component://learning/webapp/learning/entityaccess/displaydataretrieved.ftl"/>
                                                                                </html>
                                                                        </platform-specific>
                                                                </widgets>
                                                        </section>
                                                </decorator-section>
                                        </decorator-screen>
                                </widgets>
                        </section>
                </screen>



"LearningForms.xml"
<form name="ScriptNameForm" type="single" target="processEntityAccessBSF">
                <field name="scriptName"><text/></field>
                <field name="submit"><submit/></field>
</form>

"displaydataretrieved.ftl"
<#if errorMsg?has_content>

${errorMsg}

<#else>

Processed script: "${parameters.scriptName}"

<#if data?has_content && (data?is_sequence || data?is_hash)>
<@displayData data=data/>
<#else>

No data records retrieved.

</#if>
</#if>
<#macro displayData data>
<#if data?is_sequence>
<#assign keys = data?first?keys/>
<#else>
<#assign keys = data?keys/>
</#if>
<#-- Header -->
${key}
${record[key]!""}
${data[key]!""}
Reply | Threaded
Open this post in threaded view
|

Re: Beanshell

Jay Jain
Hi Ben
It is a mistake in 'p', use it.

<request-map uri="processEntityAccessBSF">
     <response name="success" type="view" value="ProcessEntityAccessBSF"/>
</request-map>

Regard
Jay Jain

On 07/23/2012 03:33 PM, G.Ben wrote:

> Helloo, I found another Error,
>
> Actually I'm trying to run a beanshell script that allows me to run another
> script to access entities (according to a tutorial), I did all what they
> said however when trying to visualize the URL I get the following error :
> (The URL first show a field when I enter the script that I would run, trying
> to click on submit I get an error)
>
> "org.ofbiz.webapp.control.RequestHandlerException: Unknown request
> [processEntityAccessBSF]; this request does not exist or cannot be called
> directly."
>
>
>
> here are the files that are involved in this operation :
>
> "processEntityAccessBSF.bsh" it's described above,
>
> "test.bsh"
> data = delegator.findAll("PostalAddress");
>
> "Learning Screens.xml"
> <screen name="ProcessEntityAccessBSF">
> <section>
> <actions>
> <script
> location="component://learning/webapp/learning/WEB-INF/actions/entityaccess/processEntityAccessBSF.bsh"/>
> </actions>
> <widgets>
> <decorator-screen name="main-decorator"
> location="${parameters.mainDecoratorLocation}">
> <decorator-section name="title">
> <label text="Generic Screen for Displaying Data Retrieved"/>
> </decorator-section>
> <decorator-section name="body">
> <include-form name="ScriptNameForm"
> location="component://learning/widget/learning/LearningForms.xml"/>
> <section>
> <condition>
> <not>
> <if-empty field-name="parameters.scriptName"/>
> </not>
> </condition>
> <widgets>
> <platform-specific>
> <html>
> <html-template
> location="component://learning/webapp/learning/entityaccess/displaydataretrieved.ftl"/>
> </html>
> </platform-specific>
> </widgets>
> </section>
> </decorator-section>
> </decorator-screen>
> </widgets>
> </section>
> </screen>
>
>
>
> "LearningForms.xml"
> <form name="ScriptNameForm" type="single" target="processEntityAccessBSF">
> <field name="scriptName"><text/></field>
> <field name="submit"><submit/></field>
> </form>
>
> "displaydataretrieved.ftl"
> <#if errorMsg?has_content>
> ${errorMsg}
>
> <#else>
> Processed script: "${parameters.scriptName}"
>
> <#if data?has_content&&  (data?is_sequence || data?is_hash)>
>
> <@displayData data=data/>
>
> <#else>
> No data records retrieved.
>
> </#if>
> </#if>
> <#macro displayData data>
> <#if data?is_sequence>
> <#assign keys = data?first?keys/>
> <#else>
> <#assign keys = data?keys/>
> </#if>
> <#-- Header -->
>
> <#list keys as key>
> *${key}*
> </#list>
>
> <#-- Data -->
> <#if data?is_sequence>
> <#list data as record>
>
> <#list keys as key>
> ${record[key]!""}
> </#list>
>
> </#list>
> <#else>
>
> <#list keys as key>
> ${data[key]!""}
> </#list>
>
> </#if>
> </#macro>
>
>
>
> "controller.xml"
>
> <request-map uri="ProcessEntityAccessBSF">
>      <response name="success" type="view" value="ProcessEntityAccessBSF"/>
> </request-map>
>
>
> <view-map name="ProcessEntityAccessBSF" type="screen"
> page="component://learning/widget/learning/LearningScreens.xml#ProcessEntityAccessBSF"/>
>
>
> Anyhelp please,
> I appreciate
>
>
> Thank you.
>
>
> Regards.
>
>
>
>
>
>
> --
> View this message in context: http://ofbiz.135035.n4.nabble.com/Beanshell-tp4635129p4635148.html
> Sent from the OFBiz - User mailing list archive at Nabble.com.