You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@ofbiz.apache.org by Skip <sk...@thedevers.org> on 2012/04/18 20:16:40 UTC

Service with validate=false not getting all parameters

I have a URL in a controller like this:

    <request-map uri="createGenericProductNumber">
        <security https="true" auth="true"/>
        <event type="service" invoke="createGenericProductNumber"/>
        <response name="success" type="view"
value="generatePartNumberForm"/>
        <response name="error" type="view" value="generatePartNumberForm"/>
    </request-map>


The service is declared like this:

    <service name="createGenericProductNumber" engine="java" auth="true"
default-entity-name=""
            location="com.fs.inventory.GenerateInventoryPartNumbers"
invoke="createGenericProductNumber"
            use-transaction="true" validate="false" >
        <description>
        	Create an endmill product id from the required inputs
        </description>
       <attribute name="kindId" type="String" mode="INOUT"
optional="false"/>
       <attribute name="tableName" type="String" mode="IN"
optional="false"/>
       <attribute name="encodeIdString" type="String" mode="IN"
optional="false"/>
        <attribute name="partNumber" type="String" mode="OUT"
optional="false"/>
        <attribute name="description" type="String" mode="OUT"
optional="true"/>
        <attribute name="longDesc" type="String" mode="OUT"
optional="true"/>
     </service>


Note the "validate=false".  This url is called from a screen that has lots
of parameters not declared in service above like width, length, etc.  None
of these parameters are being passed to the createGenericProductNumber
service in its context.


I rewrote the the url like this:

    <request-map uri="createGenericProductNumber">
        <security https="true" auth="true"/>
        <event type="java" path="com.fs.inventory.InventoryEvents"
invoke="createGenericProductNumber"/>
        <response name="success" type="view"
value="generatePartNumberForm"/>
        <response name="error" type="view" value="generatePartNumberForm"/>
    </request-map>

In this case, all the parameters from the page are in the parameter map of
the HttpServletRequest.

Is there any way I can get the service engine to pass all the parameters
from request in the context to the service and not just those in the service
declaration?

Thanks in Advance
Skip


Re: Service with validate=false not getting all parameters

Posted by Vikas Mayur <vi...@gmail.com>.
The best practice in OFBiz is to define a separate form/screen to perform the CRUD operation on a certain entity and it seems that you are trying to update multiple entities through some generic form & service? You may go with Deepak's suggestion.

Regards
Vikas

On Apr 20, 2012, at 10:41 PM, Skip wrote:

