Hi Scott, sorry to jump in. In general i tried to concentrate the setting of the statusId in a single service which is used for EVERY status change. examples are in invoice and customerRequest and other places.
is that a possible solution? Regards, Hans On Thu, 2009-05-07 at 18:24 +1200, Scott Gray wrote: > Hi David > > Thanks for the feedback, here are the main issues as I see it with the > way things are now: > 1. The developer has to know/remember to check for a valid status > change, I'm willing to bet that there are numerous places where it > isn't checked at the moment but should be. > 2. While generally the check is only around 8-12 lines of code, the > developer has to either remember how to write the query and what error > message should be displayed or find some existing code to copy/paste > (is the status set, has the status changed, do the lookup, report an > error). > > I don't think options #2 and #3 below cover problem #1 above but they > may help with #2. > > Also another issue with StatusValidChange is that there is currently > no way to make sure when creating a new record that the initial status > is valid, I stumbled across this while fixing the test cases where a > Shipment was being created in the SHIPMENT_PACKED status and it was > subsequent ECA code that was failing. To solve that I would like to > remove the not empty constraint on StatusValidChange.statusId so that > we can use the entity to indicate valid status entry points and start > checking for them during record creation. > > My only goal with these suggestions is to try and lighten the load on > the developer and this seems like a good opportunity for the framework > to step in because the checks are very generic anyway. > > Regards > Scott > > On 7/05/2009, at 4:56 PM, David E Jones wrote: > > > > > A couple of notes: > > > > 1. if we add something to the entity engine to check this we would > > need to move the Status* entities from the common component to the > > entity component > > > > 2. I played with doing a separate method that genericized checking > > the StatusValidChange, but it made the code bigger and (IMO) more > > difficult to follow and customize, especially since the > > StatusValidChange checking is pretty simple in the first place. > > However, the code would be more generic and perhaps slightly more > > simply (ie maybe not fewer lines, but some of the lines would be > > less complex), so there might be some merit in it... > > > > 3. related to #1, but a variation on that approach: we could perhaps > > have a service that checks this generically that is called through > > an EECA or SECA rule, and then all we have to do is setup that ECA > > rule for each entity we want checked > > > > -David > > > > > > On May 6, 2009, at 9:29 PM, Scott Gray wrote: > > > >> Hi All > >> > >> Currently there is a ton of code in various places that checks to > >> make sure a status change is valid using the StatusValidChange > >> entity, and there are also places where there is no check even > >> though records exist (createShipment for example). I'm wondering > >> we couldn't add support for this to the entity engine itself so > >> that it doesn't have to be done manually, we could add some sort of > >> flag to the entity field def and then GenericEntity could perform > >> the check when setting the field. Thoughts? > >> > >> The only thing I'm not too sure on is the purpose of the condition > >> field on StatusValidChange and how it is intended to be used, there > >> are no examples of its use in the existing data. > >> > >> Failing that I'd at least like to add a utility method and a simple > >> method operation to simplify the task. > >> > >> Thanks > >> Scott > >> > >> HotWax Media > >> http://www.hotwaxmedia.com > >> > >> > >> > > > -- Antwebsystems.com: Quality OFBiz services for competitive rates