You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by jl...@apache.org on 2019/09/05 07:13:10 UTC

svn commit: r1866439 - in /ofbiz/ofbiz-framework/trunk/framework/entity: dtd/entitymodel.xsd src/main/java/org/apache/ofbiz/entity/jdbc/SqlJdbcUtil.java

Author: jleroux
Date: Thu Sep  5 07:13:10 2019
New Revision: 1866439

URL: http://svn.apache.org/viewvc?rev=1866439&view=rev
Log:
Improved: Change current view-link requirement to allow use of  
entity-condition only in view-entities
(OFBIZ-11179)



To explain the subject, i will give an example encountered recently:

We used, for a customer project, a view with Agreement, Virtual and Variant 
product entities and where the agreement can be attached to a virtual OR a 
variant product.
So to make a view returning Variant Product, Virtual Product AND Agreement 
informations, i could not create a view, as the key-map link is mandatory and 
made it impossible.

I can not have an alternative relation to the same entity so we have to 
duplicate member-entity and an alternative relation path. 
The result is a complicated and ugly entity-view

I think this can have been much simpler if i could have done it directly 
through the entity-condition (see the AGPA/PDTA view link in attached file 
ExampleWithoutKeyMap.xml)

So the purpose is to add the possibility to create a view-link without key map,  
if there is an entity-condition.

You can test by applying the given patch and add the entity view from attached 
file ExampleWithoutKeyMap.xml

Thanks: Leila Mekika

Modified:
    ofbiz/ofbiz-framework/trunk/framework/entity/dtd/entitymodel.xsd
    ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/jdbc/SqlJdbcUtil.java

Modified: ofbiz/ofbiz-framework/trunk/framework/entity/dtd/entitymodel.xsd
URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/framework/entity/dtd/entitymodel.xsd?rev=1866439&r1=1866438&r2=1866439&view=diff
==============================================================================
--- ofbiz/ofbiz-framework/trunk/framework/entity/dtd/entitymodel.xsd (original)
+++ ofbiz/ofbiz-framework/trunk/framework/entity/dtd/entitymodel.xsd Thu Sep  5 07:13:10 2019
@@ -384,7 +384,7 @@ under the License.
         <xs:complexType>
             <xs:sequence>
                 <xs:element minOccurs="0" ref="description"/>
-                <xs:element maxOccurs="unbounded" ref="key-map"/>
+                <xs:element minOccurs="0" maxOccurs="unbounded" ref="key-map"/>
                 <xs:element minOccurs="0" ref="entity-condition"/>
             </xs:sequence>
             <xs:attributeGroup ref="attlist.view-link"/>

Modified: ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/jdbc/SqlJdbcUtil.java
URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/jdbc/SqlJdbcUtil.java?rev=1866439&r1=1866438&r2=1866439&view=diff
==============================================================================
--- ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/jdbc/SqlJdbcUtil.java (original)
+++ ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/jdbc/SqlJdbcUtil.java Thu Sep  5 07:13:10 2019
@@ -193,6 +193,7 @@ public final class SqlJdbcUtil {
 
                     StringBuilder condBuffer = new StringBuilder();
 
+                    ModelViewEntity.ViewEntityCondition viewEntityCondition = viewLink.getViewEntityCondition();
                     for (int j = 0; j < viewLink.getKeyMapsSize(); j++) {
                         ModelKeyMap keyMap = viewLink.getKeyMap(j);
                         ModelField linkField = linkEntity.getField(keyMap.getFieldName());
@@ -218,14 +219,13 @@ public final class SqlJdbcUtil {
                         condBuffer.append(".");
                         condBuffer.append(relLinkField.getColName());
                     }
-                    if (condBuffer.length() == 0) {
+                    if (condBuffer.length() == 0 && viewEntityCondition == null) {
                         throw new GenericModelException("No view-link/join key-maps found for the " + viewLink.getEntityAlias() + " and the " + viewLink.getRelEntityAlias() + " member-entities of the " + modelViewEntity.getEntityName() + " view-entity.");
                     }
 
-                    ModelViewEntity.ViewEntityCondition viewEntityCondition = viewLink.getViewEntityCondition();
                     if (viewEntityCondition != null) {
                         EntityCondition whereCondition = viewEntityCondition.getWhereCondition(modelFieldTypeReader, null);
-                        condBuffer.append(" AND ");
+                        if (condBuffer.length() > 0) condBuffer.append(" AND ");
                         condBuffer.append(whereCondition.makeWhereString(modelEntity, null, datasourceInfo));
                     }