> Vikas
> 
> Thank for the response.  However, in this case, if you look at the service
> definition below, the entity is passed in when the service is called.  It is
> not known in advance.  In the java code I wrote, I used
> GenericEntity.getAllFields() to retrieve the fields and map them to the
> values passed in in the request parameters.  This all works fine.  I would
> just like to use a service instead of java code.  I could do that if I could
> convince the service engine to pass all the parameters in the
> HttpServletRequest in the context to the service.  I expected that to happen
> if I used validate=false, but sadly, that is not the case.
> 
> Is there perhaps another setting I can use?   I scanned the services.xsd
> file but found no likely attribute.  Or perhaps, I can modify the part of
> the service code where the context is built.   I looked all over the service
> engine to see where it set up the context, but could not find where it
> happened.
> 
> Skip
> 
> 
> 
> -----Original Message-----
> From: Vikas Mayur [mailto:vikasmayur@gmail.com]
> Sent: Friday, April 20, 2012 1:59 AM
> To: user@ofbiz.apache.org
> Subject: Re: Service with validate=false not getting all parameters
> 
> 
> Provided all the form parameters map to certain entity(ies) , you can use
> <auto-attibutes> on service definition to define all the parameters without
> explicitly specifying each attribute, of-course you can explicitly
> override/exclude certain parameters.
> 
> Regards
> Vikas
> 
> On Apr 18, 2012, at 11:46 PM, Skip wrote:
> 
>> I have a URL in a controller like this:
>> 
>>   <request-map uri="createGenericProductNumber">
>>       <security https="true" auth="true"/>
>>       <event type="service" invoke="createGenericProductNumber"/>
>>       <response name="success" type="view"
>> value="generatePartNumberForm"/>
>>       <response name="error" type="view" value="generatePartNumberForm"/>
>>   </request-map>
>> 
>> 
>> The service is declared like this:
>> 
>>   <service name="createGenericProductNumber" engine="java" auth="true"
>> default-entity-name=""
>>           location="com.fs.inventory.GenerateInventoryPartNumbers"
>> invoke="createGenericProductNumber"
>>           use-transaction="true" validate="false" >
>>       <description>
>>       	Create an endmill product id from the required inputs
>>       </description>
>>      <attribute name="kindId" type="String" mode="INOUT"
>> optional="false"/>
>>      <attribute name="tableName" type="String" mode="IN"
>> optional="false"/>
>>      <attribute name="encodeIdString" type="String" mode="IN"
>> optional="false"/>
>>       <attribute name="partNumber" type="String" mode="OUT"
>> optional="false"/>
>>       <attribute name="description" type="String" mode="OUT"
>> optional="true"/>
>>       <attribute name="longDesc" type="String" mode="OUT"
>> optional="true"/>
>>    </service>
>> 
>> 
>> Note the "validate=false".  This url is called from a screen that has lots
>> of parameters not declared in service above like width, length, etc.  None
>> of these parameters are being passed to the createGenericProductNumber
>> service in its context.
>> 
>> 
>> I rewrote the the url like this:
>> 
>>   <request-map uri="createGenericProductNumber">
>>       <security https="true" auth="true"/>
>>       <event type="java" path="com.fs.inventory.InventoryEvents"
>> invoke="createGenericProductNumber"/>
>>       <response name="success" type="view"
>> value="generatePartNumberForm"/>
>>       <response name="error" type="view" value="generatePartNumberForm"/>
>>   </request-map>
>> 
>> In this case, all the parameters from the page are in the parameter map of
>> the HttpServletRequest.
>> 
>> Is there any way I can get the service engine to pass all the parameters
>> from request in the context to the service and not just those in the
> service
>> declaration?
>> 
>> Thanks in Advance
>> Skip
>> 
> 
> 


RE: Service with validate=false not getting all parameters

Posted by Skip <sk...@thedevers.org>.
Deepak

Thanks for this, I checked your example and I think this will work fine for me.

Skip

-----Original Message-----
From: Deepak Dixit [mailto:deepak.dixit@hotwaxmedia.com]
Sent: Friday, April 20, 2012 10:42 PM
To: user@ofbiz.apache.org
Subject: Re: Service with validate=false not getting all parameters



You can use string-map-prefix to get the random parameter. Please refer updateOrderItems service definition under (applications/order/servicedef/services.xml)

Thanks & Regards
--
Deepak Dixit

----- Original Message -----
From: "Skip" <sk...@thedevers.org>
To: user@ofbiz.apache.org
Sent: Friday, April 20, 2012 10:41:09 PM
Subject: RE: Service with validate=false not getting all parameters

Vikas

Thank for the response.  However, in this case, if you look at the service
definition below, the entity is passed in when the service is called.  It is
not known in advance.  In the java code I wrote, I used
GenericEntity.getAllFields() to retrieve the fields and map them to the
values passed in in the request parameters.  This all works fine.  I would
just like to use a service instead of java code.  I could do that if I could
convince the service engine to pass all the parameters in the
HttpServletRequest in the context to the service.  I expected that to happen
if I used validate=false, but sadly, that is not the case.

Is there perhaps another setting I can use?   I scanned the services.xsd
file but found no likely attribute.  Or perhaps, I can modify the part of
the service code where the context is built.   I looked all over the service
engine to see where it set up the context, but could not find where it
happened.

Skip



-----Original Message-----
From: Vikas Mayur [mailto:vikasmayur@gmail.com]
Sent: Friday, April 20, 2012 1:59 AM
To: user@ofbiz.apache.org
Subject: Re: Service with validate=false not getting all parameters


Provided all the form parameters map to certain entity(ies) , you can use
<auto-attibutes> on service definition to define all the parameters without
explicitly specifying each attribute, of-course you can explicitly
override/exclude certain parameters.

