If you read section 1.5 and 1.6 to get an idea of UEL syntax and evaluation:

http://docs.ofbiz.org/download/attachments/6430/UEL.pdf

and understand that auto-vivify is an OFBiz add-on to UEL, then it should make 
more sense.

I think I solved the problem with my recent commit. Let's see how it goes.

-Adrian


--- On Tue, 4/14/09, Scott Gray <scott.g...@hotwaxmedia.com> wrote:

> From: Scott Gray <scott.g...@hotwaxmedia.com>
> Subject: Re: Discussion: UEL and backward incompatibility
> To: dev@ofbiz.apache.org
> Date: Tuesday, April 14, 2009, 6:14 PM
> Isn't someEntity.someId a String?
> 
> For example orderHeader.orderId in java would be:
> String orderId = (String)
> orderHeader.get("orderId");
> 
> So my question is why does UEL evaluate orderId to an
> Integer when the  
> actual type was a String?  Or am I still missing something?
> 
> Regards
> Scott
> 
> HotWax Media
> http://www.hotwaxmedia.com
> 
> On 15/04/2009, at 1:01 PM, Adrian Crum wrote:
> 
> >
> > Scott,
> >
> > You're missing something: The problem is with
> using integers as Map  
> > keys, not Map values.
> >
> > -Adrian
> >
> > --- On Tue, 4/14/09, Scott Gray
> <scott.g...@hotwaxmedia.com> wrote:
> >
> >> From: Scott Gray
> <scott.g...@hotwaxmedia.com>
> >> Subject: Re: Discussion: UEL and backward
> incompatibility
> >> To: dev@ofbiz.apache.org
> >> Date: Tuesday, April 14, 2009, 5:22 PM
> >> Sorry if I'm asking something obvious here and
> keep in
> >> mind I haven't really followed the UEL
> introduction very
> >> closely.
> >>
> >> You say below that these numeric Ids are evaluated
> to
> >> integers and my question is why exactly is that? 
> I'm
> >> quite sure in 99% of cases the actual type of the
> map entry
> >> value is a String which just happens to contain
> numbers.  So
> >> in my mind whatever code is retrieving a map
> values using
> >> dot syntax should preserve the type of the
> original value.
> >> Maps in OFBiz almost never require (or want)
> automatic type
> >> conversion of their values so is their any way to
> turn that
> >> off?
> >>
> >> Regards
> >> Scott
> >>
> >> HotWax Media
> >> http://www.hotwaxmedia.com
> >>
> >>
> >>
> >> On 15/04/2009, at 6:38 AM, Adrian Crum wrote:
> >>
> >>> As many of you know, the introduction of the
> Uniform
> >> Expression Language into the framework caused some
> backward
> >> compatibility problems - specifically with IDs
> being used as
> >> Map keys. I tried to accommodate that with a
> couple of bits
> >> of code, but there are still some issues.
> >>>
> >>> There have been suggestions on the mailing
> list for
> >> workarounds, but not all of them work, nor do they
> work all
> >> the time. I don't want to hack up the UEL
> library
> >> further, because its my viewpoint that OFBiz
> should conform
> >> to existing standards, not twist existing
> standards to
> >> conform to OFBiz.
> >>>
> >>> The crux of the main problem is the
> implementation of
> >> auto-vivify that I added to the UEL. Using the
> following
> >> code as an example:
> >>>
> >>> <set
> field="someVar[someEntity.someId]"
> >> value="Hello World!"/>
> >>>
> >>> If someVar was not previously defined, the
> auto-vivify
> >> code tries to guess what data type someVar is
> supposed to
> >> be. If someEntity.someId evaluates to an integer,
> the code
> >> assumes it is an index and creates a List,
> otherwise it
> >> creates a Map. This works fine in most cases.
> >>>
> >>> The problem comes when someEntity.someId
> evaluates to
> >> an integer (most IDs are integers) and the
> developer
> >> intended someVar to be a Map, not a List. There
> needs to be
> >> a way to create and empty Map in those cases.
> >>>
> >>> I believe the best solution is to modify the
> >> <set> element to allow the creation of an
> empty Map or
> >> List. This will remove the ambiguity and solve the
> problem -
> >> without further modifying UEL.
> >>>
> >>> I modified my local copy to allow the creation
> of an
> >> empty Map:
> >>>
> >>> <set field="someVar"
> >> type="NewMap"/>
> >>> <set
> field="someVar[someEntity.someId]"
> >> value="Hello World!"/>
> >>>
> >>> and it works great.
> >>>
> >>> So, the bottom line is, I would like to add
> >> "NewMap" and "NewList" to the
> >> <set> element type attribute. What do you
> think?
> >>>
> >>> -Adrian
> >
> >
> >


      

Reply via email to