Thank you for the replies, BJ.  :-)

On Sun, Dec 14, 2008 at 3:54 PM, BJ Freeman <[email protected]> wrote:
> BTW It helps to keep the orginal message.

I've included it, below.

> 1) create a view-entity
> 2) query the view-entity just like any other.
> there are a couple of ways you will find in the code.
> 3) Use an Ftl to create the XML output the way you want.
> look at the fedex template

Yes, we've done these steps ... no problems there.

> Now
> the url you give to an external source to query for the xml
> would go to a service thru the controller to process the request.
> on the return through the controller your view would then present the
> data thru the ftl(xml format).
> you can wrap the ftl in a widget if you want to add more functionality.
> There are examples in the code for all of this if you study it.
> studing this helps
> http://docs.ofbiz.org/display/OFBIZ/OFBiz+Beginner's+Development+Guide+Using+Practice+Application

Thank you for the description.  We've been studying that, the Data
Model book, the Apache OFBiz Development book, the source code, and so
on....  :-]

The standard approach seems to be putting the conditional/constraint
logic in each usage point (form/screen level).  My programmer's
understanding suggests that these constraints would be better located
in the view-entity's declaration (since they never change and can be
localized in one place).

In any case, one of our team has created a good-enough-for-us solution
by relaxing a constraint in the sources and using embedded SQL.  This
is not pretty, but allows us to do the following:

[view-entity entity-name="ProductFindViewEntity"
package-name="emforium.inventory" title="Product-Find View Entity"]
  [member-entity entity-alias="PR" entity-name="Product" /]
  [alias entity-alias="PR" name="productId" /]
  [alias entity-alias="PR" name="internalName" /]
  [alias entity-alias="PR" name="sku"]
    [complex-alias operator="=" ]
      [complex-alias-field entity-alias="PR" field="SELECT id_value
FROM good_identification WHERE good_identification_type_id = 'SKU' AND
product_id" /]
      [complex-alias-field entity-alias="PR" field="productId" /]
    [/complex-alias]
  [/alias]
  [alias entity-alias="PR" name="style"]
    [complex-alias operator="=" ]
      [complex-alias-field entity-alias="PR" field="SELECT id_value
FROM good_identification WHERE good_identification_type_id =
'MANUFACTURER_ID_NO' AND product_id" /]
      [complex-alias-field entity-alias="PR" field="productId" /]
    [/complex-alias]
  [/alias]
[view-entity]

As stated earlier, however, we'd prefer to do something like this
(note the two [where ...] lines):

[view-entity entity-name="ProductFindViewEntity"
package-name="emforium.inventory" title="Product-Find View Entity"]
  [member-entity entity-alias="PR" entity-name="Product" /]
  [member-entity entity-alias="SKU" entity-name="GoodIdentification" /]
  [member-entity entity-alias="MID" entity-name="GoodIdentification" /]
  [alias entity-alias="PR" name="productId" /]
  [alias entity-alias="PR" name="internalName" /]
  [alias entity-alias="SKU" name="sku" field="idValue" /]
  [view-link entity-alias="PR" rel-entity-alias="SKU" rel-optional="true"]
    [key-map field-name="productId" /]
    [where entity-alias="SKU" field="goodIdentificationTypeId" value="SKU" /]
  [/view-link]
  [view-link entity-alias="PR" rel-entity-alias="MID" rel-optional="true"]
    [key-map field-name="productId" /]
    [where entity-alias="MID" field="goodIdentificationTypeId"
value="MANUFACTURER_ID_NO" /]
  [/view-link]
[view-entity]

Our questions are:
- Have we missed some already-available functionality (at the
entitymodel.xml level)?
- Is there a best-practice for this situation, or is it more of a
"this is just what people are doing" thing?
- Are there arguments _against_ either of the above extensions?

We really want to do the right thing with this.  :-)

Thanks for your patience!

.Dave



> David Gay sent the following on 12/14/2008 10:24 AM:
>> On Sat, Dec 13, 2008 at 11:50 PM, BJ Freeman <[email protected]> wrote:
>>> Clarification:
>>> you understand this is a view only.
>>> Not like the DB view where you can add data.
>>
>> Yes, that's fine: the use case is feeding (paginated) search results
>> through an XML-based form.  (An easy alternative to this approach is
>> to use row-actions to gather the required fields, but I wanted to
>> avoid hitting the database on a per-row basis.)
>>
>> .Dave


David Gay sent the following on 12/12/2008 9:05 AM:
> Hi, all!  I've been looking into using view-entity entries to (in this
> instance) collect product information, and have some questions about
> "static conditionals".  But first, some context for discussion
> purposes.  ;-)
>
> Let's say I'd like to have a Product view that includes the product's
> SKU as a column.  Here's a sample entitydef.xml (angle-brackets
> converted to square-brackets):
>
> [view-entity entity-name="ProductFindViewEntity"
> package-name="com.emforium.inventory" title="Product-Find View
> Entity"]
>     [member-entity entity-alias="PR" entity-name="Product" /]
>     [member-entity entity-alias="SKU" entity-name="GoodIdentification" /]
>     [alias entity-alias="PR" name="productId" /]
>     [alias entity-alias="SKU" name="sku" field="idValue" /]
>     [alias entity-alias="SKU" name="skuTypeId"
> field="goodIdentificationTypeId" /]
>     [view-link entity-alias="PR" rel-entity-alias="SKU" rel-optional="true"]
>         [key-map field-name="productId" /]
>     [/view-link]
> [/view-entity]
>
> Let's say I've also added two GoodIdentification rows for a product:
>
> [GoodIdentification productId="ENCHILADAS"
> goodIdentificationTypeId="SKU" idValue="ENCH-SKU" /]
> [GoodIdentification productId="ENCHILADAS"
> goodIdentificationTypeId="MANUFACTURER_ID_NO" idValue="123-ENCH-456"
> /]
>
> Now, a query for productId="ENCHILADAS" on this entity will yield two rows:
>
> productId="ENCHILADAS", sku="ENCH-SKU", skuTypeId="SKU"
> productId="ENCHILADAS", sku="123-ENCH-456", skuTypeId="MANUFACTURER_ID_NO"
>
> Obviously, I need a conditional (e.g. skuTypeId="SKU" OR
> skuTypeId=NULL), which I can do easily enough each place I do the
> query, but I'd prefer to add that to the entitydef.xml file, since
> it's the same in all cases (and avoids messy null-logic, etcetera).
> Perhaps something like this:
>
>     ...
>     [view-link entity-alias="PR" rel-entity-alias="SKU" rel-optional="true"]
>         [key-map field-name="productId" /]
>         [where entity-alias="SKU" field="goodIdentificationTypeId"
> value="SKU" /]
>     [/view-link]
>     ...
>
> So, my questions: Have I missed some already-available functionality?
> Is there a best-practice for this situation?  Has anyone else
> encountered this issue, and if so, how did you solve it?  Are there
> arguments against this sort of extension?
>
> Thanks in advance,
> .Dave

Reply via email to