Regards
Vikas

On Apr 18, 2012, at 11:46 PM, Skip wrote:

> I have a URL in a controller like this:
>
>    <request-map uri="createGenericProductNumber">
>        <security https="true" auth="true"/>
>        <event type="service" invoke="createGenericProductNumber"/>
>        <response name="success" type="view"
> value="generatePartNumberForm"/>
>        <response name="error" type="view" value="generatePartNumberForm"/>
>    </request-map>
>
>
> The service is declared like this:
>
>    <service name="createGenericProductNumber" engine="java" auth="true"
> default-entity-name=""
>            location="com.fs.inventory.GenerateInventoryPartNumbers"
> invoke="createGenericProductNumber"
>            use-transaction="true" validate="false" >
>        <description>
>        	Create an endmill product id from the required inputs
>        </description>
>       <attribute name="kindId" type="String" mode="INOUT"
> optional="false"/>
>       <attribute name="tableName" type="String" mode="IN"
> optional="false"/>
>       <attribute name="encodeIdString" type="String" mode="IN"
> optional="false"/>
>        <attribute name="partNumber" type="String" mode="OUT"
> optional="false"/>
>        <attribute name="description" type="String" mode="OUT"
> optional="true"/>
>        <attribute name="longDesc" type="String" mode="OUT"
> optional="true"/>
>     </service>
>
>
> Note the "validate=false".  This url is called from a screen that has lots
> of parameters not declared in service above like width, length, etc.  None
> of these parameters are being passed to the createGenericProductNumber
> service in its context.
>
>
> I rewrote the the url like this:
>
>    <request-map uri="createGenericProductNumber">
>        <security https="true" auth="true"/>
>        <event type="java" path="com.fs.inventory.InventoryEvents"
> invoke="createGenericProductNumber"/>
>        <response name="success" type="view"
> value="generatePartNumberForm"/>
>        <response name="error" type="view" value="generatePartNumberForm"/>
>    </request-map>
>
> In this case, all the parameters from the page are in the parameter map of
> the HttpServletRequest.
>
> Is there any way I can get the service engine to pass all the parameters
> from request in the context to the service and not just those in the
service
> declaration?
>
> Thanks in Advance
> Skip
>




Re: Service with validate=false not getting all parameters

Posted by Deepak Dixit <de...@hotwaxmedia.com>.
You can use string-map-prefix to get the random parameter. Please refer updateOrderItems service definition under (applications/order/servicedef/services.xml)

Thanks & Regards
--
Deepak Dixit

----- Original Message -----
From: "Skip" <sk...@thedevers.org>
To: user@ofbiz.apache.org
Sent: Friday, April 20, 2012 10:41:09 PM
Subject: RE: Service with validate=false not getting all parameters

Vikas

Thank for the response.  However, in this case, if you look at the service
definition below, the entity is passed in when the service is called.  It is
not known in advance.  In the java code I wrote, I used
GenericEntity.getAllFields() to retrieve the fields and map them to the
values passed in in the request parameters.  This all works fine.  I would
just like to use a service instead of java code.  I could do that if I could
convince the service engine to pass all the parameters in the
HttpServletRequest in the context to the service.  I expected that to happen
if I used validate=false, but sadly, that is not the case.

Is there perhaps another setting I can use?   I scanned the services.xsd
file but found no likely attribute.  Or perhaps, I can modify the part of
the service code where the context is built.   I looked all over the service
engine to see where it set up the context, but could not find where it
happened.

Skip



-----Original Message-----
From: Vikas Mayur [mailto:vikasmayur@gmail.com]
Sent: Friday, April 20, 2012 1:59 AM
To: user@ofbiz.apache.org
Subject: Re: Service with validate=false not getting all parameters


Provided all the form parameters map to certain entity(ies) , you can use
<auto-attibutes> on service definition to define all the parameters without
explicitly specifying each attribute, of-course you can explicitly
override/exclude certain parameters.

Regards
Vikas

On Apr 18, 2012, at 11:46 PM, Skip wrote:

