Re: Proposed change to the pk of ProductStoreShipmentMeth

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

Re: Proposed change to the pk of ProductStoreShipmentMeth

Jacopo Cappellato
This is now implemented in rev. 511250

Jacopo

David E. Jones wrote:

>
> I'm personally a very big fan of composite "natural" primary keys, and
> think they should always be the default.
>
> Still, sometimes they just don't work or apply because in the end there
> is no natural composite key, and these sorts of "rule" types entities
> with possibly many varying factors often have this problem.
>
> So, yeah, I'm fine with the change. It means everyone updating will have
> to re-create the primary key, and between dropping the old one and
> creating a new one they'll have to fill in the new sequenced ID.
>
> BTW, an easy way to do this for everyone reading in: just export the
> data to an XML file, drop the table, have OFBiz re-create it, and then
> import the data (without changing it...). The entity engine will
> automatically sequence the data for the new field with the entity name
> as the sequence name. It always does this if there is a single pk field
> and there is not value for it in the entity engine XML file.
>
> Just another trick of the trade I guess. It's also the type that's
> documented, but the application of it is not always obvious. This is why
> I like the training video idea so much, or even throwing the audio from
> it onto an ipod or something, so that you can spend some time every week
> reviewing things. Anyway, I guess that's a side thought, and a bit off
> topic.
>
> Whatever the case, yeah, go for it. The upgrade path is fairly straight
> and not too foggy.
>
> -David
>
>
> On Feb 13, 2007, at 1:50 AM, Jacopo Cappellato wrote:
>
>> What about changing the primary key of the ProductStoreShipmentMeth from:
>>
>> productStoreId
>> shipmentMethodTypeId
>> partyId
>> roleTypeId
>>
>> to:
>>
>> productStoreShipMethId (new field)
>>
>> I did it some time ago for a customer with the need to express rather
>> complex shipping rules where:
>>
>> 1) the order amount was used to determine the shipping cost estimate
>> 2) the postal address and weight were used to select the available
>> shipping options
>>
>> For #1 the existing shipping estimate and quantity breaks entities
>> were perfect.
>> For #2 I had to change the primary key for the
>> ProductStoreShipmentMeth entity because I had to associate the same
>> "shipment method|carrier" to the store many times for different
>> combinations of geo and weight.
>>
>> For example:
>> * USPS is available in NY if weight is less than 30kg
>> * UPS is available in NY if weight is more than 30kg
>> * UPS is the only available method in LA
>> etc...
>>
>> If you agree with the above change, I will commit a patch that it will
>> address all the business logic changes (and ui changes) needed to
>> support the different pk (that are really very few); and the modified
>> system is much more flexible and is woking fine.
>>
>> What do you think?
>>
>> Jacopo
>>
>> Index: applications/product/entitydef/entitymodel.xml
>> ===================================================================
>> --- applications/product/entitydef/entitymodel.xml    (revisione 505884)
>> +++ applications/product/entitydef/entitymodel.xml    (copia locale)
>> @@ -3520,6 +3520,7 @@
>>      <entity entity-name="ProductStoreShipmentMeth"
>>              package-name="org.ofbiz.product.store"
>>              title="Product Store Carrier Shipment Method Entity">
>> +      <field name="productStoreShipMethId" type="id-ne"></field>
>>        <field name="productStoreId" type="id-ne"></field>
>>        <field name="shipmentMethodTypeId" type="id-ne"></field>
>>        <field name="partyId" type="id-ne"></field>
>> @@ -3543,10 +3544,7 @@
>>        <field name="serviceName" type="long-varchar"></field>
>>        <field name="configProps" type="long-varchar"></field>
>>        <field name="sequenceNumber" type="numeric"></field>
>> -      <prim-key field="productStoreId"/>
>> -      <prim-key field="shipmentMethodTypeId"/>
>> -      <prim-key field="partyId"/>
>> -      <prim-key field="roleTypeId"/>
>> +      <prim-key field="productStoreShipMethId"/>
>>        <relation type="one-nofk" rel-entity-name="Party">
>>          <key-map field-name="companyPartyId" rel-field-name="partyId"/>
>>        </relation>
>> @@ -3562,6 +3560,7 @@
>>              title="Product Store Carrier And Shipment Method Type
>> View Entity">
>>        <member-entity entity-alias="PSSM"
>> entity-name="ProductStoreShipmentMeth"/>
>>        <member-entity entity-alias="SM"
>> entity-name="ShipmentMethodType"/>
>> +      <alias entity-alias="PSSM" name="productStoreShipMethId"/>
>>        <alias entity-alias="PSSM" name="productStoreId"/>
>>        <alias entity-alias="PSSM" name="shipmentMethodTypeId"/>
>>        <alias entity-alias="PSSM" name="partyId"/>
>