Jacques,

In the service definition, there's the <implements> mechanism that could allow Skip to define a new service with all the same fields as another (original) OFBiz service, so he doesn't have to redefine the many attributes defined in the original OFBiz service.

Jonathon

Jacques Le Roux wrote:
Jonathon, Skip,

I'm not sure of what Jonathon means (have not time to look at 
services_authorizedotnet.xml right now); maybe he wants to allude that
there is an interface mechanism for services too. Just look for the word 
"interface" in services definitions.

Jacques

De : "Jonathon -- Improov" <[EMAIL PROTECTED]>
Skip,

Create a hot-deploy app (you can skip the webapp creation). Insert a service 
definition (in say
servicedef/services.xml), service name "skip.calculateProductPrice".

Extend the class of original Java method "calculateProductPrice", in case that 
method uses any
class members. In your new class (extended from original class), do your new 
Java method
"calculateProductPrice". The point here is to clearly document for yourself 
which OFBiz method you
are cloning and modifying.

Java extension mechanisms (eg class extends, method overrides) make for clean 
codes that avoid
redundancies. Same for OFBiz extension mechanisms.

By the way, you can "implement" (think Java's "implement" for interfaces) a 
service definition,
kind of. I'm not sure if you can "implement" a fully-defined service definition 
like service
"calculateProductPrice". You can try it.

For egs, see in Accounting module folder servicedef. See 
services_authorizedotnet.xml service
"AIMCCAuthCapture", and services_paymentmethod.xml service "ccAuthInterface" 
and service
"paymentProcessInterface".

Jonathon

[EMAIL PROTECTED] wrote:
Jonathon

Thanks for the input.  However, I guess I didn't ask the question right.
"calculateProductPrice" is defined as a service in services_pricepromo.xml
as:

    <service name="calculateProductPrice" engine="java"
                location="org.ofbiz.product.price.PriceServices"
invoke="calculateProductPrice" auth="false" use-transaction="false">
...

and this is loaded from ...product/ofbiz-component.xml as
    <service-resource type="model" loader="main"
location="servicedef/services_pricepromo.xml"/>

The question is, how can I override the original definition without
modifying Ofbiz code.  i.e. can I put an identically named service
definition in hot-deploy or somewhere and have all of Ofbiz use my new
calculateProductPrice?

Skip


-----Original Message-----
From: Jonathon -- Improov [mailto:[EMAIL PROTECTED]
Sent: Sunday, September 30, 2007 2:39 AM
To: [email protected]
Subject: Re: Complicated pricing


Yes, overriding that method will mean you won't touch the OFBiz codes. That
could mean you can
continue to use your custom method, while still conveniently watching the
community's updates to
the original method.

Such a method override will also kinda "document" your custom method as
"being related to some
original OFBiz method", so you know what original OFBiz codes to use for
side-by-side comparisons
of your codes. Making huge overhauls to the original method can make it
difficult to do such
comparisons.

One gotcha here. Make sure you fully understand the original method you're
overriding, so that you
don't break any dependencies on that method.

As far as possible, I do try to touch as few OFBiz codes as possible. If any
OFBiz codes need to
be enhanced, it is possibly to make them more generic and more base-level or
more fine-grained or
more customizable building blocks.

Jonathon

[EMAIL PROTECTED] wrote:
I have had another discussion about pricing with my customer today and the
pricing is more complicated that I remembered.  Their pricing is based on
a
percentage above cost and package quantity, i.e. 30% above cost for one
package (12 pieces), 25% above cost for 2 packages (24 pieces), and 100
percent above cost for any broken package plus a fixed abount depending on
cost, i.e. + a buck for all below 1 dollar, + 2 for all below 5 and
nothing
for above 10.

This is outside what I see in the ofbiz pricing module in
PriceServices.java, and so it appears as if I will have to write my own
price calculation service.

What I would like to do is write a subclass of PriceServices so my
"calculateProductPrice" subclass gets called whenever
runSync("calculateProductPrice") gets called.  I would like to do this in
such a way that I don't bother the core Ofbiz code as I'll still be using
the shoppingcart, etc.

Can anyone offer any advice or point me to samples?

Skip







Reply via email to