> I have a URL in a controller like this:
>
>    <request-map uri="createGenericProductNumber">
>        <security https="true" auth="true"/>
>        <event type="service" invoke="createGenericProductNumber"/>
>        <response name="success" type="view"
> value="generatePartNumberForm"/>
>        <response name="error" type="view" value="generatePartNumberForm"/>
>    </request-map>
>
>
> The service is declared like this:
>
>    <service name="createGenericProductNumber" engine="java" auth="true"
> default-entity-name=""
>            location="com.fs.inventory.GenerateInventoryPartNumbers"
> invoke="createGenericProductNumber"
>            use-transaction="true" validate="false" >
>        <description>
>        	Create an endmill product id from the required inputs
>        </description>
>       <attribute name="kindId" type="String" mode="INOUT"
> optional="false"/>
>       <attribute name="tableName" type="String" mode="IN"
> optional="false"/>
>       <attribute name="encodeIdString" type="String" mode="IN"
> optional="false"/>
>        <attribute name="partNumber" type="String" mode="OUT"
> optional="false"/>
>        <attribute name="description" type="String" mode="OUT"
> optional="true"/>
>        <attribute name="longDesc" type="String" mode="OUT"
> optional="true"/>
>     </service>
>
>
> Note the "validate=false".  This url is called from a screen that has lots
> of parameters not declared in service above like width, length, etc.  None
> of these parameters are being passed to the createGenericProductNumber
> service in its context.
>
>
> I rewrote the the url like this:
>
>    <request-map uri="createGenericProductNumber">
>        <security https="true" auth="true"/>
>        <event type="java" path="com.fs.inventory.InventoryEvents"
> invoke="createGenericProductNumber"/>
>        <response name="success" type="view"
> value="generatePartNumberForm"/>
>        <response name="error" type="view" value="generatePartNumberForm"/>
>    </request-map>
>
> In this case, all the parameters from the page are in the parameter map of
> the HttpServletRequest.
>
> Is there any way I can get the service engine to pass all the parameters
> from request in the context to the service and not just those in the
service
> declaration?
>
> Thanks in Advance
> Skip
>



RE: Service with validate=false not getting all parameters

Posted by Skip <sk...@thedevers.org>.
Vikas

Thank for the response.  However, in this case, if you look at the service
definition below, the entity is passed in when the service is called.  It is
not known in advance.  In the java code I wrote, I used
GenericEntity.getAllFields() to retrieve the fields and map them to the
values passed in in the request parameters.  This all works fine.  I would
just like to use a service instead of java code.  I could do that if I could
convince the service engine to pass all the parameters in the
HttpServletRequest in the context to the service.  I expected that to happen
if I used validate=false, but sadly, that is not the case.

Is there perhaps another setting I can use?   I scanned the services.xsd
file but found no likely attribute.  Or perhaps, I can modify the part of
the service code where the context is built.   I looked all over the service
engine to see where it set up the context, but could not find where it
happened.

Skip



-----Original Message-----
From: Vikas Mayur [mailto:vikasmayur@gmail.com]
Sent: Friday, April 20, 2012 1:59 AM
To: user@ofbiz.apache.org
Subject: Re: Service with validate=false not getting all parameters


Provided all the form parameters map to certain entity(ies) , you can use
<auto-attibutes> on service definition to define all the parameters without
explicitly specifying each attribute, of-course you can explicitly
override/exclude certain parameters.

Regards
Vikas

On Apr 18, 2012, at 11:46 PM, Skip wrote:

