hi Bruno,

Thanks for your explanation.

Really look forward to the XML driven widgets.

--
Regards,
Michael Xu (xudong)
www.wizitsoft.com | Office: (8610) 6267 0615 ext 806 | Mobile: (86) 135 0135
9807 | Fax: (8610) 62670096


On Fri, Oct 16, 2009 at 3:13 PM, Bruno Busco <bruno.bu...@gmail.com> wrote:

> Hi Michael,
> actually OFBiz offers the possibility of designing UI without knowing
> the java language.
> There are powerfull widgets that are being developed further day by
> day to let you design UI using XML.
> There is a minilanguage that lets you collect and prepare de data to
> be presented using XML.
>
> Very often it is necessary to group in a single screen data coming
> from different entities and this would be even more difficult to be
> described in the entity itself.
>
> More generally the model you propose puts toghether the database layer
> and the presentation layer that we always try to keep  separated.
>
> My two cents,
> Bruno
>
> 2009/10/16 Michael Xu (xudong) <dong...@wizitsoft.com>:
> > BTW, I think My idea can be implemented in a backword compatible way. So
> at
> > least that will be another choice to implement new ofbiz applications.
> >
> > --
> > Regards,
> > Michael Xu (xudong)
> > www.wizitsoft.com | Office: (8610) 6267 0615 ext 806 | Mobile: (86) 135
> 0135
> > 9807 | Fax: (8610) 62670096
> >
> >
> > On Fri, Oct 16, 2009 at 2:42 PM, Michael Xu (xudong)
> > <dong...@wizitsoft.com>wrote:
> >
> >> hi Scott,
> >>
> >> Thanks. Please see my inline comments.
> >>
> >> --
> >> Regards,
> >> Michael Xu (xudong)
> >> www.wizitsoft.com | Office: (8610) 6267 0615 ext 806 | Mobile: (86) 135
> >> 0135 9807 | Fax: (8610) 62670096
> >>
> >>
> >> On Fri, Oct 16, 2009 at 2:14 PM, Scott Gray <scott.g...@hotwaxmedia.com
> >wrote:
> >>
> >>> The problem is that with a generic data model many entities are used in
> >>> many different places and in different contexts,
> >>
> >>
> >> My idea is to use different GROUPs for different contexts.
> >>
> >>
> >>> if you tried to encapsulate all of those differences within a single
> >>> entity definition you are very quickly going to end up with a very
> messy
> >>> entity model.
> >>
> >>
> >> Yes, you are right. Can we split a big entity definition file into many?
> >> Does it help?
> >>
> >>
> >>> IMO separation of concerns is a good thing, you're complaining about
> >>> having to make changes in many places, but at least you know what
> effect
> >>> each change is having,  in your model I would need to check everywhere
> that
> >>> an entity is used before making a change to be sure of what effect a
> >>> seemingly minor adjustment would have.
> >>>
> >>> I think GROUP is a way to control such affects, because GROUP will be
> used
> >> in UI in my idea.
> >>
> >> The pain point with current design is that the developer (for some
> >> customers, we even cannot assume they have a java developer) has to
> >> understand the overall infrastructure for such minor customization.
> >>
> >> But if we put them in one place using xml format, even a business guy
> can
> >> implement such customization without any java knowledge.
> >>
> >> For senior ofbiz developers, like you, the current design is very
> flexible.
> >> But it might be another story for other people.
> >>
> >>
> >>> Regards
> >>> Scott
> >>>
> >>>
> >>> On 16/10/2009, at 6:58 PM, Michael Xu (xudong) wrote:
> >>>
> >>>  hi Scott,
> >>>>
> >>>> I got your points. Actually, form widgets are still required to show
> the
> >>>> GROUP with a set of predefined fields. But such form widget will be
> very
> >>>> generic, which is just show the group in the way defined in the entity
> >>>> model. And as such the benefits are:
> >>>> 1) a single point to define entity behavior (not just data structure)
> >>>> 2) UI gets configurable directly in the single point (no need to
> change
> >>>> form
> >>>> widgets or ftl in many places)
> >>>> 3) less java codes and widgets are required.
> >>>>
> >>>> In a summary, bringing more power to entity definition.
> >>>>
> >>>> --
> >>>> Regards,
> >>>> Michael Xu (xudong)
> >>>> www.wizitsoft.com | Office: (8610) 6267 0615 ext 806 | Mobile: (86)
> 135
> >>>> 0135
> >>>> 9807 | Fax: (8610) 62670096
> >>>>
> >>>>
> >>>> On Fri, Oct 16, 2009 at 1:39 PM, Scott Gray <
> scott.g...@hotwaxmedia.com
> >>>> >wrote:
> >>>>
> >>>>  I think to be able to generate a reasonably functional UI from
> something
> >>>>> like this you'd end up with so much complexity in your entity model
> that
> >>>>> someone would come up with a new idea to solve that problem and
> they'd
> >>>>> call
> >>>>> it the form widget.
> >>>>>
> >>>>> Regards
> >>>>> Scott
> >>>>>
> >>>>> HotWax Media
> >>>>> http://www.hotwaxmedia.com
> >>>>>
> >>>>>
> >>>>> On 16/10/2009, at 5:22 PM, Hans Bakker wrote:
> >>>>>
> >>>>> In general, this looks like a pretty good idea.
> >>>>>
> >>>>>>
> >>>>>> The visibility tag  would be nice if the widgets took advantage of
> >>>>>> that.
> >>>>>> then i would be easy to let a field disappear in the whole system
> when
> >>>>>> a
> >>>>>> if a simple 'true/false' would be possible.
> >>>>>>
> >>>>>> More complicated ones like the ones mentioned below could also be
> >>>>>> interesting but the integration in the widgets is a must. ftl's will
> me
> >>>>>> more difficult (macros), jsp, not sure if we should support that.
> >>>>>>
> >>>>>> trigger and validation will be more complex but sure we could look
> at
> >>>>>> that.
> >>>>>>
> >>>>>> In general a good idea
> >>>>>>
> >>>>>> Regards,
> >>>>>> Hans
> >>>>>>
> >>>>>>
> >>>>>> On Fri, 2009-10-16 at 05:16 +0800, Michael Xu (xudong) wrote:
> >>>>>>
> >>>>>>  hi all,
> >>>>>>>
> >>>>>>> We can define entities in XML files. However, only database
> specific
> >>>>>>> semantics could be defined there. For those application level
> >>>>>>> semantics
> >>>>>>> (like trigger, visiblity, validation) has to be defined in
> different
> >>>>>>> places.
> >>>>>>> The lack of a single place to define such metadata makes ofbiz hard
> to
> >>>>>>> maintain. (Correct me if I am wrong)
> >>>>>>>
> >>>>>>> Let's take OrderHeader as an example. I copy the latest entity
> >>>>>>> definition
> >>>>>>> as
> >>>>>>> below:
> >>>>>>>
> >>>>>>>  <entity entity-name="OrderHeader"
> >>>>>>>         package-name="org.ofbiz.order.order"
> >>>>>>>         never-cache="true"
> >>>>>>>         title="Order Header Entity">
> >>>>>>>   <field name="orderId" type="id-ne"></field>
> >>>>>>>   <field name="orderTypeId" type="id"></field>
> >>>>>>>   <field name="orderName" type="name"></field>
> >>>>>>>   <field name="externalId" type="id"></field>
> >>>>>>>   <field name="salesChannelEnumId" type="id"></field>
> >>>>>>>   <field name="orderDate" type="date-time"></field>
> >>>>>>>   <field name="entryDate" type="date-time"></field>
> >>>>>>>   <field name="visitId" type="id"></field>
> >>>>>>>   <field name="statusId" type="id"></field>
> >>>>>>>   <field name="createdBy" type="id-vlong"></field>
> >>>>>>>   <field name="firstAttemptOrderId" type="id"></field>
> >>>>>>>   <field name="currencyUom" type="id"></field>
> >>>>>>>   <field name="syncStatusId" type="id"></field>
> >>>>>>>   <field name="billingAccountId" type="id"></field>
> >>>>>>>   <field name="originFacilityId" type="id"></field>
> >>>>>>>   <field name="webSiteId" type="id"></field>
> >>>>>>>   <field name="productStoreId" type="id"></field>
> >>>>>>>   <field name="terminalId" type="id-long"></field>
> >>>>>>>   <field name="transactionId" type="id-long"></field>
> >>>>>>>   <field name="autoOrderShoppingListId" type="id"></field>
> >>>>>>>   <field name="needsInventoryIssuance" type="indicator"></field>
> >>>>>>>   <field name="isRushOrder" type="indicator"></field>
> >>>>>>>   <field name="internalCode" type="id-long"></field>
> >>>>>>>   <field name="remainingSubTotal" type="currency-amount"></field>
> >>>>>>>   <field name="grandTotal" type="currency-amount"></field>
> >>>>>>>   <prim-key field="orderId"/>
> >>>>>>>   <relation type="one" fk-name="ORDER_HDR_TYPE"
> >>>>>>> rel-entity-name="OrderType">
> >>>>>>>     <key-map field-name="orderTypeId"/>
> >>>>>>>   </relation>
> >>>>>>>   <relation type="one" fk-name="ORDER_HDR_SCENUM"
> title="SalesChannel"
> >>>>>>> rel-entity-name="Enumeration">
> >>>>>>>     <key-map field-name="salesChannelEnumId"
> rel-field-name="enumId"/>
> >>>>>>>   </relation>
> >>>>>>>   <relation type="one" fk-name="ORDER_HDR_OFAC" title="Origin"
> >>>>>>> rel-entity-name="Facility">
> >>>>>>>     <key-map field-name="originFacilityId"
> >>>>>>> rel-field-name="facilityId"/>
> >>>>>>>   </relation>
> >>>>>>>   <relation type="many" rel-entity-name="OrderTypeAttr">
> >>>>>>>     <key-map field-name="orderTypeId"/>
> >>>>>>>   </relation>
> >>>>>>>   <relation type="one" fk-name="ORDER_HDR_BACCT"
> >>>>>>> rel-entity-name="BillingAccount">
> >>>>>>>     <key-map field-name="billingAccountId"/>
> >>>>>>>   </relation>
> >>>>>>>   <relation type="one" fk-name="ORDER_HDR_PDSTR"
> >>>>>>> rel-entity-name="ProductStore">
> >>>>>>>     <key-map field-name="productStoreId"/>
> >>>>>>>   </relation>
> >>>>>>>   <relation type="one" fk-name="ORDER_HDR_AOSHLST"
> title="AutoOrder"
> >>>>>>> rel-entity-name="ShoppingList">
> >>>>>>>     <key-map field-name="autoOrderShoppingListId"
> >>>>>>> rel-field-name="shoppingListId"/>
> >>>>>>>   </relation>
> >>>>>>>   <relation type="one" fk-name="ORDER_HDR_CBUL" title="CreatedBy"
> >>>>>>> rel-entity-name="UserLogin">
> >>>>>>>     <key-map field-name="createdBy" rel-field-name="userLoginId"/>
> >>>>>>>   </relation>
> >>>>>>>   <relation type="one" fk-name="ORDER_HDR_STTS"
> >>>>>>> rel-entity-name="StatusItem">
> >>>>>>>     <key-map field-name="statusId"/>
> >>>>>>>   </relation>
> >>>>>>>   <relation type="one" fk-name="ORDER_HDR_SYST" title="Sync"
> >>>>>>> rel-entity-name="StatusItem">
> >>>>>>>     <key-map field-name="syncStatusId" rel-field-name="statusId"/>
> >>>>>>>   </relation>
> >>>>>>>   <relation type="one" fk-name="ORDER_HDR_CUOM"
> rel-entity-name="Uom">
> >>>>>>>     <key-map field-name="currencyUom" rel-field-name="uomId"/>
> >>>>>>>   </relation>
> >>>>>>>   <relation type="many" rel-entity-name="OrderHeaderNoteView">
> >>>>>>>     <key-map field-name="orderId"/>
> >>>>>>>   </relation>
> >>>>>>>   <relation type="many"
> rel-entity-name="OrderItemAndShipGroupAssoc">
> >>>>>>>     <key-map field-name="orderId"/>
> >>>>>>>   </relation>
> >>>>>>>   <index name="ORDEREXT_ID_IDX">
> >>>>>>>     <index-field name="externalId"/>
> >>>>>>>   </index>
> >>>>>>>  </entity>
> >>>>>>>
> >>>>>>> In order to enrich the definition (metadata) with more information,
> I
> >>>>>>> am
> >>>>>>> considering to put more tags (please find elements surrounded with
> >>>>>>> !!!!!!!!!!!!!!!!!!!!!), like:
> >>>>>>>
> >>>>>>>  <entity entity-name="OrderHeader"
> >>>>>>>         package-name="org.ofbiz.order.order"
> >>>>>>>         never-cache="true"
> >>>>>>>         title="Order Header Entity">
> >>>>>>>   <field name="orderId" type="id-ne"></field>
> >>>>>>>   <field name="orderTypeId" type="id"></field>
> >>>>>>>   <field name="orderName" type="name"></field>
> >>>>>>>
> >>>>>>>
> >>>>>>>   <!- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
> >>>>>>>   <field name="externalId" type="id">
> >>>>>>>        <!-
> >>>>>>>             We can use "visiblity" tag to tell system when to show
> >>>>>>> this
> >>>>>>> field in UI layer.
> >>>>>>>         ->
> >>>>>>>        <visbility>
> >>>>>>>             <condition
> >>>>>>> implementation="org.ofbiz.core.condition.NonEmptyField"/>
> >>>>>>>        </visbility>
> >>>>>>>        <validity type="clientSide">
> >>>>>>>             <condition notEqual="111"/>
> >>>>>>>        </validity>
> >>>>>>>   </field>
> >>>>>>>   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ->
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>>   <field name="salesChannelEnumId" type="id"></field>
> >>>>>>>   <field name="orderDate" type="date-time"></field>
> >>>>>>>   <field name="entryDate" type="date-time"></field>
> >>>>>>>   <field name="visitId" type="id"></field>
> >>>>>>>   <field name="statusId" type="id"></field>
> >>>>>>>   <field name="createdBy" type="id-vlong"></field>
> >>>>>>>   <field name="firstAttemptOrderId" type="id"></field>
> >>>>>>>   <field name="currencyUom" type="id"></field>
> >>>>>>>   <field name="syncStatusId" type="id"></field>
> >>>>>>>   <field name="billingAccountId" type="id"></field>
> >>>>>>>   <field name="originFacilityId" type="id"></field>
> >>>>>>>   <field name="webSiteId" type="id"></field>
> >>>>>>>   <field name="productStoreId" type="id"></field>
> >>>>>>>   <field name="terminalId" type="id-long"></field>
> >>>>>>>   <field name="transactionId" type="id-long"></field>
> >>>>>>>   <field name="autoOrderShoppingListId" type="id"></field>
> >>>>>>>   <field name="needsInventoryIssuance" type="indicator"></field>
> >>>>>>>   <field name="isRushOrder" type="indicator"></field>
> >>>>>>>   <field name="internalCode" type="id-long"></field>
> >>>>>>>   <field name="remainingSubTotal" type="currency-amount"></field>
> >>>>>>>   <field name="grandTotal" type="currency-amount"></field>
> >>>>>>>   <prim-key field="orderId"/>
> >>>>>>>   <relation type="one" fk-name="ORDER_HDR_TYPE"
> >>>>>>> rel-entity-name="OrderType">
> >>>>>>>     <key-map field-name="orderTypeId"/>
> >>>>>>>   </relation>
> >>>>>>>   <relation type="one" fk-name="ORDER_HDR_SCENUM"
> title="SalesChannel"
> >>>>>>> rel-entity-name="Enumeration">
> >>>>>>>     <key-map field-name="salesChannelEnumId"
> rel-field-name="enumId"/>
> >>>>>>>   </relation>
> >>>>>>>   <relation type="one" fk-name="ORDER_HDR_OFAC" title="Origin"
> >>>>>>> rel-entity-name="Facility">
> >>>>>>>     <key-map field-name="originFacilityId"
> >>>>>>> rel-field-name="facilityId"/>
> >>>>>>>   </relation>
> >>>>>>>   <relation type="many" rel-entity-name="OrderTypeAttr">
> >>>>>>>     <key-map field-name="orderTypeId"/>
> >>>>>>>   </relation>
> >>>>>>>   <relation type="one" fk-name="ORDER_HDR_BACCT"
> >>>>>>> rel-entity-name="BillingAccount">
> >>>>>>>     <key-map field-name="billingAccountId"/>
> >>>>>>>   </relation>
> >>>>>>>   <relation type="one" fk-name="ORDER_HDR_PDSTR"
> >>>>>>> rel-entity-name="ProductStore">
> >>>>>>>     <key-map field-name="productStoreId"/>
> >>>>>>>   </relation>
> >>>>>>>   <relation type="one" fk-name="ORDER_HDR_AOSHLST"
> title="AutoOrder"
> >>>>>>> rel-entity-name="ShoppingList">
> >>>>>>>     <key-map field-name="autoOrderShoppingListId"
> >>>>>>> rel-field-name="shoppingListId"/>
> >>>>>>>   </relation>
> >>>>>>>   <relation type="one" fk-name="ORDER_HDR_CBUL" title="CreatedBy"
> >>>>>>> rel-entity-name="UserLogin">
> >>>>>>>     <key-map field-name="createdBy" rel-field-name="userLoginId"/>
> >>>>>>>   </relation>
> >>>>>>>   <relation type="one" fk-name="ORDER_HDR_STTS"
> >>>>>>> rel-entity-name="StatusItem">
> >>>>>>>     <key-map field-name="statusId"/>
> >>>>>>>   </relation>
> >>>>>>>   <relation type="one" fk-name="ORDER_HDR_SYST" title="Sync"
> >>>>>>> rel-entity-name="StatusItem">
> >>>>>>>     <key-map field-name="syncStatusId" rel-field-name="statusId"/>
> >>>>>>>   </relation>
> >>>>>>>   <relation type="one" fk-name="ORDER_HDR_CUOM"
> rel-entity-name="Uom">
> >>>>>>>     <key-map field-name="currencyUom" rel-field-name="uomId"/>
> >>>>>>>   </relation>
> >>>>>>>   <relation type="many" rel-entity-name="OrderHeaderNoteView">
> >>>>>>>     <key-map field-name="orderId"/>
> >>>>>>>   </relation>
> >>>>>>>   <relation type="many"
> rel-entity-name="OrderItemAndShipGroupAssoc">
> >>>>>>>     <key-map field-name="orderId"/>
> >>>>>>>   </relation>
> >>>>>>>   <index name="ORDEREXT_ID_IDX">
> >>>>>>>     <index-field name="externalId"/>
> >>>>>>>   </index>
> >>>>>>>
> >>>>>>>
> >>>>>>>   <!- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
> >>>>>>>   <!-
> >>>>>>>      In different context, maybe different set of fields need to
> show.
> >>>>>>> So my idea
> >>>>>>>      here is to use "group" to group fields for different scenario.
> >>>>>>> And
> >>>>>>> then in UI
> >>>>>>>      level, we can define a jsp tag or something to only show
> fields
> >>>>>>> within this group.
> >>>>>>>    ->
> >>>>>>>   <group name="summary">
> >>>>>>>        <field name="orderId" rank="1"/>
> >>>>>>>       <field name="orderTypeId" rank="10"/>
> >>>>>>>       <field name="orderName" rank="11"/>
> >>>>>>>   </group>
> >>>>>>>
> >>>>>>>   <group name="details">
> >>>>>>>      <field name="orderId" rank="1"/>
> >>>>>>>       <field name="orderTypeId" rank="10"/>
> >>>>>>>       <field name="orderName" rank="11"/>
> >>>>>>>       <field name="externalId" rank="20">
> >>>>>>>          <!-
> >>>>>>>              !!!!Note: Though visibility is definded above with
> >>>>>>> another
> >>>>>>> condition. However, in this group
> >>>>>>>                           (Scenario), externalID will always be
> >>>>>>> visible.
> >>>>>>>          ->
> >>>>>>>          <visbility value="true"/>
> >>>>>>>       <field>
> >>>>>>>   </group>
> >>>>>>>   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!->
> >>>>>>>  </entity>
> >>>>>>>
> >>>>>>> Such an idea to make entity definition as a single point of
> >>>>>>> configuration/customization might make system easier to
> >>>>>>> maintain/customize.
> >>>>>>> Am I right? If yes, anybody could suggest me how to implement it.
> >>>>>>>
> >>>>>>> (BTW: we are going to use ofbiz entity engine for our products just
> >>>>>>> like
> >>>>>>> what JIRA did. It would be great if such enhancement could be done
> >>>>>>> direct
> >>>>>>> under apache. Otherwise, we might have to maintain a customized
> ofbiz
> >>>>>>> entity
> >>>>>>> engine by ourselves.)
> >>>>>>>
> >>>>>>> --
> >>>>>>> Regards,
> >>>>>>> Michael Xu (xudong)
> >>>>>>> www.wizitsoft.com | Office: (8610) 6267 0615 ext 806 | Mobile:
> (86)
> >>>>>>> 135
> >>>>>>> 0135
> >>>>>>> 9807 | Fax: (8610) 62670096
> >>>>>>>
> >>>>>>>  --
> >>>>>> Antwebsystems.com: Quality OFBiz services for competitive rates
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>
> >>>
> >>
> >
>

Reply via email to