> I have a URL in a controller like this:
>
>    <request-map uri="createGenericProductNumber">
>        <security https="true" auth="true"/>
>        <event type="service" invoke="createGenericProductNumber"/>
>        <response name="success" type="view"
> value="generatePartNumberForm"/>
>        <response name="error" type="view" value="generatePartNumberForm"/>
>    </request-map>
>
>
> The service is declared like this:
>
>    <service name="createGenericProductNumber" engine="java" auth="true"
> default-entity-name=""
>            location="com.fs.inventory.GenerateInventoryPartNumbers"
> invoke="createGenericProductNumber"
>            use-transaction="true" validate="false" >
>        <description>
>        	Create an endmill product id from the required inputs
>        </description>
>       <attribute name="kindId" type="String" mode="INOUT"
> optional="false"/>
>       <attribute name="tableName" type="String" mode="IN"
> optional="false"/>
>       <attribute name="encodeIdString" type="String" mode="IN"
> optional="false"/>
>        <attribute name="partNumber" type="String" mode="OUT"
> optional="false"/>
>        <attribute name="description" type="String" mode="OUT"
> optional="true"/>
>        <attribute name="longDesc" type="String" mode="OUT"
> optional="true"/>
>     </service>
>
>
> Note the "validate=false".  This url is called from a screen that has lots
> of parameters not declared in service above like width, length, etc.  None
> of these parameters are being passed to the createGenericProductNumber
> service in its context.
>
>
> I rewrote the the url like this:
>
>    <request-map uri="createGenericProductNumber">
>        <security https="true" auth="true"/>
>        <event type="java" path="com.fs.inventory.InventoryEvents"
> invoke="createGenericProductNumber"/>
>        <response name="success" type="view"
> value="generatePartNumberForm"/>
>        <response name="error" type="view" value="generatePartNumberForm"/>
>    </request-map>
>
> In this case, all the parameters from the page are in the parameter map of
> the HttpServletRequest.
>
> Is there any way I can get the service engine to pass all the parameters
> from request in the context to the service and not just those in the
service
> declaration?
>
> Thanks in Advance
> Skip
>



Re: Service with validate=false not getting all parameters

Posted by Vikas Mayur <vi...@gmail.com>.
Provided all the form parameters map to certain entity(ies) , you can use <auto-attibutes> on service definition to define all the parameters without explicitly specifying each attribute, of-course you can explicitly override/exclude certain parameters.

Regards
Vikas

On Apr 18, 2012, at 11:46 PM, Skip wrote:

> I have a URL in a controller like this:
> 
>    <request-map uri="createGenericProductNumber">
>        <security https="true" auth="true"/>
>        <event type="service" invoke="createGenericProductNumber"/>
>        <response name="success" type="view"
> value="generatePartNumberForm"/>
>        <response name="error" type="view" value="generatePartNumberForm"/>
>    </request-map>
> 
> 
> The service is declared like this:
> 
>    <service name="createGenericProductNumber" engine="java" auth="true"
> default-entity-name=""
>            location="com.fs.inventory.GenerateInventoryPartNumbers"
> invoke="createGenericProductNumber"
>            use-transaction="true" validate="false" >
>        <description>
>        	Create an endmill product id from the required inputs
>        </description>
>       <attribute name="kindId" type="String" mode="INOUT"
> optional="false"/>
>       <attribute name="tableName" type="String" mode="IN"
> optional="false"/>
>       <attribute name="encodeIdString" type="String" mode="IN"
> optional="false"/>
>        <attribute name="partNumber" type="String" mode="OUT"
> optional="false"/>
>        <attribute name="description" type="String" mode="OUT"
> optional="true"/>
>        <attribute name="longDesc" type="String" mode="OUT"
> optional="true"/>
>     </service>
> 
> 
> Note the "validate=false".  This url is called from a screen that has lots
> of parameters not declared in service above like width, length, etc.  None
> of these parameters are being passed to the createGenericProductNumber
> service in its context.
> 
> 
> I rewrote the the url like this:
> 
>    <request-map uri="createGenericProductNumber">
>        <security https="true" auth="true"/>
>        <event type="java" path="com.fs.inventory.InventoryEvents"
> invoke="createGenericProductNumber"/>
>        <response name="success" type="view"
> value="generatePartNumberForm"/>
>        <response name="error" type="view" value="generatePartNumberForm"/>
>    </request-map>
> 
> In this case, all the parameters from the page are in the parameter map of
> the HttpServletRequest.
> 
> Is there any way I can get the service engine to pass all the parameters
> from request in the context to the service and not just those in the service
> declaration?
> 
> Thanks in Advance
> Skip
>